要将事件接收器绑定到特定内容类型,请使用内容类型元素文件的 XmlDocuments 元素。这是我即将出版的书中的相当独家的摘录“构建 SharePoint 用户体验” http://www.understandingsharepoint.com/userexperience:
而且,为了澄清一下,由于我没有看到您尝试发布的 XML,因此您可以将其添加到 elements.xml 文件中的内容类型声明中。
(...)
使用功能将事件接收器附加到内容类型
像我们刚刚看到的那样附加事件接收器的重要一点是要注意,无法将接收器绑定到内容类型,只能绑定到列表模板。
不,也没有办法将接收者添加到单独的列表中。但是,正如我们在“列表森林”章节中的“启用自定义列表的电子邮件”部分中看到的,我们可以使用代码以编程方式添加事件接收器。我们也可以使用相同的技术将事件接收器添加到内容类型,但应该有一种方法可以在功能中使用 CAML 来执行此操作。毕竟,这就是我们定义内容类型的地方,我们将在本章后面看到。
答案?内容类型中的事件接收器在元素文件的不同部分中定义。我们再次关注 XmlDocuments 和第三个内置 XmlDocument 类型接收器。接收者 XmlDocument 位于http://schemas.microsoft.com/sharepoint/events http://schemas.microsoft.com/sharepoint/events命名空间。如果您想要在默认 SharePoint 安装中查看 Receiver XmlDocument,请在 ctypeswss.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>
注意 该示例对 Receivers 元素使用前缀 spe:。从技术角度来看,这不是必需的,但可以使代码更加清晰。
正如您所看到的,Receiver 元素遵循 elements 中定义的常规项目事件接收器的结构。当然,接收者是在内容类型的 XmlDocument 部分中定义的除外。