我们可以编写一个在任何列表更新时触发的事件接收器。
我们必须为事件接收器指定的 listtemplateid 使我们的代码特定于一种列表。如果我们想让代码对所有站点列表上的事件执行怎么办?
最佳答案
我有同样的确切要求。
也许可以将事件接收器附加到系统 ContentType
(所有内容类型都继承了那个,id 为 0x)
我会通过使用 FeatureReceiver 创建一个功能并以编程方式将其添加到系统内容类型来检查这是否可行。一些细节here .
我寻找解决方案的路径
好吧,我用控制台应用程序做了一些测试。
EventReceiver
到系统 (0x) .调用方法 ContentType.Update(true,false) 更新所有子元素 - 系统也没有ContentType
更新了,也没有 child .原来你不能用 ReadOnly
修改这些 contentTypes || Sealed
属性设置为 TRUE
ContentType
.从这里可以看出,所有 ContentTypes
仍然继承自那个(见 ContentType hierarchy)。可能有自定义部署的内容类型继承自 System,但不是那些在 GUI 中制作的内容类型。更新此内容类型真正更新了所有子级 ContentTypes
(除 ReadOnly
或 Sealed
之外的所有内容类型)如何将全局 EventReceiver 附加到所有项目
因此,一个可行的解决方案如下所示:
Readonly
或 Sealed
如果您想要这些内容类型,则为 false EventReceivers
. EventReceiver
到列表中的现有内容类型 ( SPList.ContentTypes
) 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 保持不变。
关于.net - 将 EventReceiver 附加到共享点站点的所有列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1243406/