将1个事件接收器与2个文档库

时间:2017-09-21 10:42:41

标签: xml sharepoint elements event-receiver

我有一个项目更新的事件接收器,我想只与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中的第一个接收器

有人可以指导我,如果我想要实现的目标能够实现我所遵循的方法,或者我应该改变我的方法吗?

由于

阿玛尔

2 个答案:

答案 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实现它的方法,并在我有解决方案时将其发布。

由于

阿玛尔