2009-09-02 12 views
9

Próbuję iterować za pośrednictwem kolekcji SPListItem.Versions, aby znaleźć najnowszy zatwierdzony element listy.Znajdź najnowszą zaaprobowaną wersję składnika SPListItem

Moja pozycja na liście ma trzy wersje: dwie pierwsze są zatwierdzone, ostatnia jest w wersji roboczej. Ale mój kod mówi, że wszystkie są w wersji roboczej! Proszę pomóż!

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

Odpowiedz

9

item.Versions [indeks] Zwraca wystąpienie SPListItemVersion i SPListItemVersion.ListItem zwraca SPListItem macierzysty. Tak więc twoja wersjaedItem zakończy się odwoływaniem do tego samego obiektu co element, i ciągle sprawdzasz tę samą wersję.

wierzę rzeczywiście chcesz sprawdzić

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

Udało się, dzięki! Czy nie jest to trochę kłopotliwe, aby uzyskać takiego rodzica? A warunki ulegają pomieszaniu, jeśli pytasz mnie, kiedy w SharePoint nazywasz to zatwierdzeniem, chyba na liście jego Moderation i na liście pozycji Level !? –

6

Mój kod skończyło się patrząc tak:

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

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

Całkiem miłe i mam nadzieję, że działa po wdrożeniu u klienta!

+3

Wywołanie itemFound = version.ListItem; zwróci ostatnią wersję, która może nie być ostatnią zatwierdzoną. Strzeż się –

9

Sposób, w jaki Mattias zaleca i zaimplementował to najlepszy sposób na zrobienie tego. Jest trochę niezręczny, ale nadal sprawny, ponieważ przedmioty są zamawiane od najnowszego do najstarszego. Oznacza to, że prawdopodobnie szybko uzyskasz zgodność z opublikowaną wersją.

Rozszerzenie na (konkretnie oprócz Sebastiana Wojciechowskiego) MSDN SPListItemVersionCollection article:

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

Dzięki, bardzo pomocne! I dzięki za edycję mojej niechlujnej pisowni! :) –

+0

Bez problemu. Edytowane, aby pomóc użytkownikom znaleźć Twoje pytanie później. –

+0

Łącze, które teraz zawierasz, wskazuje na SharePoint 2013, a zawartość społeczności, do której się odwołujesz, jest dołączona do poprzedniej wersji: http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.splistitemversioncollection(v=office .12) .aspx – Chloraphil

Powiązane problemy