我在 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);
}