Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正在注册已注册的SharePoint事件接收器_Sharepoint_Moss_Wss - Fatal编程技术网

正在注册已注册的SharePoint事件接收器

正在注册已注册的SharePoint事件接收器,sharepoint,moss,wss,Sharepoint,Moss,Wss,我正在根据列表编写web部件。我在web部件中要做的第一件事是验证我的自定义事件接收器是否已在列表中注册。如果不是,则以编程方式注册 我注意到,如果我尝试注册一个已经注册的事件,我不会收到任何错误,也不会注册任何“额外”事件 我的问题是:在每次web部件加载时只注册事件,而不是在事件接收器列表中遍历每个事件并进行比较以查看是否每个事件接收器都在那里,这样会更有效吗 编辑 关于财产袋的建议。再仔细考虑一下,这将不是一个可行的解决方案。我之所以“验证”接收者是否存在,是因为我们有第三方Web部件附加

我正在根据列表编写web部件。我在web部件中要做的第一件事是验证我的自定义事件接收器是否已在列表中注册。如果不是,则以编程方式注册

我注意到,如果我尝试注册一个已经注册的事件,我不会收到任何错误,也不会注册任何“额外”事件

我的问题是:在每次web部件加载时只注册事件,而不是在事件接收器列表中遍历每个事件并进行比较以查看是否每个事件接收器都在那里,这样会更有效吗

编辑


关于财产袋的建议。再仔细考虑一下,这将不是一个可行的解决方案。我之所以“验证”接收者是否存在,是因为我们有第三方Web部件附加到同一列表中。在过去,这些公司实际上取消了我们的客户接收人注册。在属性包中设置一个标志只会让我知道我已经验证过一次,但不会告诉我它们是否被另一个删除。

我不确定这是否是最好的方法。我已经看到一个代码,它做了一些类似于您的要求。它的作用是,一旦添加EventHandler,它们就会在SPWeb属性包中存储一个标志。下次您只需检查属性包中的标志,如果它存在,请不要注册eventhandler。有关属性包的更多信息,请参阅此。最后一点注意:您可能需要更多权限才能将属性包值设置为SPWeb,我不确定这是否是最佳方法。我已经看到一个代码,它做了一些类似于您的要求。它的作用是,一旦添加EventHandler,它们就会在SPWeb属性包中存储一个标志。下次您只需检查属性包中的标志,如果它存在,请不要注册eventhandler。有关属性包的更多信息,请参阅此。最后一点注意:您可能需要更多权限才能将属性包值设置为SPWeb

SharePoint用于更新事件接收器集合的代码已模糊,因此无法确定。我猜第一步是类似于手动执行的检查。我倾向于使用最简单的方法,直到您确定性能是一个问题,在这种情况下,我会在列表的
RootFolder
属性包上设置一个标志。

SharePoint用于更新事件接收器集合的代码是模糊的,因此无法确定。我猜第一步是类似于手动执行的检查。我倾向于选择最简单的方法,直到您确定性能是一个问题,在这种情况下,我会在列表的
RootFolder
属性包上设置一个标志。

谢谢Kusek。权限不应该是问题。我已经在使用提升权限进行注册。我认为这个想法的唯一缺点是,多个网站上“可能”存在多个web部件。web部件的Guid或类似的东西应该可以帮助您获得唯一的值。谢谢Kusek。权限不应该是问题。我已经在使用提升权限进行注册。我认为这个想法的唯一缺点是,多个站点上“可能”存在多个web部件。web部件的Guid或类似的东西应该可以帮助您获得唯一的值。