25.09.2005, 01:44 Uhr
Add-Ins für Outlook programmieren
Mit Hilfe der neuesten Erweiterung von VSTO für Outlook wird die Entwicklung von Outlook-Add-Ins auf Basis von .Net zu einem Kinderspiel. Von Jörg Freiberger, Peter Schleritzko *
Auf der letzten europäischen Ausgabe der TechEd Anfang Juli 2005 hat Microsoft endlich die Erweiterung von VSTO für Outlook angekündigt. Damit wird die Entwicklung von Outlook-Add-Ins mit Hilfe der Visual Studio 2005 Tools for Office (VSTO) kinderleicht. Als Entwickler konnte man zwar schon immer Erweiterungen für Office mit Visual Studio bauen; bisher war es jedoch eine mittelschwere Hürde, anstelle von COM ein .NET-basiertes Add-In zu verteilen. Mittlerweile sollte die Verbreitung von .NET kein Hindernis mehr darstellen, und VSTO repräsentiert ein hervorragendes Werkzeug, um Daten in einen Office-Workflow auf Enterprise-Ebene einzubinden (siehe auch Artikel «Anwendungen mit Office 2003», Developerworld 03/2005).
Installation und Deployment
Bereits seit Juni liegt VSTO für Outlook 2003 in einer Beta-Version vor und ist im Download-Center auf der Microsoft Homepage zu finden. Für eine erfolgreiche Installation müssen dem System Visual Studio 2005 Beta 2, VSTO Beta 2 und Office Professional 2003 SP1 oder nur Outlook 2003 SP1 vorab eingerichtet werden. Bei den Betriebssystemen wird Windows 2000 Professional, Windows Server 2003 oder Windows XP benötigt. Wie auch die bisher bekannte Version von VSTO 2005 bietet das zusätzliche Package für Outlook reichhaltige Unterstützung für Entwickler von Office- beziehungsweise Outlook-Anwendungen. Zu den Leistungsmerkmalen gehören unter anderem die gute Debugging-Unterstützung, gute Möglichkeiten zur Fehlerbehandlung, ein starkes Sicherheitssystem (basierend auf .NET Code Access Security) und gute Integration in Deployment-Projekte. Nach erfolgreicher Installation kann in Visual Studio 2005 beim Anlegen eines neuen Projekts die Vorlage «Outlook Add-In» ausgewählt werden. Die IDE erzeugt dann eine Solution mit zwei Projekten: das eigentliche Add-In-Projekt und ein Setup-Projekt. Das Setup-Projekt wird benötigt, um das Add-In später verteilen zu können. Hier wird eine msi-Datei generiert, die entsprechende Einträge in der Registrierung des Betriebssystems vornimmt und das eigentliche Add-In installiert. Bei der Installation ist allerdings darauf zu achten, dass alle notwendigen Komponenten auf dem Zielrechner vorhanden sind. Dies sind im Einzelnen:
1. .NET Framework 2.0
2. Outlook 2003 inkl. SP1
3. Outlook 2003 Primary Interop Assemblies (PIA)
4. VSTO Runtime
5. Angepasste Code Access Security (CAS) Policy
6. Das Add-In selbst und natürlich alle abhängigen Komponenten, Registrierungseinträge und eventuelle Manifest-Dateien
1. .NET Framework 2.0
2. Outlook 2003 inkl. SP1
3. Outlook 2003 Primary Interop Assemblies (PIA)
4. VSTO Runtime
5. Angepasste Code Access Security (CAS) Policy
6. Das Add-In selbst und natürlich alle abhängigen Komponenten, Registrierungseinträge und eventuelle Manifest-Dateien
Die Punkte 2, 3 und 5 werden vom Setup-Projekt nicht abgedeckt. Aber das Setup umfasst die Installation der VSTO Runtime (Punkt 4), wenn diese auf dem Zielrechner nicht vorhanden sein sollte. Das explizite Einrichten der CAS Policy und - damit verbunden - das Einstellen des FullTrust-Levels für jedes zu installierende Add-In ist ebenfalls in einem separaten Schritt durchzuführen.
Gegen Outlook-Objektmodell
An den gezeigten Arbeitsschritten für das Deployment ist schon anzumerken, dass mit der Verteilung und Installation eines VSTO Outlook-Add-Ins mehr Aufwand verbunden ist als mit der eigentlichen Implementierung. Das Outlook-Package für VSTO ist keine Erweiterung der Programmierschnittstelle von Outlook selbst. Ein Entwickler muss nach wie vor gegen das Objektmodell von Outlook programmieren. Das bedeutet aber auch, dass man bezüglich der Integration in Outlook weiterhin den Einschränkungen dieses Objektmodells unterliegt. Dieses bietet jedoch umfangreiche Möglichkeiten, um zum Beispiel E-Mails zu erzeugen, Kontakte anzulegen, Tasks zu generieren, Events zu behandeln, HTML-Verzeichnisansichten (Folder views) zu erzeugen oder neue Menüeinträge hinzuzufügen.
Erweitertes Event-Handling
In der Vergangenheit musste man beim Schreiben von Add-Ins das Interface IDTExtensibility2 implementieren. Dieses «alte» Interface bot fünf Ereignisse (Events): On-Connection, OnAddInsUpdate, OnStartup- Complete, OnBeginShutdown und OnDisconnection. Dies hat sich in der neuen Version vereinfacht, denn hier werden lediglich zwei klare und sinnvolle Ereignisse angeboten: Startup und Shutdown.
Startup- und Shutdown-Event werden durch das neue Interface IStartup definiert. Damit kann der Startup-Code genau dort geschrieben werden, wo er auch hingehört; gleiches gilt für den Shutdown-Code. Der jeweilige Code ist also nicht über fünf Ereignisbehandlungsroutinen verteilt. Ausserdem feuern die beiden Events zuverlässiger, und damit kann man auch auf das Verhalten des eigenen Add-Ins zu einem höheren Grad vertrauen.
Im eigenen Code kann selbstverständlich auch auf andere Events reagiert werden. Durch das Abfangen und Verwerten dieser Events erlaubt VSTO 2005 eine Implementierung von Arbeitsprozessen in Outlook. So kann beispielsweise das ItemSend-Event benutzt werden, um eine E-Mail vor dem Verschicken zu analysieren und gegebenenfalls den Sendevorgang abzubrechen. Es stehen weitere, diverse Events zur Verfügung, wie etwa die Erkennung von eintreffenden EMails oder eine erfolgreiche Authentifizierung von Outlook am Exchange Client. Für einzelne Outlook-Objekte können objekteigene Events erstellt werden. So können zum Beispiel beim Hinzufügen von Attachments an E-Mails spezifische Aktionen ausgeführt oder die Aktion gestoppt werden:
Das Geburtstags-Add-in
Das folgende Codebeispiel ist ein Add-In für Outlook 2003, das mit Visual Studio 2005 erstellt wurde. Hier werden alle Kontakte durchsucht, um die Personen zu finden, die heute oder in naher Zukunft Geburtstag haben. Für die gefundenen Personen kann anschliessend eine Geburtstags-E-Mail generiert werden.
Im Beispiel werden für die beiden zentralen Events Startup und Shutdown entsprechende Event Handler registriert, die das Add-In aktivieren beziehungsweise wieder deaktivieren:
Das (Listing 1) zeigt, wie das Geburtstags-EMail generiert wird. Der HTML-Code für den Text der E-Mail wird an anderer Stelle in einem Ressource File hinterlegt. Die _contact Variable ist ein Outlook.ContactItem-Objekt.
Die Suche nach den Geburtstagskontakten ist in (Listing 2) dargestellt. Innerhalb der gezeigten Methode werden mehrere aufeinander aufbauende Aktionen ausgeführt. Zuerst wird eine Instanz eines Outlook.MAPIFolder-Objekts angelegt. Dieses Objekt repräsentiert den Ordner Kontakte in Outlook. Innerhalb einer Schleife werden dann alle Kontakte einzeln untersucht. In einem foreach-Statement wird gecheckt, ob für den aktuellen Kontakt überhaupt ein Geburtstag eingetragen ist, und wenn ja, ob dieser Geburtstag heute oder in naher Zukunft ist. Der relevante Zeitraum kann beim Aufruf der Methode als Parameter übergeben werden. Zur Suche wird das Birthday-Attribut des jeweiligen Kontakts verwendet (Screen 1). Die Ausführung dieser Logik wird durch den Klick auf einen speziellen Geburtstags-Button initiiert. Dieser Button wird in einem speziellen Ergebnisfenster in einer zusätzlichen Toolbar dargestellt. Hierbei ist darauf zu achten, dass eine Outlook Session durchaus aus mehreren Explorern bestehen kann. So kann ein angemeldeter Benutzer beispielsweise durchaus zwei Outlook-Fenster gleichzeitig geöffnet haben - wobei man dann natürlich auch zwei Explorer-Instanzen hat. Hier wird für jeden Explorer ein Geburtstags-OLButton-Objekt angelegt, welches durch die Methode Activate zu dem Outlook-Fenster hinzugefügt wird. Dies ist im Startup Event Handler implementiert:
Wird ein Outlook-Fenster geschlossen, dann wird das dafür instanzierte Geburtstags-Ol-Button-Objekt wieder deaktiviert. Die in Listing 3 gezeigte Methode Activate verdeutlicht das Vorgehen beim Aktivieren des Add-Ins.
Fazit
Die Unterstützung für Outlook mittels VSTO 2005 erhöht die Produktivität von Entwicklern von Outlook Add-Ins. In der Vergangenheit war dieses Unterfangen zwar nicht sehr kompliziert, doch es mussten komplexe, zusammenhängende Tasks durchgeführt werden, um eine brauchbare Umgebung während Design-, Debugging- und Laufzeit zu schaffen. Dies wird durch Visual Studio 2005 Tools for Microsoft Office System Outlook (Beta) stark vereinfacht, und VSTO für Outlook bettet sich dabei gut in das .NET-Framework und seine Leistungsmerkmale (inklusive Sicherheit) ein.
* Jörg M. Freiberger beschäftigt sich als Associate Principal Consultant bei Avanade mit .NET-Sicherheit, ASP.NET und Web Services.
* Peter Schleritzko arbeitet als Senior Associate Consultant bei Avanade im Bereich .NET Solution Development.
* Peter Schleritzko arbeitet als Senior Associate Consultant bei Avanade im Bereich .NET Solution Development.