2009-09-02 7 views
9

Estoy intentando recorrer la colección SPListItem.Versions para encontrar el último elemento aprobado de la lista.Buscar la última versión aprobada de un SPListItem

Mi elemento de la lista tiene tres versiones: las dos primeras están aprobadas, la última está en borrador. ¡Pero mi código dice que están todos en borrador! ¡Por favor ayuda!

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

Respuesta

9

item.Versions [índice] devuelve una instancia SPListItemVersion, y SPListItemVersion.ListItem devuelve el SPListItem padres. Por lo tanto, su versionedItem terminará refiriéndose al mismo objeto como elemento, y está revisando la misma versión una y otra vez.

Creo que realmente quiere comprobar

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

funcionó, gracias! ¿No es un poco incómodo tener al padre así? Y los términos se confunden si me preguntan cuándo en SharePoint lo llaman aprobación, supongo, en la lista su moderación y en el elemento de la lista su nivel !? –

6

Mi código terminó con este aspecto:

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

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

Bastante limpio y realmente espero que funciona cuando se despliega en el cliente!

+3

Llamar itemFound = version.ListItem; devolverá la última versión que puede no ser la última aprobada. Cuidado con –

9

La forma en que Mattias recomienda y ha implementado es la mejor manera de hacerlo. Es un poco incómodo pero aún eficiente ya que los artículos se ordenan desde el más reciente hasta el más antiguo. Esto significa que es probable que obtenga una coincidencia en la versión publicada rápidamente.

Ampliando el MSDN SPListItemVersionCollection article (en concreto, además 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] 
+0

¡Gracias, muy útiles! ¡Y gracias por editar mi ortografía descuidada! :) –

+0

No hay problema. Editado para ayudar a los usuarios a encontrar su pregunta más tarde. –

+0

Como el enlace que incluyó ahora apunta a SharePoint 2013, y el contenido de la comunidad a la que hizo referencia está adjunto a la versión anterior: http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.splistitemversioncollection(v=office .12) .aspx – Chloraphil

Cuestiones relacionadas