C# 用于阻止SharePoint列表项事件接收器帮助的扩展方法
我遇到了一个很好的解决方案,解决了在从事件接收器外部执行更新时防止SPListItem上的事件接收器触发的问题。该代码的工作100%如所述,我对解决方案印象深刻,问题是我不完全理解它 为了保持简单,让我们忽略SystemUpdate方法,因此我们只处理SPListItem.Update重载和代码中声明的私有类 我不“了解”的一点是类rh如何与SPListItem项“链接”或“关联”。正在复制保存方法并单击“上一步…”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
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它的作用域是线程:嗯,文档对此不清楚。那么当你说所有这些的时候,我们谈论的是什么范围?这就是该用户的所有事件吗?线网络应用?还是每个人都在农场?担心的是,如果它对所有人都适用,那么如果其他人执行更新,我希望事件接收器在禁用事件时在短时间内触发,该怎么办?@标记它的作用域是线程: