2017-09-21 12 views
0

私は、2つのドキュメントライブラリーと関連付ける予定のアイテム更新イベント受信機を持っています。1イベントレシーバーと2つのドキュメントライブラリーを関連付ける

私はイベント受信機をListTemplateId = "101"に関連付けました。だからこのイベントレシーバーはすべてのドキュメントライブラリのために発砲していました!それは私が欲しくないものですが、私はそれをきれいに避けることができませんでした。したがって、コードの最初の行の回避策として、イベント受信者が呼び出されたライブラリをチェックし、目的のライブラリでない場合は返されます。

は、その後、私は少しにelements.xml約レシーバタグを読んで、私はelements.xmlに複数レシーバタグを登録できることを見出しました。そこで、以下のようなelements.xmlを変更しました。

<?xml version="1.0" encoding="utf-8"?> 
<Elements xmlns="http://schemas.microsoft.com/sharepoint/"> 
    <Receivers ListUrl="DocLib1"> 
    <Receiver> 
     <Name>EventReceiver1ItemAdded</Name> 
     <Type>ItemAdded</Type> 
     <Assembly>$SharePoint.Project.AssemblyFullName$</Assembly> 
     <Class>NM1.EventReceiver1.EventReceiver1</Class> 
     <SequenceNumber>10000</SequenceNumber> 
     <Synchronization>Synchronous</Synchronization> 
    </Receiver> 
    </Receivers> 
    <Receivers ListUrl="DocLib2"> 
    <Receiver> 
     <Name>EventReceiver1ItemAdded</Name> 
     <Type>ItemAdded</Type> 
     <Assembly>$SharePoint.Project.AssemblyFullName$</Assembly> 
     <Class>NM1.EventReceiver1.EventReceiver1</Class> 
     <SequenceNumber>10000</SequenceNumber> 
     <Synchronization>Synchronous</Synchronization> 
    </Receiver> 
    </Receivers> 
</Elements> 

イベントレシーバがこれらの2つのdocライブラリのみに関連付けられることを望んでいます。しかし、実際には、イベントのレシーバがDocLib1(elements.xmlの最初のレシーバ)にのみ添付されていることである

私が達成しようとしていますが私はアプローチで可能になる場合、誰かが私を導くことができます私のアプローチを変更する必要がありますか?

おかげ

アマール

答えて

0

私はこれを達成するために努力していましたelements.xmlを使用していましたが、期限が到来しませんでしたので、フィーチャーアクティベーションイベントコードを使用しました。

<?xml version="1.0" encoding="utf-8"?> 
<Elements xmlns="http://schemas.microsoft.com/sharepoint/"> 
    <Receivers> 
    <Receiver> 
     <Name>EventReceiver1ItemAdded</Name> 
     <Type>ItemAdded</Type> 
     <Assembly>$SharePoint.Project.AssemblyFullName$</Assembly> 
     <Class>NM1.EventReceiver1.EventReceiver1</Class> 
     <SequenceNumber>10000</SequenceNumber> 
     <Synchronization>Synchronous</Synchronization> 
    </Receiver> 
    </Receivers>  
</Elements> 

に、このイベントを関連付けないように、私はelements.xmlファイルを変更し、その後、私の機能にイベントを取り付けることによって、私はFeatureActivatedイベントを修正し、この

public override void FeatureActivated(SPFeatureReceiverProperties properties) 
     { 
      SPSite site = properties.Feature.Parent as SPSite; 
      using (SPWeb web = site.RootWeb) 
      { 
       web.Lists["DoocLib1"].EventReceivers.Add(SPEventReceiverType.ItemAdded, Assembly.GetExecutingAssembly().FullName, "NM1.EventReceiver1.EventReceiver1"); 
       web.Lists["DoocLib2"].EventReceivers.Add(SPEventReceiverType.ItemAdded, Assembly.GetExecutingAssembly().FullName, "NM1.EventReceiver1.EventReceiver1"); 

      } 
     } 
のようなものを書きました

この機能の有効範囲は、少なくともの範囲にする必要があります。

私は、elements.xmlを使用してそれを達成する方法を探求し、解決策があるときに投稿します。

おかげ

アマール

0

この問題に対する良い答えがありますhere.

しかし、別の迅速かつ汚いソリューションは、ListTemplateId =「101」で使用して、あなたのelements.xmlを元に戻すことであろう単一のReceiver要素を作成し、ロジックを次のようにラップします:

if(properties.ListTitle == "List1" || properties.ListTitle == "List2") 
{ 
    // Your logic here. 
} 
+0

これは、既存のアプリケーションであり、ドキュメントのLIBSは、すでに大量のデータが含まれています。私は生産でそれらと一緒に遊んであまりにも快適ではない。あなたが提案した2番目のソリューションについては、すでに実装しています(**最初のコード行の回避策として、イベント受信者が呼び出されたライブラリをチェックし、意図したライブラリでない場合は返されます)。 )。 – Amar

関連する問題