我想通过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;
    }
}
有帮助吗?

解决方案

item.Versions [指数]返回一个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;
        }
    }
}

整齐漂亮,我真的很希望当客户部署它的作品!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top