2009-08-27 106 views
1

我正在根據列表編寫Web部件。我在Web部分做的第一件事是驗證我的自定義事件接收器是否在列表中註冊。如果他們不是,我以編程方式註冊。註冊已註冊的SharePoint事件接收器

我注意到,如果我嘗試註冊一個已經註冊的事件,我沒有得到任何錯誤,也沒有「額外」事件被註冊。

我的問題是:每次Web部件載入時註冊事件而不是遍歷事件接收者列表中的每個事件並比較一下,看看我的每個事件接收者是否在那裏都會更有效率?

編輯

關於房產袋的建議。在仔細考慮後,這不是一個可行的解決方案。我「驗證」接收者在那裏的原因是因爲我們有第三方webparts附加到同一個列表。這些在過去實際上未註冊我們的定製接收器。在財產包中設置一個標誌只會讓我知道我已經驗證過一次,但不會告訴我他們是否被另一個移除。

回答

2

SharePoint使用更新的事件接收器收集進行模糊處理的代碼,所以沒有辦法知道。我猜想,第一步是檢查手動類似的工作。我傾向於選擇最簡單的方式,直到你確定表演是一個問題,在這種情況下,我會在列表的RootFolder的物業包上設置一個標誌。

2

我不確定這是否是最佳方法。我看到了一個代碼,它可以完成類似於您的要求。它的功能是一旦添加了EventHandler,他們就會在SPWeb Property Bag中存儲一個標誌。下一次你只要檢查標誌的物業包,如果它沒有註冊事件處理程序。請參閱此link以獲取有關該物業包的更多信息。最後要注意,你可能需要更多的權限屬性包值設置爲的SPWeb

+0

謝謝Kusek。權限不應該成爲問題。我已經使用提升的權限進行註冊。我看到這個想法的唯一缺陷是,多個網站上可能存在多個Web部件。 – AdamBT 2009-08-27 13:45:08

+0

WebPart的指導或類似的東西應該可以幫助你獲得獨特的價值。 – Kusek 2009-08-27 13:47:07