Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.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
C# 用于阻止SharePoint列表项事件接收器帮助的扩展方法_C#_Sharepoint 2007_Extension Methods_Splistitem_Eventreceiver - Fatal编程技术网

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

C# 用于阻止SharePoint列表项事件接收器帮助的扩展方法,c#,sharepoint-2007,extension-methods,splistitem,eventreceiver,C#,Sharepoint 2007,Extension Methods,Splistitem,Eventreceiver,我遇到了一个很好的解决方案,解决了在从事件接收器外部执行更新时防止SPListItem上的事件接收器触发的问题。该代码的工作100%如所述,我对解决方案印象深刻,问题是我不完全理解它 为了保持简单,让我们忽略SystemUpdate方法,因此我们只处理SPListItem.Update重载和代码中声明的私有类 我不“了解”的一点是类rh如何与SPListItem项“链接”或“关联”。正在复制保存方法并单击“上一步…” public static void Update(this SPListIt

我遇到了一个很好的解决方案,解决了在从事件接收器外部执行更新时防止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上调用DisableEventFireing(),完成后在rh上调用EnableEventFireing()。我看不到的链接是在“rh”和“item”之间。SharePoint如何“知道”在执行更新时使用rh作为事件接收器

我希望我已经解释清楚了。如果不让我知道,我将尝试进一步澄清。

代码正在禁用项目的所有事件触发,这就是为什么Finally块如此重要(无论更新成功与否,它都会将其重新打开)

文档:

代码正在禁用所有项目的事件触发,这就是为什么Finally块如此重要(不管更新成功与否,它都会将其重新打开)


文档:

我猜这会全局禁用项目事件接收。我也看不到该关联是在哪里创建的

我想知道创建此工作环境的人是否在同时更新项目时尝试过此方法。如果SharePoint是基于每个请求执行此操作(请求的全局性,但不是SharePoint实例),那么它可能会相对安全

在SharePoint 2010文档中,这些方法已被标记为过时的API


我猜这会全局禁用项目事件接收。我也看不到该关联是在哪里创建的

我想知道创建此工作环境的人是否在同时更新项目时尝试过此方法。如果SharePoint是基于每个请求执行此操作(请求的全局性,但不是SharePoint实例),那么它可能会相对安全

在SharePoint 2010文档中,这些方法已被标记为过时的API


Hmm这方面的文档不清楚。那么当你说所有这些的时候,我们谈论的是什么范围?这就是该用户的所有事件吗?线网络应用?还是每个人都在农场?担心的是,如果它对所有人都适用,那么如果其他人进行更新,我希望事件接收器在事件被禁用时在短时间内触发,该怎么办?@Mark它的作用域是线程:嗯,文档对此不清楚。那么当你说所有这些的时候,我们谈论的是什么范围?这就是该用户的所有事件吗?线网络应用?还是每个人都在农场?担心的是,如果它对所有人都适用,那么如果其他人执行更新,我希望事件接收器在禁用事件时在短时间内触发,该怎么办?@标记它的作用域是线程: