6

我们可以编写一个在更新任何列表时触发的事件接收器吗?我们必须为 eventreceiver 指定的 listtemplateid 使我们的代码特定于一种列表。如果我们想让代码为所有站点列表上的事件执行怎么办?

4

1 回答 1

8

我有同样的确切要求。

也许可以将事件接收器附加到系统ContentType(所有内容类型都继承那个,id 0x)

我会通过使用 FeatureReceiver 创建功能并以编程方式将其添加到系统内容类型来检查这是否可能。这里有一些细节。

我寻找解决方案的路径

好吧,我用控制台应用程序做了一些测试。

  1. 试图添加EventReceiver 到 System (0x)。调用方法 ContentType.Update(true,false) 更新所有子元素 - System 也没有ContentType更新,也没有 childs。事实证明,您无法使用ReadOnly||修改这些内容类型。Sealed属性设置为TRUE
  2. 试图将 EventReceiver 添加到 Item (0x01) ContentType。从这里可以看出,所有这些ContentTypes仍然继承自那个(请参阅ContentType 层次结构)。可能有从 System 继承的自定义部署内容类型,但不是那些在 GUI 中创建的内容类型。更新此内容类型真正更新了所有子项ContentTypes(除那些ReadOnly或之外的所有内容类型Sealed

如何将全局 EventReceiver 附加到所有项目

因此,可行的解决方案如下所示:

  1. 迭代所有列表,如果您想要这些内容类型,请设置Readonly或设置为 false 。SealedEventReceivers
  2. 将您添加EventReceiver到列表中的现有内容类型 ( SPList.ContentTypes)
  3. 将 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 已本地化,但 {, , , ...} 表示我向内容类型添加了多个事件接收器。如您所见,带有ReadonlySealed属性 False 的那些没有受到影响。

于 2009-08-07T09:13:49.937 回答