문제

구현하는 아이템 수신기가 있습니다. ItemUpdated() 문서 라이브러리에 항목을 업로드한 후 항목을 처리합니다.기본 "공유 문서" 라이브러리에 문서를 추가하면 모든 것이 잘 작동합니다. 새 문서가 추가되면 ItemUpdated() 정상적으로 발동됩니다.그러나 내가 새 문서 라이브러리 동일한 사이트 모음에서 ItemUpdated() 새 문서를 업로드해도 트리거되지 않습니다.하지만 다른 버전을 업로드하거나 문서 이름을 바꾸는 등의 작업을 하면 ItemUpdated() 정상적으로 트리거됩니다. 항목 업로드 시에는 트리거되지 않습니다.일반적인 예:

  • 문서 라이브러리에 'doc1'을 업로드합니다 - ItemUpdated() 실행되지는 않지만 문서 라이브러리가 "공유 문서"인 경우 실행됩니다);
  • 'doc1'의 다른 버전을 업로드합니다 - ItemUpdated() 예상대로 실행합니다.
  • 나는 'doc1'의 이름을 바꿉니다 - ItemUpdated() 예상대로 실행됩니다.

나는 문서를 추가할 때 일반적으로 이벤트 순서가 다음과 같다고 믿게 되었습니다.

추가 - 추가됨 - 업데이트 중 - 업데이트됨

그렇다면 내 것은 왜? ItemUpdated() "공유 문서" 이외의 라이브러리에 대해서는 트리거되지 않습니까?이 문제를 일으킬 수 있는 설정이 있습니까?

여러 가지 이유로 내부 처리를 할 수 없으니 양해 바랍니다. ItemAdded().

Elements.xml:

<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
  <Receivers ListTemplateId="101">
    <Receiver>
      <Name>MyEventReceiverItemUpdated</Name>
      <Type>ItemUpdated</Type>
      <Assembly>$SharePoint.Project.AssemblyFullName$</Assembly>
      <Class>MyProject.MyEventReceiver.MyEventReceiver</Class>
      <SequenceNumber>1000</SequenceNumber>
    </Receiver>
  </Receivers>
</Elements>

암호:

public class MyEventReceiver : SPItemEventReceiver
{
    // On document upload, this method is only entered if I upload to "Shared Documents"
    public override void ItemUpdated(SPItemEventProperties properties)
    {               
        base.ItemUpdated(properties); // doesn't get called either
        MyMethod(properties);
    }
}
도움이 되었습니까?

해결책 2

해결책을 찾은 것 같습니다.나는 구현했다 ItemAdded() 원본 외에 ItemUpdated() 이벤트 수신기에서.내부에서 다음 호출을 강제로 수행합니다. ItemUpdated() 이와 같이:

public override void ItemAdded(SPItemEventProperties properties)
{            
    base.ItemAdded(properties);
    properties.ListItem.UpdateOverwriteVersion();            
}

참고하세요 UpdateOverwriteVersion "항목의 다른 버전을 생성하지 않고 항목을 업데이트합니다"(MSDN).결과적으로 ItemUpdated() 새 항목이 추가되면;또한 항목의 새 버전을 생성하지 않습니다(예:새 항목을 처음 추가할 때 2가지 버전이 생성되지 않습니다.지금까지는 버전 관리 유무에 관계없이 모든 문서 라이브러리에서 예상대로 작동합니다.

다른 팁

한 라이브러리 또는 다른 라이브러리에 추가 열이 있습니까?업로드 시 ItemUpdating()이 실행되는지 여부에 따라 차이가 있는 것 같습니다.보세요 이 게시물.거기에 핵심 문장은,

"문서 라이브러리에 문서가 추가 된 동안 트리거되는 이벤트에는 항목 업데이트 및 항목 업무가 포함될 수 있습니다.그러나 프로세스에 추가 필드가 포함 된 경우에만. "

따라서 SharePoint의 이 "기능"이 시스템에 미치는 영향을 더 잘 이해할 수 있도록 환경에서 다양한 라이브러리 구성을 시험해 볼 수 있습니다.

또한 ItemAdded를 피해야 할 이유가 있을 수도 있다는 점도 이해합니다.ItemUpdated가 계속 문제가 되고 ItemAdded가 귀하의 환경에서 바람직하지 않은 이유에 대한 세부 정보를 공유하고 싶다면 여기에서 ItemAdded를 시스템에서 작동시키는 방법에 대해 별도의 질문을 하는 것을 고려해 보십시오.

행운을 빌어요!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 sharepoint.stackexchange
scroll top