SharePoint项目事件接收器和站点创建

时间:2009-09-30 15:00:18

标签: c# sharepoint

我为文档库创建了一个Item Event Receiver,我测试了逻辑是否正常工作,而且一切都正常。我想要做的下一件事是在创建站点时自动创建列表,因此我将列表添加到站点的ONET.xml文件中:

<Lists>
  <List Title="Documents" Description="Documents " url="MyDocumentLibrary" Type="10002" FeatureId="CFD8504D-70EB-4ba2-9CCB-52E38DB39E60" QuickLaunchUrl="Docs/AllItems.aspx" />
</Lists>

我确保此列表的功能也被激活,将功能添加到

<WebFeatures>
  <Feature ID="CFD8504D-70EB-4ba2-9CCB-52E38DB39E60" />
</WebFeatures>

创建网站后出现问题,当我向列表中添加项目事件接收器未运行时。但是,如果我手动访问网站功能并取消激活然后重新激活该功能,则项目事件接收器会运行。似乎在通过ONET.xml创建列表并激活该功能时,它不会将项事件接收器绑定到列表。这有什么用?这是一个错误吗?

2 个答案:

答案 0 :(得分:0)

这可能是site provisioning order的问题。具体来说,在列表存在之前,Web功能正在激活。

答案 1 :(得分:0)

在代码段中,我可以看到自定义列表类型 Type =“10002”,在这种情况下,您可以使用包含以下项目的其他功能轻松地将事件处理程序与列表相关联元素清单XML

<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
<Receivers ListTemplateId="10002">          
    <Receiver>
        <Name>AddedEventHandler</Name>
        <Type>ItemAdded</Type>
        <SequenceNumber>10000</SequenceNumber>
        <Assembly>full assembkly</Assembly>
        <Class>Class of the event handler</Class>
        <Data></Data>
        <Filter></Filter>
    </Receiver>
</Receivers>

  1. 另请注意,上述功能需要为Web Scoped
  2. 基于10002类型创建的所有列表都会将此EventHandler插入其中
  3. 我一直这样做而且有效,没有竞争条件