我们可以编写一个在更新任何列表时触发的事件接收器吗?我们必须为 eventreceiver 指定的 listtemplateid 使我们的代码特定于一种列表。如果我们想让代码为所有站点列表上的事件执行怎么办?
问问题
3210 次
1 回答
8
我有同样的确切要求。
也许可以将事件接收器附加到系统ContentType
(所有内容类型都继承那个,id 0x)
我会通过使用 FeatureReceiver 创建功能并以编程方式将其添加到系统内容类型来检查这是否可能。这里有一些细节。
我寻找解决方案的路径
好吧,我用控制台应用程序做了一些测试。
- 试图添加
EventReceiver
到 System (0x)。调用方法 ContentType.Update(true,false) 更新所有子元素 - System 也没有ContentType
更新,也没有 childs。事实证明,您无法使用ReadOnly
||修改这些内容类型。Sealed
属性设置为TRUE
- 试图将 EventReceiver 添加到 Item (0x01)
ContentType
。从这里可以看出,所有这些ContentTypes
仍然继承自那个(请参阅ContentType 层次结构)。可能有从 System 继承的自定义部署内容类型,但不是那些在 GUI 中创建的内容类型。更新此内容类型真正更新了所有子项ContentTypes
(除那些ReadOnly
或之外的所有内容类型Sealed
)
如何将全局 EventReceiver 附加到所有项目
因此,可行的解决方案如下所示:
- 迭代所有列表,如果您想要这些内容类型,请设置
Readonly
或设置为 false 。Sealed
EventReceivers
- 将您添加
EventReceiver
到列表中的现有内容类型 (SPList.ContentTypes
) - 将 EventReceiver 添加到 ID 为 0x01 的 ContentType (
SPWeb.ContentTypes
),以便自动添加新列表 EventReceiver。新创建的内容类型也将继承EventReceivers
. 所有子网站也ContentTypes
继承EventReceivers
.
所有三个步骤都可以是控制台应用程序或 powershell 脚本。或站点集合范围的功能FeatureReceiver
结果
PS C:\Documents and Settings\Administrator> $web.contentTypes |ft id, name, EventReceivers, readonly, sealed
Id Name EventReceivers ReadOnly Sealed
-- ---- -------------- -------- ------
0x Sistēma {} False True
0x007F1DD730DB144C84... Darba kārtības vēsture {} True True
0x01 Ieraksts {, , , ...} False False
0x01003420C661289843... Darba kārtības ieraksts {, , , ...} False False
0x0101 Dokuments {, , , ...} False False
0x010100629D00608F81... Office datu savienoj... {} True False
0x010100B4CBD48E029A... Universālais datu sa... {} True False
0x010101 Veidlapa {, , , ...} False False
0x010102 Attēls {, , , ...} False False
0x010104 Nezināms dokumenta tips {} True False
0x010105 Lapu šablons {, , , ...} False False
0x010107 Lietotāja darbplūsma... {, , , ...} False False
0x010108 Wiki lapa {, , , ...} False False
0x010109 Pamatlapa {, , , ...} False False
0x01010901 Web daļu lapa {, , , ...} False False
0x01010A Saistīt ar dokumentu {, , , ...} False False
0x01010B Dublinas pamata kolo... {, , , ...} False False
0x0102 Notikums {, , , ...} False False
0x0103 Diskutējamais jautājums {, , , ...} False False
0x0104 Paziņojums {, , , ...} False False
0x0105 Saite {, , , ...} False False
0x0106 Kontaktpersona {, , , ...} False False
0x0107 Ziņojums {, , , ...} False False
0x0108 Uzdevums {, , , ...} False False
0x0108007122AD6D76CD... Darba kārtības uzdevums {, , , ...} False False
0x010801 Darbplūsmas uzdevums {, , , ...} False False
0x010802 Administratīvs uzdevums {, , , ...} False False
0x0109 Darbplūsmas vēsture {, , , ...} False False
0x010A Person {, , , ...} False False
0x010B SharePointGroup {, , , ...} False False
0x010C DomainGroup {, , , ...} False False
0x0110 Ziņa {, , , ...} False False
0x0111 Komentārs {, , , ...} False False
0x0116 Tālo Austrumu līgums {, , , ...} False False
0x0120 Mape {} False True
0x012001 RootOfList {} False True
0x012002 Diskusija {, , , ...} False False
抱歉,我的 WSS 已本地化,但 {, , , ...} 表示我向内容类型添加了多个事件接收器。如您所见,带有Readonly
或Sealed
属性 False 的那些没有受到影响。
于 2009-08-07T09:13:49.937 回答