Прикрепите EventReceiver ко всем спискам сайта SharePoint.
-
12-09-2019 - |
Вопрос
Можем ли мы написать приемник событий, который срабатывает при обновлении любого списка?Listtemplateid, который мы должны указать для приемника событий, делает наш код специфичным для одного типа списков.Что, если мы хотим, чтобы код выполнялся для событий во всех списках сайта?
Решение
У меня точно такое же требование.
Возможно, можно подключить приемник событий к системе ContentType
(все типы контента наследуют этот тип с идентификатором 0x)
Я бы проверил, возможно ли это, создав функцию с помощью FeatureReceiver и программно добавив ее в тип системного контента.Некоторые подробности здесь.
Мой путь поиска решения
Хорошо, я провел небольшое тестирование с помощью консольного приложения.
- Пытался добавить
EventReceiver
в систему (0x).Вызывается метод ContentType.Update(true,false), который обновляет все дочерние элементы – и Система неContentType
обновлено, ни дочерние элементы.Оказывается, вы не можете изменить эти типы контента с помощьюReadOnly
||Sealed
атрибут установлен наTRUE
- Пытался добавить EventReceiver к элементу (0x01)
ContentType
.Как видно отсюда, всеContentTypes
все еще наследуется от этого (см. Иерархия типов контента).Могут быть пользовательские развернутые типы контента, которые наследуются от системы, но не те, которые созданы в графическом интерфейсе.Обновление этого типа контента действительно обновило все дочерние элементы.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 не тронут.