Encontre a versão mais recente aprovada de um splistitem
-
21-09-2019 - |
Pergunta
Estou tentando iterar a coleção SplistiTem.versions para encontrar o item de lista aprovado mais recente.
Meu item da lista tem três versões: as duas primeiras são aprovadas, o último está em rascunho. Mas meu código diz que eles estão todos em rascunho! Por favor ajude!
// Iterate through all versions
for (int index = 0; index < item.Versions.Count; index++)
{
SPListItem versionedItem = item.Versions[index].ListItem;
// Check if moderation information is set to approved
if (versionedItem.ModerationInformation.Status.Equals(SPModerationStatusType.Approved))
{
// We found an approved version!
itemFound = versionedItem;
}
}
Solução
Item.versions [Índice] Retorna uma instância do SplistiTemversion e SplistItemversion.ListItem Retorna o pai SplistiTem. Portanto, o seu versãoEdItem acabará se referindo ao mesmo objeto que o item e você está verificando a mesma versão repetidamente.
Eu acredito que você realmente quer verificar
if (item.Versions[index].Level == SPFileLevel.Published) {
// check item.Versions[index].VersionLabel
}
Outras dicas
A maneira como Mattias recomenda e você implementou é a melhor maneira de fazê -lo. É um pouco estranho, mas ainda eficiente, pois os itens são ordenados da mais recente para a mais antiga. Isso significa que você provavelmente receberá uma correspondência na versão publicada rapidamente.
Expandindo o Artigo do MSDN SplistItemversionCollection (especificamente a adição de Sebastian Wojciechowski):
// Current version of the item (note: this may be a draft)
SPListItem.Versions[0]
// Previous version of the item
SPListItem.Versions[1]
// First version of the item
SPListItem.Versions[SPListItem.Versions.Count - 1]
Meu código acabou sendo assim:
if (doclist.EnableVersioning)
{
SPListItemVersionCollection allVersions = item.Versions;
// Iterate through all versions
foreach (SPListItemVersion version in allVersions)
{
if (version.Level == SPFileLevel.Published)
{
itemFound = version.ListItem;
}
}
}
Muito legal e eu realmente espero que funcione quando implantado no cliente!