Anexar EventReceiver a todas as listas de um site do SharePoint
-
12-09-2019 - |
Pergunta
Podemos escrever um eventreceiver que é demitido quando qualquer lista é atualizada. O listtemplateid que temos de especificar para um eventreceiver torna a nossa specefic código para uma raça de listas. E se nós queremos ter o código executado em eventos em todas as listas de site?
Solução
Eu tenho o mesmo exigência exata.
Talvez seja possível anexar receptor de eventos para ContentType
System (todos os tipos de conteúdo herdar esse, com 0x id)
verificação I d se isso é possível através da criação de um recurso com uma FeatureReceiver e programaticamente adicionando-o ao Sistema tipo de conteúdo. Alguns detalhes aqui .
Meu caminho em encontrar uma solução
Allright, eu fiz alguns testes com aplicação de console.
- tentou adicionar
EventReceiver
para System (0x) . método chamado ContentType.Update (verdadeiro, falso) que atualiza todos os elementos filhos - nemContentType
sistema atualizado, nem da criança . Acontece que você não pode modificar essas ContentTypes comReadOnly
|| atributoSealed
conjunto paraTRUE
- tentou adicionar EventReceiver ao Item (0x01)
ContentType
. Como pode ser visto a partir daqui, tudoContentTypes
ainda herdar de que um (ver ContentType hierarquia ). Não pode ser personalizado implantado tipos de conteúdo que herdam de sistema, mas não aqueles feitos em GUI. Atualizando esse tipo de conteúdo verdadeiramente atualizados todosContentTypes
criança (todos os tipos de conteúdo, exceto aquelesReadOnly
ouSealed
)
Como anexar um EventReceiver global para todos os itens
Assim, uma solução que iria trabalhar ficaria assim:
- iterar todas as listas, conjunto
Readonly
ouSealed
para false se você quiser esses tipos de conteúdo com vocêEventReceivers
. - Adicione o seu
EventReceiver
a tipos de conteúdo existentes em listas (SPList.ContentTypes
) - Adicione EventReceiver para ContentType (
SPWeb.ContentTypes
) com ID 0x01 tão novas listas obter EventReceiver adicionado automaticamente. Recém-criado tipos de conteúdo também irá herdarEventReceivers
. Além disso, todos subwebContentTypes
herdarEventReceivers
.
Todas as três etapas poderia ser um aplicativo de console ou script PowerShell. Ou uma característica ampla do conjunto de sites com FeatureReceiver
O resultado
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
Desculpe, o meu WSS é localizada, mas {,, ...} significa que eu adicionei vários EventReceivers a tipos de conteúdo. Como você pode ver aqueles com Readonly
ou Falso atributo Sealed
estão intocados.