Sharepoint 如何将事件接收器绑定到*特定*自定义内容类型?

Sharepoint 如何将事件接收器绑定到*特定*自定义内容类型?,sharepoint,event-handling,content-type,Sharepoint,Event Handling,Content Type,我已经创建了一个事件接收器,并将其添加到GAC中 如何将事件接收器绑定到特定的自定义内容类型 我需要从XML文件执行此操作: 到目前为止,我已经: 指向Elements.xml文件但不确定Elements.xml文件的Feature.xml 如何引用特定的内容类型?(我有特定内容类型的guid)要将事件接收器绑定到特定内容类型,请使用内容类型元素文件的XmlDocuments元素。以下是我即将出版的书中的一段独家摘录: 而且,为了澄清,由于我没有看到您试图发布的XML,您应该将其添加到eleme

我已经创建了一个事件接收器,并将其添加到GAC中

如何将事件接收器绑定到特定的自定义内容类型

我需要从XML文件执行此操作:

到目前为止,我已经:

指向Elements.xml文件但不确定Elements.xml文件的Feature.xml


如何引用特定的内容类型?(我有特定内容类型的guid)

要将事件接收器绑定到特定内容类型,请使用内容类型元素文件的XmlDocuments元素。以下是我即将出版的书中的一段独家摘录:

而且,为了澄清,由于我没有看到您试图发布的XML,您应该将其添加到elements.XML文件中的内容类型声明中

(……)

使用功能将事件接收器附加到内容类型

我们刚才看到的附加事件接收器的重要一点是,注意到没有办法将接收器绑定到内容类型,只能绑定到列表模板

不,也没有办法将接收者添加到单个列表中。但是,正如我们在列表林一章中的“启用自定义列表的电子邮件”部分所看到的,我们可以使用代码以编程方式添加事件接收器。我们也可以使用相同的技术将事件接收器添加到内容类型中,但是应该有一种方法在功能中使用CAML来实现这一点。毕竟,这就是我们定义内容类型的地方,我们将在本章后面看到

答案是什么?内容类型中的事件接收器在元素文件的不同部分中定义。我们再次关注XmlDocuments和第三个内置XmlDocument类型接收器。接收方XmlDocument位于命名空间中。如果要在默认SharePoint安装中查看接收方XmlDocument,请在ctypesws.xml文件中搜索内容类型0x010107,DocumentWorkflowItem:

<XmlDocument NamespaceURI="http://schemas.microsoft.com/sharepoint/events">
 <spe:Receivers xmlns:spe="http://schemas.microsoft.com/sharepoint/events">
  <Receiver>
   <Name>Workflow Library Item Added</Name>
   <Type>ItemAdded</Type>
   <SequenceNumber>1</SequenceNumber>
   <Assembly>Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral,~CCC
    PublicKeyToken=71e9bce111e9429c</Assembly>
   <Class>Microsoft.SharePoint.Workflow.SPWorkflowLibraryEventReceiver</Class>
   <Data />
   <Filter />
  </Receiver>
… (snipped for space saving purposes
 </Receivers>
</XmlDocument>

已添加工作流库项
添加项目
1.
Microsoft.SharePoint,版本=12.0.0.0,区域性=中性,~CCC
PublicKeyToken=71e9bce111e9429c
Microsoft.SharePoint.Workflow.SPWorkflowLibraryEventReceiver
…(为了节省空间而剪断)
注意:这个例子为Receivers元素使用了一个前缀spe:。从技术角度来看,这不是必需的,但可以增加代码的清晰度。
如您所见,Receiver元素遵循元素中定义的常规项目事件接收器的结构。当然,除了在内容类型的XmlDocument部分中定义接收器之外。

@Larsi:这里也有同样的问题。看起来“Inherits”设置为true会导致错误,然后XmlDocuments被完全忽略:@
因此,我们正在使用自定义功能修复此问题,并使用对象模型绑定事件接收器。

Hi!这是否也适用于SP 2010?我无法启动我的事件接收器,并且我确定它已注册,如您所述。如何将接收器添加到内置内容类型(例如“文件夹”)使用此技术?文件夹是与其他任何内容类型一样的内容类型,因此其定义不会有任何不同。如果您有现有文件夹,则需要在事后附加收件人,但这稍微超出了评论的范围。我建议您在sharepoint.stackexchange.com上提出新问题。