我添加ItemAdding事件接收器的自定义列表模板。这两个事件接收器和列表模板由相同的功能部署。也是相同的功能创建列表实例。

我已经得到的问题是,该事件是烧成其所部署每个项目现场。 Elements.xml的用于eventreceivre是:

<Receivers ListTemplateId="10200">
  <Receiver>
    <Name>ListEventReceiverItemAdding</Name>
    <Type>ItemAdding</Type>
    <Assembly>$SharePoint.Project.AssemblyFullName$</Assembly>
    <Class>SharepoitProject.ListEventReceiver</Class>
    <SequenceNumber>10000</SequenceNumber>
  </Receiver>
</Receivers>

我不知道我在做什么错了,我已经做了从的此处

ENV:SharePoint 2010中与这个网站上发布功能

有帮助吗?

解决方案

我和我的事件接收器同样的问题。我试过ListTemplateId,ListTemplateOwner,甚至ListUrl。我知道的设置是有效的,但他们被忽略和接收器是被连接到每一个列表。

我有一种预感,它可能正在申报中的站点范围的功能进行相关的事件接收器。这似乎是由“文档” 以SPEventElement证实:

  switch (this.FeatureDefinition.Scope)
  {
    case SPFeatureScope.Site:
      if (this.SiteScopedReceivers())
      {
        this.UpdateEventReceiversForSite(site, sqlcmdAppendOnly, new SPEventElement.GetSqlToUpdateEventReceiversForSite(this.GetEventReceivers(site.RootWeb).GetSqlToAddEventReceiversToSite));
        break;
      }
      else
      {
        this.UpdateEventReceiversForWeb(site.RootWeb, sqlcmdAppendOnly, new SPEventElement.GetSqlToUpdateEventReceiversForWeb(this.GetEventReceivers(site.RootWeb).GetSqlToAddEventReceiversToWeb));
        break;
      }
    case SPFeatureScope.Web:
      if (this.RootWebOnly && !web.IsRootWeb)
      {
        ULS.SendTraceTag(1718513714U, (ULSCatBase) ULSCat.msoulscat_WSS_General, ULSTraceLevel.Verbose, "Event Receivers in Feature '{0}' were not activated because current web is not the root web.", new object[1]
        {
          (object) this.FeatureDefinition.Id.ToString("B")
        });
        break;
      }
      else
      {
        bool templateIdExists;
        int templateId;
        this.CheckTemplateId(out templateIdExists, out templateId);
        if (!templateIdExists)
        {
          if (this.ListUrl != null)
          {
            this.UpdateEventReceiversForList(web, sqlcmdAppendOnly, new SPEventElement.GetSqlToUpdateEventReceiversForList(this.GetEventReceivers(web).GetSqlToAddEventReceiversToList), true);
            break;
          }
          else
          {
            this.UpdateEventReceiversForWeb(web, sqlcmdAppendOnly, new SPEventElement.GetSqlToUpdateEventReceiversForWeb(this.GetEventReceivers(web).GetSqlToAddEventReceiversToWeb));
            break;
          }
        }
        else
        {
          if (this.ListUrl != null)
            throw new SPException(SPResource.GetString("ElementHasBothTemplateIdAndUrl", new object[0]));
          this.UpdateEventReceiversForListTemplate(templateId, web, sqlcmdAppendOnly, new SPEventElement.GetSqlToUpdateEventReceiversForList(this.GetEventReceivers(web).GetSqlToAddEventReceiversToList));
          break;
        }
      }
  }

似乎ListTemplateId,ListTemplateOwner,和ListUrl被忽略站点作用域特征。当我移动事件接收器元件到Web作用域特征,所述接收器被正确地只连接于所期望的列表。

其他提示

在作用域为网站它发射的所有列表。当我作用域溶液至网络它的工作。希望它帮助。

从MSDN SDK - http://msdn.microsoft.com/en -us /库/ ms431081.aspx


  

一个接收器标签可以意味着一个站点范围   事件登记或事件   登记web根。该   范围属性被用于定义在   什么级别的事件接收器   应用。如果接收器标签没有   ListTemplateId或ListUrl属性,   事件接收器被记录在   相同的范围为特征。对于   例如,范围限定于一种功能   网页结果的事件接收器   被添加到一个事件接收器   集合,该集合可以被限制在网络


这使我相信,该列表templateID你提供的可能是无效的。

如果您需要太多余地特定列表事件接收器只有你必须设置该属性 ,也将努力ISA 但要确保你的特点是网络范围的不是网站范围的,如果它的网站范围,将在系统中火为列表

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top