2009-09-02 4 views
9

Ich versuche, die SPListItem.Versions-Auflistung zu durchlaufen, um das neueste genehmigte Listenelement zu finden.Suchen Sie die neueste genehmigte Version eines SPListItem

Meine Liste Artikel hat drei Versionen: die ersten beiden sind genehmigt, der letzte ist im Entwurf. Aber mein Code sagt, dass sie alle im Entwurf sind! Bitte helfen Sie!

// 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; 
    } 
} 

Antwort

9

item.Versions [index] Gibt ein SPListItemVersion Instanz und SPListItemVersion.ListItem gibt die übergeordnete SPListItem. Ihr versionedItem verweist also auf dasselbe Objekt wie das Element, und Sie überprüfen dieselbe Version immer wieder.

Ich glaube, Sie wollen tatsächlich

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

Es funktionierte, danke! Ist es nicht ein bisschen peinlich, die Eltern so zu bekommen? Und die Begriffe durcheinander geraten, wenn Sie mich fragen, wenn Sie es in SharePoint nennen, nennen Sie es Zustimmung, auf der Liste seine Moderation und auf dem Listenpunkt seinen Level !? –

6

Mein Code wie folgt aussehen am Ende überprüfen:

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!

+3

Aufrufen von itemFound = version.ListItem; Gibt die letzte Version zurück, die möglicherweise nicht die letzte genehmigte Version ist. Vorsicht –

9

Die Art, wie Mattias empfiehlt und Sie implementiert haben, ist der beste Weg, dies zu tun. Es ist ein wenig peinlich, aber immer noch effizient, da die Gegenstände von den neuesten zu den ältesten bestellt werden. Dies bedeutet, dass Sie wahrscheinlich schnell eine Übereinstimmung mit der veröffentlichten Version erhalten.

Aufbauend auf den MSDN SPListItemVersionCollection article (insbesondere 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] 
+0

Danke, sehr hilfreich! Und danke, dass du meine schlampige Schreibweise bearbeitet hast! :) –

+0

Kein Problem. Bearbeitet, um Benutzern zu helfen, Ihre Frage später zu finden. –

+0

Da der Link, den Sie einbezogen haben, jetzt auf SharePoint 2013 verweist und der Community-Inhalt, auf den Sie verwiesen haben, an die vorherige Version angehängt ist: http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.splistitemversioncollection(v=office) .12) .aspx – Chloraphil

Verwandte Themen