查找最新批准的SPListItem版本

时间:2009-09-02 07:15:18

标签: sharepoint versioning document-library 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 个答案:

答案 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;
        }
    }
}

非常整洁,我真的希望它在客户部署时能够正常工作!