SharePoint 2010은 Event Receiver를 사용하여 폴더를 자동으로 approved 상태로 만듭니다(2)
2300 단어 SharePoint
base.ItemUpdated(properties);
if (properties.ListItem.FileSystemObjectType != SPFileSystemObjectType.Folder)
return;
if (properties.ListItem.ModerationInformation.Status == SPModerationStatusType.Approved)
return;
SPSecurity.RunWithElevatedPrivileges(delegate
{
SPListItem item = properties.ListItem;
SPModerationInformation approverInfo = item.ModerationInformation;
if (approverInfo != null)
{
if (approverInfo.Status != SPModerationStatusType.Approved)
{
approverInfo.Status = SPModerationStatusType.Approved;
try
{
this.EventFiringEnabled = false;
item.Update();
}
finally
{
this.EventFiringEnabled = false;
}
}
}
});
코드에서 주의해야 할 점은 이벤트FiringEnabled 속성을 호출한 것이다. ItemUpdated 이벤트가 반복적으로 터치되는 것을 방지하는 역할을 하기 때문에 다른 것은 잘 이해된다.이 코드를 환경에 배치하면 폴더 이름을 수정한 후에도 폴더의 상태는draft상태이고, 디버그 코드는item로 실행되는 것을 발견할 수 있습니다.Update () 이 줄에서 item을 찾을 수 없음을 알립니다!이유가 뭘까요?
먼저 ItemAdded, ItemUpdated는 글자 그대로 이해하지만, 대상이 추가된 후와 업데이트된 후에야 이 코드를 실행합니다. 모두 비동기적으로 실행될 때 폴더가 이름을 수정하면 버전이 업데이트됩니다. 그러나 코드에서 가져온 것은 이름을 수정하기 전의 버전입니다. 그러면 이 item을 찾을 수 없고 ItemAddeded는 버전 문제가 없습니다.
해결 방법은 Event Receiver의 elements입니다.xml에서 이 이벤트를 동기화 이벤트로 강제로 전환합니다.
<Receiver>
<Name>EventReceiver2ItemUpdated</Name>
<Type>ItemUpdated</Type>
<Assembly>$SharePoint.Project.AssemblyFullName$</Assembly>
<Class>AutoApproveFolder.EventReceiver2.EventReceiver2</Class>
<SequenceNumber>10000</SequenceNumber>
<Synchronization>Synchronous</Synchronization>
</Receiver>
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Excel에서 사이트의 목록 목록을 손쉽게 만들기Excel의 OData 연동 기능을 사용하면 비 프로그래밍 방식으로 SharePoint Online 목록을 쉽게 만들 수 있습니다. ※ SharePoint Server 2013, 2016에서도 갈 수 있습니다. 먼저...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.