У меня такое же точное требование.
Возможно, возможно подключить приемник событий к Системе ContentType
(все типы контента наследуют его с идентификатором 0x)
Я бы проверил, возможно ли это, создав компонент с помощью FeatureReceiver и программно добавив его в системный тип контента. Некоторые детали здесь .
Мой путь к поиску решения
Хорошо, я провел некоторое тестирование с консольным приложением.
- Попытка добавить
EventReceiver
в систему (0x) . Вызывается метод ContentType.Update (true, false), который обновляет все дочерние элементы - , не обновляется ни System ContentType
, ни дочерние . Оказывается, вы не можете изменить эти типы содержимого с помощью ReadOnly
|| Sealed
атрибут установлен на TRUE
- Попытка добавить EventReceiver к элементу (0x01)
ContentType
. Как видно здесь, все ContentTypes
все еще наследуются от этого (см. Иерархия ContentType ). Могут быть пользовательские типы контента, которые наследуются от System, но не те, которые сделаны в GUI. При обновлении этого типа контента действительно обновляются все дочерние элементы ContentTypes
(все типы контента, кроме этих ReadOnly
или Sealed
)
Как прикрепить глобальный EventReceiver ко всем элементам
Итак, решение, которое будет работать, будет выглядеть так:
- Итерируйте все списки, установите
Readonly
или Sealed
в false, если вы хотите, чтобы эти типы контента были с вами EventReceivers
.
- Добавьте ваш
EventReceiver
к существующим типам контента в списках (SPList.ContentTypes
)
- Добавьте 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 не затрагиваются.