Ho avuto lo stesso problema con il mio ricevitore di 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.
Ho avuto l'impressione che potrebbe essere correlato al Destinatario evento dichiarato all'interno di una funzione con ambito sito. Ciò sembra essere confermato dal "documentation" 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 ListaURL vengono ignorati per il sito ambito caratteristiche. Quando ho spostato l'elemento Ricevitore di eventi in una funzione con ambito Web, il ricevitore è stato collegato correttamente solo all'elenco desiderato.
fonte
2011-09-20 17:15:27
Vuoi dire che viene attivato per ogni voce di elenco per ogni elenco? –
Voglio dire che quando qualche elemento viene aggiunto ad alcune liste sul sito (non necessariamente lista creata da temlate 10200) l'evento viene attivato. –
Strano, sembra che tu abbia fatto bene .. Prova ad attivare la funzione su una nuova raccolta di siti. Solo per assicurarsi che non fosse allegato a tutte le liste durante lo sviluppo. –