SQL Practice Blog – SQL Server, BizTalk und .NET Erfahrungen

Deaktivieren und Aktivieren von Event Receivern in WSS 3.0

leave a comment »

Meine Aufgabe heute war die Implementierung einen Migrationstools um den Inhalt einer Liste auf einer SharePoint Seite in andere Listen auf einem anderen SharePoint Server zu kopieren. Hierbei waren auch zahlreiche Transformationen des Inhaltes nötig.

imageIn meinen Ziellisten existierten jedoch unzählige Event Receiver welche diverse Dinge taten wenn Listeneinträge erzeugt bzw. gelöscht werden. Zum Beispiel wurden Emails und Termine versendet oder Einträge in anderen Listen erzeugt.

Mein Migrationsworkflow (stark vereinfacht) ist im Bild rechts zu erkennen. Hier wurde zuerst die Quell- und die Zielliste geladen. Danach sicherte der Event Manager alle Eventdefinitionen für die Zielliste und löschte diese anschließend aus der Zielliste. Danach wurde die Zielliste gelöscht und neu erstellt, dies ist nötig da ich die ID’s der Listeneinträge aus dem alten System mit übernehmen musste. Jetzt wird jeder Listeneintrag einzeln aus der Liste selektiert und transformiert. Danach wird er in der Zielliste gespeichert. Ganz zum Schluss werden die Eventdefinitionen, welche wir am Anfang gesichert haben, wieder an die Zielliste angehangen.

Ich möchte mich in diesem Beitrag jedoch nur auf die Verwaltung der Event-definitionen stützen und den Rest außen vor lassen. Da es leider keine Deactivate bzw. Activate Funktion in der SPEventReceiversDefinitionCollection gibt, war ich gezwungen mir ein Workaround zu bauen.

Als erstes habe ich mir eine Klasse gebaut, welches die wichtigsten Daten des Event Receivers hält und eine Möglichkeit bietet diese am Ende auch zu speichern. Die Klasse seht ihr im unteren Screenshot.

image

Den Inhalt dieses Objekts vom Typ EventDefinition wird aus der jeweiligen SharePoint Liste ausgelesen. Dazu gibt es in der SPList Klasse die Property “EventReceivers” vom Typ SPEventReceiversDefinitionCollection, welche alle Eventdefinitionen für die SharePoint Liste zurück gibt.

Damit ich die Properties vom SPEventReceiversDefinition Objekt nicht jedes Mal von Hand zuweisen muss, habe ich mir einen expliziten Operator geschrieben, der das konvertieren übernimmt.

image

Nun kommen wir zu der Klasse EventManager. Dieser sorgt dafür, dass die Event Definitionen aus der Zielliste entfernt und nach dem Import der Daten wieder eingefügt wird. Die Klasse hat folgendes Schema:

image

Die Event Receiver Definitionen werden dem EventManager beim Erstellen über den Konstruktor übergeben. Dieser fügt sie dann in die Liste Events ein.
Die Funktion DeleteEvents sorgt dafür, dass die Eventdefinitionen aus der SharePoint Liste, welche man übergibt, entfernt werden.

image

Hingegen ist die Funktion AddEvents dafür verantwortlich, das die Events wieder an die Zielliste angehangen werden. Hierfür muss man die Zielliste der Funktion übergeben. Die Eventdefinitionen selbst befinden sich in der Liste Events, welche durch den Konstruktor gefüllt wurde. In der Funktion AddEvents wird die Funktion Save aufgerufen, welche Die Aufgabe hat jede einzelne Definition wieder in ein Objekt vom Typ SPEventReceiverDefinition umzuwandeln und in der Zielliste zu speichern.

image

Written by Robert Meyer

Januar 18, 2011 um 20:56

Veröffentlicht in SharePoint

Tagged with , , , ,

Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

%d Bloggern gefällt das: