我有一個網站內容類型,用於整個網站集中的少數列表。在那種內容類型中,我描述了一個事件接收器來處理ItemAdding事件。這工作正常。現在我需要更新內容類型,以便處理ItemUpdating。 OTTOMH,我試着簡單地修改我的內容類型的xml,因爲這似乎允許簡單的版本跟蹤。這在我的更新適用於網站內容類型的意義上,但不適用於使用此內容類型的我的列表。這是預料之中的。然後,我注意到,在SharePoint SDK採取的一個grim view:更新已部署的SharePoint內容類型以處理其他項目事件
在任何情況下,你應該安裝 和激活的內容 類型後,您 更新內容類型定義 文件的內容類型。 Windows SharePoint Services確實 不跟蹤對內容 類型定義文件所做的更改。因此,您 沒有辦法將 對站點內容類型的更改推送到 子內容類型。
SDK然後指向幾個部分,描述如何使用UI或代碼推送更改。由於UI不提供事件接收器的鉤子,我想我會選擇代碼路徑。
我想我能夠做這樣的事情,只是添加一個新的事件接收器的內容類型列表中的副本:
SPList list = web.Lists["My list"];
SPContentType ctype = list.ContentTypes["My content type"];
// Doesn't work -- EventReceivers is null below.
ctype.EventReceivers.Add(SPEventReceiverType.ItemUpdating,
"My assembly name", "My class name");
但美中不足的是,ctype.EventReceivers爲null這裏,即使我已經將ItemAdding連接到此列表。看起來它已經移到了列表本身。所以,這個列表有一個有效的EventReceivers集合。
SPList list = web.Lists["My list"];
list.EventReceivers.Add(SPEventReceiverType.ItemUpdating,
"My assembly name", "My class name");
所以,我有幾個問題:
- 是這樣做只是爲了直接增加任何新的事件接收器的列表,只是忘了我的內容類型完全正確的方法是什麼?
- 要完成這個改變,在配置管理方面處理這個問題的最好方法是什麼?我應該創建一個簡單的控制檯應用程序來查找所有適當的列表並修改它們中的每一個?或者以某種方式創建一個功能更好的選擇?無論哪種方式,似乎這種變化將自行消失,很難被未來的開發者發現,他們可能需要使用這種內容類型。
好問題:我一直想問一些類似的東西。 – 2009-07-02 21:07:47