我正在尝试遍历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;
}
}
答案 0 :(得分:9)
item.Versions [index]返回SPListItemVersion实例,SPListItemVersion.ListItem返回父SPListItem。因此,你的versionedItem将最终引用与item相同的对象,并且你一遍又一遍地检查相同的版本。
我相信你确实想检查
if (item.Versions[index].Level == SPFileLevel.Published) {
// check item.Versions[index].VersionLabel
}
答案 1 :(得分:9)
Mattias推荐并实施的方式是最好的方法。这有点尴尬,但仍然有效,因为物品从最近到最旧订购。这意味着您可能很快就会对已发布的版本进行匹配。
扩展MSDN SPListItemVersionCollection article(特别是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]
答案 2 :(得分:6)
我的代码最终看起来像这样:
if (doclist.EnableVersioning)
{
SPListItemVersionCollection allVersions = item.Versions;
// Iterate through all versions
foreach (SPListItemVersion version in allVersions)
{
if (version.Level == SPFileLevel.Published)
{
itemFound = version.ListItem;
}
}
}
非常整洁,我真的希望它在客户部署时能够正常工作!