Sharepoint 查找SPListItem的最新批准版本

Sharepoint 查找SPListItem的最新批准版本,sharepoint,versioning,document-library,splistitem,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;

我正在尝试遍历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;
    }
}
//遍历所有版本
对于(int index=0;index
item.Versions[index]返回SPListItemVersion实例,而SPListItemVersion.ListItem返回父SPListItem。因此,您的versionedItem最终将引用与item相同的对象,并且您将反复检查相同的版本

我相信你真的想检查一下

if (item.Versions[index].Level == SPFileLevel.Published) {
  // check item.Versions[index].VersionLabel
}

我的代码最终如下所示:

if (doclist.EnableVersioning)
{
    SPListItemVersionCollection allVersions = item.Versions;

    // Iterate through all versions
    foreach (SPListItemVersion version in allVersions)
    {
        if (version.Level == SPFileLevel.Published)
        {
            itemFound = version.ListItem;
        }
    }
}

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

Mattias推荐的方法和您已经实施的方法是最好的方法。这有点尴尬,但仍然很有效,因为这些商品是从最新到最旧的顺序订购的。这意味着您可能会很快找到与已发布版本相匹配的版本

扩展(特别是塞巴斯蒂安·沃伊切乔夫斯基的补充):


成功了,谢谢!这样对待父母不是有点尴尬吗?如果你问我什么时候在SharePoint中称之为批准,我想,在列表中称之为审核,在列表项中称之为级别,那么这些术语就会混淆起来!?谢谢,非常有帮助!谢谢你编辑我草率的拼写!:)没问题。编辑以帮助用户稍后找到您的问题。由于您现在包含的链接指向SharePoint 2013,并且您引用的社区内容已附加到以前的版本:@Chloraphil感谢该链接已修复。这似乎是正确的解决方案。我见过许多代码片段,它们将item.Versions[item.Versions.Count-1]视为最新版本,这是错误的;将返回可能不是最新批准版本的最新版本。当心
// 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]