3

SharePoint2010のドキュメントライブラリでItemAddedイベントとItemUpdatingイベントを処理するイベントレシーバーを作成しました。

ドキュメントをライブラリに追加すると(たとえば、Wordから保存して戻すことにより)、ItemAddedメソッドが正しく呼び出されますが、その後にItemUpdatingが2回呼び出されるという問題が発生しました。問題の原因となっているのが内部で行っていることではないことを確認するために、ハンドラーからすべてのコードを削除しました。それらは文字通り次のようになります。

public override void ItemUpdating(SPItemEventProperties properties)
{
}

public override void ItemAdded(SPItemEventProperties properties)
{
}

誰かがこの問題の解決策を持っていますか?

イベントレシーバーのelements.xmlファイルは次のとおりです。

<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
  <Receivers ListTemplateId="101">
      <Receiver>
        <Name>DocumentsEventReceiverItemUpdating</Name>
        <Type>ItemUpdating</Type>
        <Assembly>$SharePoint.Project.AssemblyFullName$</Assembly>
        <Class>My.Namespace.DocumentsEventReceiver</Class>
        <SequenceNumber>10000</SequenceNumber>
        <Synchronization>Synchronous</Synchronization>
      </Receiver>
      <Receiver>
        <Name>DocumentsEventReceiverItemAdded</Name>
        <Type>ItemAdded</Type>
        <Assembly>$SharePoint.Project.AssemblyFullName$</Assembly>
        <Class>My.Namespace.DocumentsEventReceiver</Class>
        <SequenceNumber>10000</SequenceNumber>
        <Synchronization>Synchronous</Synchronization>
      </Receiver>
  </Receivers>
</Elements>
4

1 に答える 1

7

問題は、チェックインモードまたはチェックアウトであることを確認するDocument library際の In イベントハンドラーです。そのため、2 回呼び出されます。Item UpdatingDocument

コードを入れる必要があります

 public override void ItemUpdating(SPItemEventProperties properties)
  {  
    base.ItemUpdating(properties);
    if (properties.AfterProperties["vti_sourcecontrolcheckedoutby"] == null && properties.BeforeProperties["vti_sourcecontrolcheckedoutby"] != null)
     {
       //do stuff
     }
  }

詳細についてイベントの全体的な状況を説明するには、ここに良い記事があります。Document's

于 2012-04-04T17:11:35.497 に答える