我有一段代码,我正在尝试在编辑文件时禁用事件触发,一旦调试器命中item.SystemUpdate(false)行,它就会抛出一个异常,指出“文件xxxx已被xxxxx修改“
HandleEventsFiring handle = new HandleEventsFiring();
handle.DisableHandleEventFiring();
try
{
web.AllowUnsafeUpdates = true;
SPFile rptFile = web.GetFile(item.Url); //item is an SPListItem
if (rptFile.Exists)
{
WordDocUtility word = new WordDocUtility();
using (System.IO.Stream stream = rptFile.OpenBinaryStream())
{
word.ReplaceKeys(stream, keys);
rptFile.SaveBinary(stream);
}
}
item.SystemUpdate(false); // the line throwing the exception
}
finally
{
handle.EnableHandleEventFiring();
web.AllowUnsafeUpdates = allowUnsafeUpdates;
}
public class HandleEventsFiring: SPItemEventReceiver
{
public void DisableHandleEventFiring()
{
this.EventFiringEnabled = false;
}
public void EnableHandleEventFiring()
{
this.EventFiringEnabled = true;
}
}
有没有人知道解决这个问题的方法还是我做错了什么?
非常感谢任何帮助。
答案 0 :(得分:2)
您还没有真正展示足够的代码让我们指出确切的问题。您获得的错误意味着在您从内容数据库中提取item
中的列表项后,它稍后被更新。如果您每次都收到错误,那么您可能不止一次地拉下同一个项目而且您的更改与您自己发生冲突。我的猜测是item
代表文档库中的文件,除了splist项之外你还要修改文件。这些变化是相互矛盾的。您需要获取项目,更新项目,然后获取文件并更新文件。如果您需要获取项目然后更新文件,则需要再次获取项目 ,以便在获取和更新之间发生另一次更新时不会更新项目。