使用对象模型覆盖主要版本

时间:2013-01-25 21:09:45

标签: sharepoint sharepoint-2010 versioning object-model

我在SharePoint 2010列表中启用了版本控制和签入/签出,并且出于与业务相关的原因,希望更新字段中的信息:以类似方式和位置覆盖所有版本的字段数据,以便版本号不会改变。

如果我调用SPListItemVersion.ListItem.UpdateOverwriteVersion(),则说明我需要在更改项目之前签出该项目。说得通。所以我在update语句之前加上SPListItemVersion.ListItem.CheckOut()语句,尝试更新,并收到一个我无法覆盖已发布版本的错误。我还尝试在检出之前使用SPSite.AllowUnsafeUpdates = true,在更新调用后将其设置为false,但后一个错误仍然存​​在。有什么想法吗?

下面的剥离代码:

foreach (SPListItemVersion itemVersion in item.Versions){
  itemVersion.ListItem.File.CheckOut(SPFile.SPCheckOutType.Online, itemVersion.ListItem.File.TimeLastModified.ToString());
  site.AllowUnsafeUpdates = true;
  itemVersion.ListItem["FieldName"] = "changed value here";
  itemVersion.ListItem.UpdateOverwriteVersion();
  site.AllowUnsafeUpdates = false;
  itemVersion.ListItem.File.CheckIn("Updated list item version", SPCheckinType.OverwriteCheckIn);
}

1 个答案:

答案 0 :(得分:0)

对于可能发现自己面临此问题的任何人,您无需切换AllowUnsafeUpdates字段。对我有用的是用itemVersion.ListItem.UpdateOverwriteVersion()替换itemVersion.ListItem.SystemUpdate(false)语句。传入的参数告诉SharePoint在更新时不会创建新版本。

修改:此答案仅重新更新当前项目。 SPListItemVersion字段引用仅可通过get获得;看来这在对象模型中是不可能的。