2009-08-27 107 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