Как я могу добавить приемник событий только для списка с идентификатором Specyfic шаблон

StackOverflow https://stackoverflow.com/questions/4014020

Вопрос

Я добавляю itemAdding Pree Action для пользовательского шаблона списка. И шаблон приемника событий и шаблон списка развертываются одной и той же функцией. Также такая же функция создает экземпляры списка.

Проблема, которую у меня есть, это то, что событие Уволен для каждого элемента списка На сайте, к которому он был развернут. 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 с функцией публикации на этом сайте

Это было полезно?

Решение

У меня была такая же проблема с моим ресивером. Я попробовал listTemplateDID, listTemblackowner и даже listurl. Я знал, что настройки были действительными, но они игнорируются, и приемник прикреплен к каждому списку.

У меня была дошла, что может быть связано с ресивером событий, объявленным в рамках функции Sacoped. Это, кажется, подтверждается "документация" для спевалэлемента:

  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;
        }
      }
  }

Похоже, что ListTemplateDID, ListTemplathnowner и ListURL игнорируется для сайта Scoped функций. Когда я переместил свой элемент приемника событий в функцию сертификации, приемник был должным образом прикреплен только к нужным списке.

Другие советы

Когда на колебании сайт Он уволен для всех списков. Когда я считал решением веб это сработало. Надеюсь, поможет.

От MSDN SDK - http://msdn.microsoft.com/en-us/library/ms431081.aspx.


Тег ресиверов может подразумевать о регистрации событий на сайте или событие для регистрации событий для корневой сети. Атрибут охвата используется для определения на каком уровне применяются приемники событий. Если тег ресиверов не имеет атрибута ListTemplateID или ListURL, приемник событий зарегистрирован в том же объеме, что и функция. Например, функция, которая приводит к которому, приводит к которому, приводит к которому приводит к тому, что получатель события добавляется в коллекцию приемника событий, которая имеет место для Scoped в Интернете.


Это приводит меня полагать, что указанный вами список «Список» может быть недействительным.

Если вам нужна охвата приемника событий для конкретного списка, только вы должны установить этот атрибут, и он будет работать ISA, но убедитесь, что ваша функция - это веб-сайте, а не на уровне SATE, как если бы оно на месте, он будет огонь для всех списков в системе

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top