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;
    }
}
Foi útil?

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!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top