Frage

Ich füge ItemAdding Ereignisempfänger für benutzerdefinierte Liste Vorlage. Beiden Ereignisempfänger und Listenvorlage durch die gleiche Funktion im Einsatz. Auch die gleiche Funktion zum Erstellen einer Liste von Instanzen.

Das Problem, das ich habe ist, dass das Ereignis für jedes Listenelement gebrannt in Ort, an dem es zum Einsatz kam. Elements.xml für eventreceivre ist:

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

Ich bin nicht sicher, was ich falsch mache ich habe mehr oder weniger getan every von hier .

Env: Sharepoint 2010 mit Publishing-Funktion auf dieser Website

War es hilfreich?

Lösung

Ich hatte das gleiche Problem mit meinem Ereignisempfänger. Ich habe versucht, ListTemplateId, ListTemplateOwner und sogar ListUrl. Ich wusste, dass die Einstellungen gültig waren, aber sie wurden ignoriert, und der Empfänger wurde auf jede Liste angebracht ist.

hatte ich eine Ahnung, dass es an den Ereignisempfänger in Beziehung gesetzt werden könnte erklärt werden innerhalb einer Site-Funktion scoped. Dies scheint durch die „Dokumentation“ SPEventElement bestätigt werden:

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

Es scheint, dass ListTemplateId, ListTemplateOwner und ListUrl ignoriert werden für Site-Funktionen scoped. Wenn ich mein Event-Receiver Element an eine Web-scoped Funktion bewege, wurde der Empfänger richtig nur auf die gewünschte Liste im Anhang.

Andere Tipps

Wenn scoped auf Website für alle Listen gebrannt. Wenn ich die Lösung auf Web-scoped es funktioniert. Hoffe, es hilft.

Aus der MSDN SDK - http://msdn.microsoft.com/en -US / library / ms431081.aspx


  

Ein Empfänger-Tag kann eine standortweite implizieren   Event-Registrierung oder ein Ereignis   Registrierung für das Root-Web. Das   Scope Attribut wird verwendet, um zu definieren,   welche Ebene sind die Ereignisempfänger   aufgetragen. Wenn der Empfänger-Tag hat keine   ListTemplateId oder ListUrl Attribut,   die Ereignisempfänger registriert bei   der gleiche Umfang wie die Eigenschaft. Zum   Beispielsweise kann ein Merkmal, das scoped ist   die Suchergebnisse in einem Ereignisempfänger   wird zu einem Ereignis-Empfänger hinzugefügt   Sammlung, die mit dem Web scoped wird.


Dies führt mich zu glauben, dass die Liste TemplateID Sie geliefert ungültig sein kann.

Wenn Sie auch Umfang der Ereignisempfänger für bestimmte Liste nur dieses Attribut festlegen müssen und es wird ISA arbeiten aber stellen Sie sicher, dass Ihre Funktion Web-scoped nicht Website ist scoped, als ob es die Site Umfang es für alle Listen im System ausgelöst wird

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top