Domanda

Sto cercando di scorrere l'insieme SPListItem.Versions per trovare le ultime voce dell'elenco approvato.

Il mio elemento della lista ha tre versioni: i primi due sono approvati, l'ultimo è in progetto. Ma il mio codice dice che sono tutti in progetto! Si prega di aiutare!

// 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;
    }
}
È stato utile?

Soluzione

item.Versions [index] restituisce un'istanza SPListItemVersion, e SPListItemVersion.ListItem restituisce lo SPListItem genitore. Così il vostro versionedItem finirà riferendosi allo stesso oggetto come oggetto, e si sta controllando la stessa versione più e più volte.

Credo che realmente desidera controllare

if (item.Versions[index].Level == SPFileLevel.Published) {
  // check item.Versions[index].VersionLabel
}

Altri suggerimenti

Il modo Mattias raccomanda e si è implementato è il modo migliore per farlo. E 'un po' imbarazzante, ma ancora efficiente come gli articoli sono ordinati dal più recente al più vecchio. Questo significa che si rischia di ottenere una corrispondenza sulla versione pubblicata in fretta.

L'espansione sul MSDN SPListItemVersionCollection articolo (specificamente aggiunta di 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]

Il mio codice ha finito per assomigliare a questo:

if (doclist.EnableVersioning)
{
    SPListItemVersionCollection allVersions = item.Versions;

    // Iterate through all versions
    foreach (SPListItemVersion version in allVersions)
    {
        if (version.Level == SPFileLevel.Published)
        {
            itemFound = version.ListItem;
        }
    }
}

Abbastanza pulito e spero davvero che funziona se implementata presso il cliente!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top