Bringen Eventreceiver für alle Listen einer Sharepoint-Website
-
12-09-2019 - |
Frage
Können wir schreiben einen Eventreceiver, das ausgelöst wird, wenn eine Liste aktualisiert wird. Die listtemplateid, die wir für einen Eventreceiver angeben haben, macht unseren Code specefic zu einer Rasse von Listen. Was passiert, wenn wir haben wollen für Veranstaltungen auf allen Listen der Website der Code ausführen?
Lösung
Ich habe exakt die gleiche Anforderung.
Vielleicht ist es möglich, Ereignisempfänger im System ContentType
(alle Inhaltstypen erben, dass man mit ID 0x)
I `d zu überprüfen, ob das möglich ist, indem ein Feature mit einem FeatureReceiver Erstellen und Hinzufügen es programmatisch im System Content Type. Einige Details hier .
Mein Weg eine Lösung auf der Suche nach
Allright, ich habe einige Tests mit Konsolenanwendung.
- Versucht
EventReceiver
im System (0x) hinzuzufügen. Genannt Methode ContentType.Update (wahr, falsch), die alle untergeordneten Elemente aktualisiert - noch tat-SystemContentType
aktualisiert, noch Childs . Es stellte sich heraus, dass Sie nicht diese Content mitReadOnly
ändern ||Sealed
Attribut aufTRUE
- Versuchte Eventreceiver Punkt (0x01)
ContentType
hinzuzufügen. Wie hier zu sehen ist, erben alleContentTypes
noch von diesem einen (siehe Hierarchie Content ). Es benutzerdefinierte werden können Inhaltstypen eingesetzt, die aus dem System erben, aber nicht diejenigen, gemacht in GUI. Aktualisierung dieser Inhalt Alles KindContentTypes
wirklich aktualisiert (alle Inhaltstypen mit Ausnahme derjenigen,ReadOnly
oderSealed
)
Wie eine globale Eventreceiver auf alle Elemente befestigen
So eine Lösung, die wie folgt aussehen würde funktionieren würde:
- Iterate alle Listen, setzen
Readonly
oderSealed
auf false, wenn Sie diese Inhaltstypen wollen mit IhnenEventReceivers
. - Fügen Sie Ihren
EventReceiver
zu bestehenden Inhaltstypen in Listen (SPList.ContentTypes
) - Fügen Eventreceiver zu Content (
SPWeb.ContentTypes
) mit id 0x01 so neue Listen erhalten Eventreceiver automatisch hinzugefügt. Neu erstellte Inhaltstypen werden auchEventReceivers
erben. Auch alle UnterwebContentTypes
vererbenEventReceivers
.
Alle drei Schritte könnten eine Konsolenanwendung oder Powershell-Skript sein. Oder ein Website-Sammlung breites Feature mit FeatureReceiver
Das Ergebnis
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
Es ist mein WSS lokalisiert, aber {,,, ...} bedeutet, dass ich mehrere Eventreceivers zu Inhaltstypen hinzugefügt. Wie Sie unangetastet Falsch sehen können. Menschen mit Readonly
oder Sealed
Attribute