3

我创建了一个事件接收器来处理 SharePoint 2010 中文档库上的 ItemAdded 和 ItemUpdating 事件。

我遇到了一个问题,当我将文档添加到库中时(例如,通过从 Word 中将其保存回来),正确调用了 ItemAdded 方法,但是随后两次调用 ItemUpdating。我已经从我的处理程序中删除了所有代码,以确保不是我在里面做的事情导致了问题。它们实际上看起来像:

public override void ItemUpdating(SPItemEventProperties properties)
{
}

public override void ItemAdded(SPItemEventProperties properties)
{
}

有没有人有这个问题的解决方案?

这是事件接收器的 elements.xml 文件:

<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
  <Receivers ListTemplateId="101">
      <Receiver>
        <Name>DocumentsEventReceiverItemUpdating</Name>
        <Type>ItemUpdating</Type>
        <Assembly>$SharePoint.Project.AssemblyFullName$</Assembly>
        <Class>My.Namespace.DocumentsEventReceiver</Class>
        <SequenceNumber>10000</SequenceNumber>
        <Synchronization>Synchronous</Synchronization>
      </Receiver>
      <Receiver>
        <Name>DocumentsEventReceiverItemAdded</Name>
        <Type>ItemAdded</Type>
        <Assembly>$SharePoint.Project.AssemblyFullName$</Assembly>
        <Class>My.Namespace.DocumentsEventReceiver</Class>
        <SequenceNumber>10000</SequenceNumber>
        <Synchronization>Synchronous</Synchronization>
      </Receiver>
  </Receivers>
</Elements>
4

1 回答 1

7

问题是 InDocument library事件处理程序Item Updating也在检查它Document是处于Check In模式还是Check Out期间。这就是为什么它被调用两次。

你应该把你的代码

 public override void ItemUpdating(SPItemEventProperties properties)
  {  
    base.ItemUpdating(properties);
    if (properties.AfterProperties["vti_sourcecontrolcheckedoutby"] == null && properties.BeforeProperties["vti_sourcecontrolcheckedoutby"] != null)
     {
       //do stuff
     }
  }

有关详细信息,这里是描述Document's事件整体情况的好文章。

于 2012-04-04T17:11:35.497 回答