0

post은 이벤트 수신기 외부에서 업데이트를 수행 할 때 이벤트 수신기가 SPListItem을 실행하는 것을 방지하는 문제에 대한 훌륭한 해결책으로 나왔습니다. 코드는 설명 된대로 100 % 작동하며 솔루션에 깊은 인상을 받았지만 문제는 완전히 이해하지 못했기 때문입니다.SharePoint 목록 항목 이벤트 수신기 도움말을 방지하는 확장 메서드

단순하게 유지하려면 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(); 
    } 
} 

나는 우리가 RH, SPItemEventReceiverHandling의 인스턴스를 인스턴스화하고 doNotFireEvents에 해당하는 경우 우리가 EnableEventFiring 전화를 완료 할 때 우리는 다음 RH와에 DisableEventFiring()를 호출 볼 수 있습니다 ... 다시 클릭 저장합니다() rh에. 내가 볼 수없는 링크는 "rh"와 "item"사이에 있습니다. SharePoint는 업데이트를 수행 할 때 rh를 이벤트 수신기로 사용하는 것을 "알"습니까?

내가 분명히 설명했으면 좋겠다. 나에게 알려주지 않으면 나는 더 명확히하려고 노력할 것이다.

답변

0

코드가 비활성화되어 있습니다. 모두 마지막으로 블록이 중요하여 업데이트 성공 여부와 상관없이 다시 켜는 이유가되는 항목에 대한 이벤트 실행.

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

+0

흠. 설명서가 명확하지 않습니다. 그래서 라고 할 때 우리는 어떤 범위의 이야기를하고 있습니까? 해당 사용자에 대한 모든 이벤트입니까? 실? 웹 응용 프로그램? 아니면 모두가 넓은 농장일까요? 걱정거리는 모든 사람이 팜 전체에 적용되는 경우이며, 다른 사람이 이벤트 수신자가 짧은 시간 내에 이벤트를 사용할 수 없게하는 업데이트를 수행하면 어떻게 될까요? – Mark

0

내 생각 엔이 전 세계적으로 항목 이벤트를 수신하지 않도록한다는 것입니다. 나는 협회가 만들어지는 곳을 볼 수 없다.

이 해결 방법을 만든 사람이 항목을 동시에 업데이트 할 때이 작업을 시도했는지 궁금합니다. SharePoint가 요청별로 (SharePoint 인스턴스가 아닌 요청에 대해 전역으로)이 작업을 수행한다면 비교적 안전 할 것입니다.

이러한 메서드는 SharePoint 2010 설명서에서 Obsolete API로 표시되었습니다.

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

관련 문제