我创建了一个事件接收器来处理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>
答案 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
活动整体情况的好文章。