我有一个网站内容类型,用于整个网站集中的少数列表。在那种内容类型中,我描述了一个事件接收器来处理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