ItemUpdating在事件接收器中的ItemAdded之后调用两次

时间:2012-04-04 16:05:44

标签: sharepoint-2010

我创建了一个事件接收器来处理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>

1 个答案:

答案 0 :(得分:7)

问题是在Document library期间Item Updating事件处理程序还检查Document是否在签入模式或签出。这就是它被召唤两次的原因。

你应该把你的代码放在

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

有关详细信息, Here 是描述Document's活动整体情况的好文章。