2009-08-27 29 views
1

リストに対してWebパーツを作成しています。 Webパートで最初に行うことは、カスタムイベントレシーバーがリストに登録されていることを確認することです。そうでない場合は、プログラムで登録します。既に登録されているSharePointイベントレシーバーの登録

すでに登録されているイベントを登録しようとすると、エラーは表示されず、「追加」イベントも登録されていないことに気付きました。

私の質問は、イベントレシーバリストの各イベントを反復処理するのではなく、Webパーツがロードされるたびにイベントを登録し、各イベントレシーバがそこにあるかどうかを比較する方が効率的でしょうか?

編集

プロパティバッグの提案について。もう少し考えてみると、これは実現可能な解決策ではありません。受信者がそこにいることを私が「検証する」理由は、同じリストに添付されたサードパーティのWebパーツがあるからです。過去には、カスタムレシーバの登録を実際に解除しています。プロパティバッグにフラグを設定すると、一度確認したことがわかりますが、別のものによって削除されたかどうかはわかりません。

答えて

2

SharePointがイベント受信者コレクションを更新するために使用するコードは難読化されているため、私は最初のステップはあなたが手動でやっているものに似た点検であると思います。パフォーマンスが問題であることが分かるまで、私は最も簡単なものに行く傾向があります。この場合、リストのRootFolderの財産バッグにフラグを設定します。

2

これが最善のアプローチであるかどうかわかりません。私はあなたの要件に似た何かをするコードを見てきました。それは、EventHandlerが追加されるとSPWeb Property Bagにフラグを保存したことです。次回は、イベントハンドラを登録しない場合は、フラグのプロパティバッグをチェックするだけです。プロパティバッグの詳細については、linkを参照してください。最後に、プロパティバッグの値をSPWebに設定するためにさらに多くのアクセス許可が必要な場合があります

+0

ありがとうKusek。権限は問題ではありません。私は既に登録に高い権限を使用しています。私がこのアイディアに見る唯一の欠点は、複数のウェブパーツが複数のサイトに存在する可能性があることです。 – AdamBT

+0

WebPartのガイドやその種のものは、ユニークな価値を得るのに役立ちます。 – Kusek

関連する問題