用于防止SharePoint列表项事件接收器帮助的扩展方法

我遇到了这个帖子,它解决了在从事件接收器外部执行更新时阻止SPListItem触发事件接收器的问题。代码按照描述100%工作,我对解决方案印象深刻,问题是我不完全理解它。 为了简单起见,我们忽略了SystemUpdate方法,因此我们只处理SPListItem.Update重载和代码中声明的私有类。 我没有“得到”的位是类rh与SPListItem项“链接”或“关联”的方式。重现方法以保存单击返回...
public static void Update(this SPListItem item, bool doNotFireEvents)
{
    SPItemEventReceiverHandling rh = new SPItemEventReceiverHandling();
    if (doNotFireEvents)
    {
        try
        {
            rh.DisableEventFiring();
            item.Update();
        }
        finally
        {
            rh.EnableEventFiring();
        }
    }
    else
    {
        item.Update();
    }
}
我可以看到我们实例化了一个SPItemEventReceiverHandling实例,rh,如果doNotFireEvents为true,我们在rh上调用DisableEventFiring(),然后在完成时我们在rh上调用EnableEventFiring()。我看不到的链接是“rh”和“item”之间的链接。在进行更新时,SharePoint如何“知道”使用rh作为事件接收器? 我希望我已经清楚地解释了这一点。如果没有让我知道,我会进一步澄清。     
已邀请:
代码禁用所有项目的事件触发,这就是为什么Finally块如此重要的原因(无论更新是否成功,它都会重新启动)。 文档:http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spitemeventreceiver_members(v=office.12).aspx     
我猜这是全局禁用项目事件接收。我无法看到创建关联的位置。 我想知道创建此解决方案的人是否在同时更新项目时尝试了这一点。如果SharePoint是基于每个请求执行此操作(请求的全局,而不是SharePoint实例),那么它可能相对安全。 这些方法已在SharePoint 2010文档中标记为过时的API。 http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spitemeventreceiver_members.aspx     

要回复问题请先登录注册