0

我碰到這個post想出了一個很好的解決方案,以防止事件接收器上的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是真的,我們呼籲RH然後DisableEventFiring()完成時,我們稱之爲EnableEventFiring()在rh上。我看不到的鏈接是在「rh」和「item」之間。在進行更新時,SharePoint如何「知道」將rh用作事件接收器?

我希望我已經說清楚的解釋。如果不讓我知道,我會嘗試進一步澄清。

回答

0

該代碼被禁用全部事件爲物品啓動這就是爲什麼Finally塊非常重要(無論更新成功與否都會重啓)。

文檔:http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spitemeventreceiver_members(v=office.12).aspx

+0

嗯文檔不明確。所以當你說全部我們在說什麼範圍?這是用戶的所有事件嗎?線? Web應用程序?或者大家都農場?擔心的是,如果它對每個人來說都是農場範圍,那麼如果其他人做了更新,我希望事件接收器在短時間內禁用事件時觸發更新? – Mark 2011-04-08 08:23:21

0

我的猜測是,這在全球範圍禁止的項目,事件接收。我看不出該協會是在哪裏創建的。

不知誰創造了這個人的工作,各地都嘗試過這種當項目被同時更新。如果SharePoint是在每個請求的基礎上(全局請求而不是SharePoint實例)執行此操作,那麼它可能相對安全。

這些方法已經被標記爲SharePoint 2010文檔中已過時的API。

http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spitemeventreceiver_members.aspx