Domanda

Sto aggiungendo il ricevitore di eventi ItemAdding per il modello di elenco personalizzato.Sia il ricevitore eventi che il modello di elenco vengono distribuiti dalla stessa funzionalità.Inoltre la stessa funzionalità crea istanze di elenco.

Il problema che ho è che l'evento lo è attivato per ogni elemento dell'elenco nel sito in cui è stato distribuito.Elements.xml per 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>

Non sono sicuro di cosa sto facendo di sbagliato, ho fatto più o meno tutto Qui.

Invito:Sharepoint 2010 con funzionalità di pubblicazione su questo sito

È stato utile?

Soluzione

Ho avuto lo stesso problema con il mio ricevitore eventi.Ho provato ListTemplateId, ListTemplateOwner e persino ListUrl.Sapevo che le impostazioni erano valide, ma venivano ignorate e il ricevitore veniva allegato a ogni elenco.

Avevo la sensazione che potesse essere correlato al ricevitore di eventi dichiarato all'interno di una funzionalità con ambito sito.Ciò sembra essere confermato dall'art "documentazione" per 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;
        }
      }
  }

Sembra che ListTemplateId, ListTemplateOwner e ListUrl vengano ignorati per le funzionalità con ambito sito.Quando ho spostato il mio elemento Ricevitore eventi in una funzionalità con ambito Web, il ricevitore è stato collegato correttamente solo all'elenco desiderato.

Altri suggerimenti

Quando ambito a luogo è stato attivato per tutte le liste.Quando ho individuato la soluzione ragnatela ha funzionato.Spero che sia d'aiuto.

Dall'SDK MSDN: http://msdn.microsoft.com/en-us/library/ms431081.aspx


Un tag dei ricevitori può implicare una registrazione di eventi a livello di sito o una registrazione di eventi per il Web root.L'attributo dell'ambito viene utilizzato per definire a quale livello vengono applicati i ricevitori dell'evento.Se il tag dei ricevitori non ha attributo ListTempLATEID o LISTURL, il ricevitore di eventi è registrato allo stesso ambito della funzione.Ad esempio, una funzionalità che viene ammessa al Web si traduce in un ricevitore di eventi aggiunto a una raccolta del ricevitore di eventi che è ammessa sul Web.


Questo mi porta a credere che l'ID modello di elenco che hai fornito potrebbe non essere valido.

Se hai bisogno di ambito troppo ambito del ricevitore evento solo per un elenco specifico, devi impostare questo attributo e funzionerà ISA, ma assicurati che la tua funzione sia ammessa Web non ammessa dal sito come se fosse l'ambito del sito che accenderà per tutti gli elenchi nel sistema

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top