Присоедините EventReceiver ко всем спискам сайта sharepoint - PullRequest
6 голосов
/ 07 августа 2009

Можем ли мы написать приемник событий, который запускается при обновлении любого списка. Listtemplateid, который мы должны указать для приемника событий, делает наш код специально для одного вида списков. Что если мы хотим, чтобы код выполнялся для событий во всех списках сайта?

1 Ответ

8 голосов
/ 07 августа 2009

У меня такое же точное требование.

Возможно, возможно подключить приемник событий к Системе ContentType (все типы контента наследуют его с идентификатором 0x)

Я бы проверил, возможно ли это, создав компонент с помощью FeatureReceiver и программно добавив его в системный тип контента. Некоторые детали здесь .

Мой путь к поиску решения

Хорошо, я провел некоторое тестирование с консольным приложением.

  1. Попытка добавить EventReceiver в систему (0x) . Вызывается метод ContentType.Update (true, false), который обновляет все дочерние элементы - , не обновляется ни System ContentType, ни дочерние . Оказывается, вы не можете изменить эти типы содержимого с помощью ReadOnly || Sealed атрибут установлен на TRUE
  2. Попытка добавить EventReceiver к элементу (0x01) ContentType. Как видно здесь, все ContentTypes все еще наследуются от этого (см. Иерархия ContentType ). Могут быть пользовательские типы контента, которые наследуются от System, но не те, которые сделаны в GUI. При обновлении этого типа контента действительно обновляются все дочерние элементы ContentTypes (все типы контента, кроме этих ReadOnly или Sealed)

Как прикрепить глобальный EventReceiver ко всем элементам

Итак, решение, которое будет работать, будет выглядеть так:

  1. Итерируйте все списки, установите Readonly или Sealed в false, если вы хотите, чтобы эти типы контента были с вами EventReceivers.
  2. Добавьте ваш EventReceiver к существующим типам контента в списках (SPList.ContentTypes)
  3. Добавьте EventReceiver в ContentType (SPWeb.ContentTypes) с идентификатором 0x01, чтобы новые списки добавляли 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 не затрагиваются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...