2009-12-03 6 views
2

목록 항목이 업데이트 된 경우 (ItemUpdated 및 ItemUpdating) 이벤트 수신기가 있습니다. 수신기 내에서 목록 항목을 다시 업데이트합니다. 이것은 자연스럽게 재귀 적 이벤트 호출을 기대할 수있게합니다. 이벤트 처리기의 시작 부분에 중단 점을 두어 이벤트에서 10 회 stoppping 한 다음 종료합니다. 이 종류의 것을 막기 위해 SharePoint 내부에 일종의 재귀 보호 기능이있을 수 있습니까?재귀 SharePoint 이벤트 핸들러

답변

-2

또는 item.SystemUpdate을 (사용), SystemUpdate이 항목에 연결된 이벤트를 트리거없이 업데이트를 수행합니다.

+0

두 가지 모두 좋은 답변이지만 솔루션은 조금 깔끔합니다. 환호 –

+0

나는 이것들을 함께 사용한다. SystemUpdate가 DisableEventFiring을 사용하지 않고 재귀를 중지하지 않은 경우가있었습니다. 그리고 DisableEventFiring을 사용하는 경우에도 Event Receiver 내에서 Modify By 또는 Item Version을 변경하고 싶지 않기 때문에 SystemUpdate (false)를 호출합니다. –

+3

-1. 이것은 정확하지 않습니다. SystemUpdate()는 구현을 모르는 불투명 한 메서드이며 수정 시간 또는 수정 자 필드 또는 선택적으로 항목 버전의 변경 내용에 영향을주지 않고 업데이트 만 문서화되었습니다. 게시판 같은 게시물의 원래 작성자를 수정하고 싶지 않은 경우 토론 게시판과 같은 용도로 SharePoint에서 내부적으로 사용됩니다. 이벤트가 발생합니다. 실제로 이벤트 전파를 중지하기 위해 현재 사용하고있는 기능입니다. 거의 SharePoint 2010에서 변경 될 예정이었고 향후에 변경 될 수 있습니다. – mjsabby

12

사용 DisableEventFiring 방법

base.DisableEventFiring(); 
item.update(); 
base.EnableEventFiring();

+1

이 = 참/거짓 EventFiringEnabled 셰어 2007 년에이 일의 유일한 * 올바른 * 방법, 그리고; SharePoint 2010에서이 작업을 수행하는 유일한 올바른 방법입니다. – mjsabby

1

이보다 더 안전한 방법 :

try { 
    this.DisableEventFiring(); 
    item.SystemUpdate(); // or item.Update(); or item.UpdateOverwriteVersion(); 
} finally { 
    this.EnableEventFiring(); 
} 

그냥 경우에 대비하여 업데이트 호출이 어떤 이유로 실패합니다. (depricated되지 않음)

0

현대 방법 :

EventFiringEnabled = false; 
item.Update(); 
EventFiringEnabled = true;