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 に答える