2009-02-18 19 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完全被忽略:@ 因此,我們正在解決這個自定義功能,並使用對象模型綁定事件接收器。

相關問題