我有一个项目更新的事件接收器,我想只与2个文档库关联。
之前我曾将事件接收器与ListTemplateId =“101”相关联。所以这个事件接收器正在为所有文档库解雇!这是我不想要的东西,但我无法干净地避免它。因此,作为第一行代码中的变通方法,我检查调用事件接收器的库,如果它不是预期的库,则返回。
然后我在elements.xml中阅读了一些关于 receiver 标签的内容,发现我可以在elements.xml中注册多个 receiver 标签。所以我改变了下面的elements.xml
<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
<Receivers ListUrl="DocLib1">
<Receiver>
<Name>EventReceiver1ItemAdded</Name>
<Type>ItemAdded</Type>
<Assembly>$SharePoint.Project.AssemblyFullName$</Assembly>
<Class>NM1.EventReceiver1.EventReceiver1</Class>
<SequenceNumber>10000</SequenceNumber>
<Synchronization>Synchronous</Synchronization>
</Receiver>
</Receivers>
<Receivers ListUrl="DocLib2">
<Receiver>
<Name>EventReceiver1ItemAdded</Name>
<Type>ItemAdded</Type>
<Assembly>$SharePoint.Project.AssemblyFullName$</Assembly>
<Class>NM1.EventReceiver1.EventReceiver1</Class>
<SequenceNumber>10000</SequenceNumber>
<Synchronization>Synchronous</Synchronization>
</Receiver>
</Receivers>
</Elements>
希望事件接收器只与这两个doc lib相关联。但事实是事件接收器仅附加到<strong> DocLib1 (elements.xml中的第一个接收器)
有人可以指导我,如果我想要实现的目标能够实现我所遵循的方法,或者我应该改变我的方法吗?
由于
阿玛尔
答案 0 :(得分:0)
这个问题有一个很好的答案here.
但是,一个不同的快速和肮脏的解决方案是将您的elements.xml恢复为在单个Receiver元素中使用ListTemplateId =“101”,并将逻辑包装在以下内容中:
if(properties.ListTitle == "List1" || properties.ListTitle == "List2")
{
// Your logic here.
}
答案 1 :(得分:0)
我一直在努力使用elements.xml来实现它,但是不能在适当的时候使用功能激活事件代码。
我修改了elements.xml文件,以便不将此事件与任何内容相关联
<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
<Receivers>
<Receiver>
<Name>EventReceiver1ItemAdded</Name>
<Type>ItemAdded</Type>
<Assembly>$SharePoint.Project.AssemblyFullName$</Assembly>
<Class>NM1.EventReceiver1.EventReceiver1</Class>
<SequenceNumber>10000</SequenceNumber>
<Synchronization>Synchronous</Synchronization>
</Receiver>
</Receivers>
</Elements>
然后通过将事件附加到我的功能,我修改了FeatureActivated事件并编写了类似这样的内容
public override void FeatureActivated(SPFeatureReceiverProperties properties)
{
SPSite site = properties.Feature.Parent as SPSite;
using (SPWeb web = site.RootWeb)
{
web.Lists["DoocLib1"].EventReceivers.Add(SPEventReceiverType.ItemAdded, Assembly.GetExecutingAssembly().FullName, "NM1.EventReceiver1.EventReceiver1");
web.Lists["DoocLib2"].EventReceivers.Add(SPEventReceiverType.ItemAdded, Assembly.GetExecutingAssembly().FullName, "NM1.EventReceiver1.EventReceiver1");
}
}
请注意,该功能的范围应至少为网站,以便工作正常。
我将继续探索使用elements.xml实现它的方法,并在我有解决方案时将其发布。
由于
阿玛尔