1

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

如果我调用 SPListItemVersion.ListItem.UpdateOverwriteVersion(),它会失败,说明我需要在对其进行更改之前签出该项目。说得通。因此,我在更新语句之前使用 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);
}
4

1 回答 1

0

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

编辑:此答案仅再次更新当前项目。SPListItemVersion 字段引用仅可通过get;看来这在对象模型中是不可能的。

于 2013-01-28T14:05:39.333 回答