0

我有一段代码,我试图在编辑文件时禁用事件触发,一旦调试器点击 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;
        }

    }

有谁知道解决这个问题的方法还是我做错了什么?

任何帮助将不胜感激。

4

1 回答 1

2

您没有真正展示足够的代码让我们指出确切的问题。您收到的错误意味着在您item从内容数据库中提取列表项后,它后来被更新。如果您每次都收到错误,那么您可能不止一次地下拉同一个项目并且您的更改与您自己发生冲突。我的猜测是它item代表文档库中的一个文件,并且除了 splist 项目之外,您正在修改该文件。这些变化是相互矛盾的。您需要获取项目,更新项目,然后获取文件并更新文件。如果您需要获取项目然后更新文件,您将需要再次获取项目这样您就不会在获取和更新之间发生另一个更新时最终更新项目。

于 2012-08-29T13:51:20.533 回答