2009-02-18 21 views
3

我创建了一个事件接收器并添加到GAC中。如何将事件接收器绑定到*特定的*自定义内容类型?

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

我需要从一个XML文件中做到这一点:

到目前为止,我有:

的Feature.xml指向一个Elements.xml文件,但我不知道Elements.xml文件。

你如何引用特定的内容类型? (我有关于特定内容类型的指导)

回答

8

要将事件接收器绑定到特定内容类型,请使用内容类型元素文件的XmlDocuments元素。下面是我的即将出版的书"Building the SharePoint User Experience"的一个相当独家的摘录:

而且,为了澄清,因为我没有看到您尝试发布的XML,您可以将其添加到elements.xml文件中的内容类型声明中。

(...)

使用附加功能

与连接事件接收器就像我们刚才看到的重要的是要注意有没有办法绑定一个接收器事件接收到的内容类型到内容类型,仅限于列表模板。

不,没有办法将接收器添加到单个列表中。但是,正如我们在列表森林中的电子邮件启用自定义列表部分中所看到的那样,我们可以使用代码以编程方式添加事件接收器。我们可以使用相同的技术将事件接收器添加到内容类型中,但应该有一种方法可以在特征中使用CAML来完成此操作。毕竟这是我们定义内容类型的地方,我们将在本章后面看到。

答案?内容类型中的事件接收器在元素文件的不同部分中定义。我们再次看看XmlDocuments和第三个内置的XmlDocument类型Receiver。 Receiver XmlDocument驻留在http://schemas.microsoft.com/sharepoint/events命名空间中。如果你想看到一个接收器的XmlDocument在默认SharePoint安装,搜索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> 

注意该示例使用一个前缀固相萃取:为接收器元件。从技术角度来看,这不是必需的,但可以增加您的代码的清晰度。 如您所见,Receiver元素遵循元素中定义的常规项目事件接收器的结构。当然,除了接收者是在内容类型的XmlDocument部分定义的。

+0

嗨!这是否也适用于SP 2010?我不能让我的事件接收器触发,并且我确定它在你描述的时候被注册了 – Larsi 2010-09-24 14:03:12

0

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

相关问题