Fissare EventReceiver a tutte le liste di un sito di SharePoint
-
12-09-2019 - |
Domanda
Possiamo scrivere un eventreceiver che viene licenziato quando un qualsiasi elenco viene aggiornato. Il listtemplateid che dobbiamo specificare un eventreceiver rende il nostro codice specefic ad una razza di liste. Che cosa succede se vogliamo avere il codice di esecuzione per gli eventi su tutti gli elenchi di sito?
Soluzione
Ho lo stesso requisito esatto.
Forse è possibile allegare ricevitore di eventi a ContentType
sistema (tutti i tipi di contenuto che si ereditano, con id 0x)
I `d verificare se è possibile con la creazione di una funzione con un FeatureReceiver e programmaticamente aggiungendolo al sistema di tipo di contenuto. Alcune informazioni qui .
Il mio percorso per trovare una soluzione
Allright, ho fatto alcuni test con la console app.
- provato ad aggiungere
EventReceiver
del sistema (0x) . Metodo ContentType.Update Chiamato (vero, falso) che aggiorna tutti gli elementi figlio - né haContentType
sistema aggiornato, né bambino . Scopre che non è possibile modificare tali ContentTypes conReadOnly
||Sealed
attributo impostato suTRUE
- provato ad aggiungere EventReceiver alla voce (0x01)
ContentType
. Come si vede da qui, tuttiContentTypes
ancora ereditare da quella (vedi ContentType gerarchia ). Ci possono essere schierati personalizzato tipi di contenuto che ereditano da sistema, ma non quelli realizzati in GUI. Aggiornamento di questo tipo di contenuto veramente aggiornato tuttiContentTypes
bambino (tutti i tipi di contenuto ad eccezione di quelliReadOnly
oSealed
)
Come collegare un EventReceiver globale a tutti gli elementi
Quindi, una soluzione che avrebbe funzionato sarebbe simile a questa:
- Scorrere tutte le liste, impostare
Readonly
oSealed
su false se si desidera che tali tipi di contenuto con teEventReceivers
. - Aggiungi il tuo
EventReceiver
ai tipi di contenuto già esistenti nelle liste (SPList.ContentTypes
) - Aggiungi EventReceiver al ContentType (
SPWeb.ContentTypes
) con id 0x01 in modo da ottenere nuovi elenchi EventReceiver aggiunto automaticamente. tipi di contenuto appena creato verrà anche ereditareEventReceivers
. Inoltre tutti i Web secondarioContentTypes
ereditareEventReceivers
.
Tutti e tre i passaggi potrebbero essere un'applicazione console o uno script PowerShell. O una caratteristica a livello di raccolta siti con FeatureReceiver
Il risultato
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
Siamo spiacenti, il mio WSS è localizzato, ma {,,, ...} significa ho aggiunto diversi EventReceivers di tipi di contenuto. Come si può vedere quelli con Readonly
o Sealed
attribuiscono False sono intatte.