Frage

Ich versuche, eine Iteration durch die SPListItem.Versions Sammlung die letzten freigegebene Liste Artikel zu finden.

Mein Listenelement hat drei Versionen: die ersten beide zugelassen sind, die letzte im Entwurf ist. Aber mein Code sagt, dass sie alle im Entwurf sind! Bitte Hilfe!

// 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;
    }
}
War es hilfreich?

Lösung

item.Versions [index] gibt eine SPListItemVersion Instanz und SPListItemVersion.ListItem gibt den Eltern SPListItem. Also Ihr versionedItem auf das gleiche Objekt wie Artikel beziehe enden wird, und Sie die gleiche Version immer und immer wieder zu überprüfen.

Ich glaube, Sie tatsächlich überprüfen möchten

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

Andere Tipps

Der Weg Mattias empfiehlt und Sie implementiert haben, ist der beste Weg, es zu tun. Es ist ein wenig umständlich, aber immer noch effizient wie die Elemente aus jüngsten bis zum ältesten geordnet. Das heißt, Sie sind wahrscheinlich schnell ein Spiel auf der veröffentlichten Version erhalten.

Der Ausbau auf der MSDN SPListItemVersionCollection Artikel (speziell Sebastian Wojciechowskis Zusatz):

// 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]

Mein Code endete wie folgt aussehen:

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

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

Recht ordentlich, und ich hoffe wirklich funktioniert es, wenn beim Kunden im Einsatz!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top