Luk*_*mon 7 sharepoint sharepoint-2010 sharepoint-listtemplate eventreceiver
我正在为自定义列表模板添加ItemAdding事件接收器.事件接收器和列表模板都由相同的功能部署.同样的功能也会创建列表实例.
我遇到的问题是,为部署它的站点中的每个列表项触发了事件.eventreceivre的Elements.xml是:
<Receivers ListTemplateId="10200">
<Receiver>
<Name>ListEventReceiverItemAdding</Name>
<Type>ItemAdding</Type>
<Assembly>$SharePoint.Project.AssemblyFullName$</Assembly>
<Class>SharepoitProject.ListEventReceiver</Class>
<SequenceNumber>10000</SequenceNumber>
</Receiver>
</Receivers>
Run Code Online (Sandbox Code Playgroud)
我不确定我做错了什么我从这里开始或多或少做了什么.
环境:Sharepoint 2010与本网站上的发布功能
Ric*_*ema 13
我的事件接收器遇到了同样的问题.我尝试过ListTemplateId,ListTemplateOwner,甚至是ListUrl.我知道设置是有效的,但它们被忽略了,接收器被附加到每个列表.
我有一种预感,它可能与在Site scoped功能中声明的Event Receiver有关.这似乎是由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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
对于网站范围的功能,似乎会忽略ListTemplateId,ListTemplateOwner和ListUrl.当我将Event Receiver元素移动到Web范围功能时,接收器只能正确连接到所需的列表.
| 归档时间: |
|
| 查看次数: |
15606 次 |
| 最近记录: |