Sharepoint 查找SPListItem的最新批准版本
我正在尝试遍历SPListItem.Versions集合以查找最新批准的列表项 我的列表项有三个版本:前两个版本已批准,最后一个版本为草稿。但我的代码说它们都在草稿中!请帮忙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;
// 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]