Найти последнюю утвержденную версию SPListItem
Я пытаюсь перебрать коллекцию SPListItem.Versions, чтобы найти последний утвержденный элемент списка.
Мой элемент списка имеет три версии: первые две утверждены, последняя в черновике. Но мой код говорит, что они все в черновике! Пожалуйста помоги!
// 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;
}
}
3 ответа
item.Versions[index] возвращает экземпляр SPListItemVersion, а SPListItemVersion.ListItem возвращает родительский SPListItem. Таким образом, ваш versionedItem будет ссылаться на тот же объект, что и элемент, и вы будете проверять одну и ту же версию снова и снова.
Я верю, что вы действительно хотите проверить
if (item.Versions[index].Level == SPFileLevel.Published) {
// check item.Versions[index].VersionLabel
}
Способ, которым Маттиас рекомендует и который вы внедрили, - лучший способ сделать это. Это немного неловко, но все же эффективно, поскольку предметы заказываются от самых последних до самых старых. Это означает, что вы, скорее всего, быстро найдете соответствие опубликованной версии.
Расширение статьи MSDN SPListItemVersionCollection (в частности, добавление Себастьяна Войцеховского):
// 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]
Мой код в итоге выглядел так:
if (doclist.EnableVersioning)
{
SPListItemVersionCollection allVersions = item.Versions;
// Iterate through all versions
foreach (SPListItemVersion version in allVersions)
{
if (version.Level == SPFileLevel.Published)
{
itemFound = version.ListItem;
}
}
}
Довольно аккуратно, и я действительно надеюсь, что это работает, когда развернуто на клиенте!