SharePointCommunity
Die deutschsprachige Community für SharePoint, Office 365 und mit Azure

Ändern der Standard-Benachrichtigungsmail von SharePoint

Blogs

Oliver Wirkus

Syndication

Certifications

Web 2.0

http://smits-net.de/img/linkedin_button.gif

XING

http://i80.photobucket.com/albums/j191/mikesamerica/twitter_button_zpsee74f711.png

 

 Add to Technorati Favorites

 

 Delicious Bookmark this on Delicious

 

  Locations of visitors to this page

 

Eine der interessanten und oft genutzten Möglichkeiten von SharePoint ist die Benachrichtigung bei Listen und Bibliotheken. Benutzer können sich über das Actions-Menü bei SharePoint 2007 bzw. die Ribbon-Leiste bei SharePoint 2010 bei Listen und Dokumentbibliotheken für Benachrichtigungen anmelden und aus einer Vielzahl von Optionen auswählen. In diesen Optionen kann ein Benutzer u.a. auch auswählen, wann er per Mail benachrichtigt werden möchte. Auswahlmöglichkeiten sind hier: sofort, tägliche Zusammenfassung und wöchentliche Zusammenfassung.

SharePoint verwendet für die Benachrichtigungsfunktion sogenannte Alerttemplates. In diesen Alerttemplates ist u.a. beschrieben, wie die die Benachrichtigungsmail aufgebaut und wie diese in HTML formiert werden soll. Wie man Einfluss auf diese Formatierung nehmen kann (also z.B. das eigene Firmenlogo in die Benachrichtungsmails integrieren), habe ich  zusammen mit einem Kollegen im Artikel “Wunschgemäß alarmiert” in der Ausgabe 03/2010 des SharePoint-Magazins ausführlich beschrieben.

Neben dem Einfluss auf die Formatierung kann man aber auch direkten Einfluss auf die Emails bzw. deren Inhalt nehmen. Dies kann z.B. dann sinnvoll sein, wenn man Änderungen an der E-Mail (also z.B. am Text) unmittelbar vor dem Senden der Benachrichtigungsmail vornehmen möchte.  Auch hierzu müssen Änderungen am Alerttemplate vorgenommen werden – allerdings sind diese in diesem Fall nicht so kompliziert, wie im Artikel beschrieben.

Um Benachrichtigungsmails abzufangen, bietet das SharePoint-API die Klasse IAlertNotifyHandler an. Um also Benachrichtigungsmails abzufangen, erstellt man eine eigene Klasse, die von IAlertTemplate abgeleitet ist und überschreibt die Methode OnNotification(). Interessant ist der Parameter SPAlertHandlerParams. Über SPAlertHandlerParams.body hat bekommt man Zugriff auf den ursprünglichen Mail-Text. Dieser Mail-Text ist bereits für die betreffende Liste und die ausgelöste Benachrichtigungsart (sofort, tägliche Zusammenfassung, wöchentliche Zusammenfassung) formatiert. Da die Mails vor dem eigentlichen Senden abgefangen werden, muss der eigene Handler auch das Sender der Mails übernehmen – mit SPUtility.SendMail() sollte das aber kein Problem sein.

Mit dieser Klasse und dem Parameter SPAlertHandlerParams kann man also nun einen eigenen Handler programmieren, der die Standard-Benachrichitigungsmails abfangen und manipulieren kann. An dieser Stelle ein kleiner Hinweis zum debuggen: nicht wie sonst üblich mit dem Workerprozess, sondern mit dem OWSTimer verbinden. Und noch ein kleiner Hinweis: auch wenn man z.B. zum Testen die Einstellung zum sofortigen Versenden (immediate) verwendet, sollte man sich in Geduld üben: es kann durchaus mal 5 Minuten dauern, bis SharePoint sofortige Benachrichtigungen erzeugt und verschickt!

Jetzt muss man nur noch dafür sorgen, dass der eigene Handler auch aufgerufen bzw. verwendet wird. Hierzu sind ein paar kleine Änderungen am Alerttemplate nötig. Dazu erstellt man sich zuerst eine Kopie des Standard-Alerttemplates, welches man im Hive unter TEMPLATE\XML in der Datei alerttemplates.xml findet. An dieser Stelle der deutliche Hinweis: niemals (never ever) Änderungen am Original vornehmen! In der Kopie der Standard-Alerttemplates sucht man nach dem Stichwort <Properties>. Dies findet man für jeden Listentyp einmal. Hier trägt man jetzt den eigenen Handler ein – beispielhaft könnte das also folgendermaßen aussehen:

<Properties>

<NotificationHandlerAssembly>MyCompany.Alerts.AlertHandler, Version=1.0.0.0, Culture=neutral, PublicKeyToken=6e40c27ce10b9f2a</NotificationHandlerAssembly> <NotificationHandlerClassName>MyCompany.Alerts.AlertHandler.AlertNotifyHandler</NotificationHandlerClassName> <NotificationHandlerProperties/>
</Properties>

Auf diese Weise werden Listentyp (also z.B. Generic List) und der eigene Notification Handler verbunden. Allerdings haben wir diese Änderungen (hoffentlich !!!) in einer Kopie der originalen Alerttemples gemacht. Wir müssen jetzt also SharePoint noch irgendwie deutlich machen, dass statt der Standard-Alerttemplates die geänderten eigenen AlertTemplates verwendet werden sollen.

Dies kann man auf zwei unterschieldlichen Wegen machen:

stsadm –o updatealerttemplates –url <url> (siehe hier: http://technet.microsoft.com/en-us/library/dd278299%28v=office.12%29.aspx)

Im Parameter –filename kann man den Namen der Kopie der Standard-Alerttemplates angeben. Gibt man stattdessen wieder den Namen der Standard-Alerttemples (Alerttemplates.xml) an, kann man wieder auf Standard zurückstellen (auch deswegen immer mit einer Kopie arbeiten!).

Man kann das aber auch wesentlich eleganter per Feature lösen. Im FeatureActivated() wird das neue AlertTemplate gesetzt und im FeatureDeactivating() wird auf das Standard-Template zurückgesetzt. Das könnte dann z.B. im FeatureActivated() so aussehen:

var webApp = properties.Feature.Parent as SPWebApplication;
var alertTemplates = new SPAlertTemplateCollection(webApp.WebService);
var alertsPath = SPUtility.GetGenericSetupPath(@"TEMPLATE\XML\MyAlertTemplates.xml");
alertTemplates.InitAlertTemplatesFromFile(alertTemplatesPath);

Zum Rücksetzen auf Standard-Einstellungen im FeatureDeactivating() ändert man einfach die letzte Zeile wie folgt:

alertTemplates.InitAlertTemplatesFromFile(null);

Im Blog von Robin Meuré findet sich dazu ebenfalls ein guter Artikel: http://blogs.msdn.com/b/rmeure/archive/2011/05/17/modifying-an-alert-e-mail-for-discussion-lists.aspx

Und im Blog des SharePoint Development Teams habe ich ebenfalls Informationen zu diesem Thema gefunden: http://blogs.msdn.com/b/sharepointdeveloperdocs/archive/2007/12/14/how-to-customizing-alert-emails-using-ialertnotificationhandler.aspx

Add to Technorati Favorites Delicious Bookmark this on Delicious

Bereitgestellt 22 Mai 2011 19:58 von Oliver Wirkus
Gespeichert unter: , ,