我和我的Event Receiver有同樣的問題。我嘗試了ListTemplateId,ListTemplateOwner,甚至ListUrl。我知道這些設置是有效的,但是他們被忽略了,並且接收器被連接到每個列表。
我有一個預感,它可能與在Site範圍功能中聲明的Event Receiver有關。這似乎是由"documentation"爲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被忽略的網站範圍的功能。當我將Event Receiver元素移至Web作用域功能時,接收器只能正確連接到所需列表。
您的意思是每個列表的每個列表項目都被解僱了嗎? – 2010-10-25 13:41:12
我的意思是,當一些項目被添加到網站上的某個列表(不一定是從temlate 10200創建的列表)時,事件被觸發。 – 2010-10-25 13:53:29
奇怪,聽起來像你做對了..嘗試激活一個全新的網站集功能。只是爲了確保它在開發過程中並不依賴於所有列表。 – 2010-10-25 14:10:43