Encuentra última versión aprobada de un SPListItem
-
21-09-2019 - |
Pregunta
Estoy tratando de recorrer la colección SPListItem.Versions para encontrar el último elemento de la lista aprobada.
Mi elemento de la lista tiene tres versiones: los dos primeros están aprobados, el último es en el proyecto. Pero mi código dice que están todos en el proyecto! 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;
}
}
Solución
item.Versions [índice] devuelve una instancia SPListItemVersion, y SPListItemVersion.ListItem devuelve el SPListItem padres. Por lo que su versionedItem va a terminar refiriéndose al mismo objeto como elemento, y que está marcando la misma versión de una y otra vez.
Creo que realmente quiere comprobar
if (item.Versions[index].Level == SPFileLevel.Published) {
// check item.Versions[index].VersionLabel
}
Otros consejos
La forma Mattias recomienda y se ha implementado es la mejor manera de hacerlo. Es un poco incómodo, pero todavía eficiente como los elementos se ordenan del más reciente al más antiguo. Esto significa que es probable que obtenga una coincidencia en la versión publicada de forma rápida.
En desarrollo de su MSDN SPListItemVersionCollection artículo (específicamente 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]
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 funcione cuando se despliega en el cliente!