Office-Integration mit VSTO 3.0
Artikel erschienen in Swiss IT Magazine 2008/08
Das Office-Paket hat nicht nur für Microsoft strategische Bedeutung, viele wenn nicht sogar die meisten Unternehmen haben seit vielen Jahren auf die Bürosoftware aus Redmond standardisiert. Selbst wenn Open Office & Co für Standardtätigkeiten im Büro eine Alternative sind, viele Fachanwendungen nutzen Office-Makros und andere Spezialitäten, für die es in der Open-Source-Welt keinen Ersatz gibt, so dass an Microsoft-Office kein Weg vorbeigeht.
Microsoft weiss um diese Abhängigkeit und spielt sie geschickt bei der Planung künftiger Versionen aus. Neue Integrationstechniken wie die Visual Studio Tools for Office (VSTO) setzen auf Office 2003 und 2007, ältere Versionen bleiben aussen vor. Positiv ist hingegen, dass die VSTO keine geschlossene Technik sind, sondern konsequent auf dem .NET Framework 3.5 aufsetzen und lediglich als Brücke zwischen der funktional inzwischen sehr reichhaltigen .NET-Welt und der nach wie vor auf dem Vorläufer COM basierenden Office-Welt fungieren.
Die wichtigsten Neuerungen bei den VSTO 3.0
Die VSTO sind ein Satz von Vorlagen, mit denen sich Erweiterungen sowohl auf Dokument- als auch Anwendungsebene umsetzen lassen. Diese werden durch eine Laufzeit ergänzt, welche unter anderem einen Satz von Host-Controls zur Verfügung stellt, mit der beispielsweise ein Excel-Range- oder ein Word-Bookmark-Objekt um zusätzliche Events und Datenbindung erweitert wird. Die VSTO sind fester Bestandteil von Visual Studio 2008 Professional und Team System 2008 und kein separates Produkt mehr wie bei früheren Versionen. Während bei Office 2003 noch die Professional Edition Voraussetzung dafür ist, dass sich VSTO-Erweiterungen laden lassen, darf es bei Office 2007 nun jede Edition sein. Dazu zählt auch die in Unternehmen verbreitete preiswerte Small-Business-Edition.
Die VSTO erweitern Visual Studio um eine bunte Vielfalt an Vorlagen. Bei näherer Betrachtung stellt sich heraus, dass es drei Sorten von Vorlagen gibt:
- Add-in-Vorlagen für praktisch alle Office-2003- und 2007-Anwendungen
- Vorlagen für Dokumenterweiterungen in Excel und Word
- Workflow-Vorlagen für die Windows SharePoint Services 3.0 (WSS) und den darauf aufsetzenden Office SharePoint Server 2007 (MOSS).
Die Add-in-Vorlagen vereinfachen die Entwicklung von COM-Add-ins deutlich, besitzen aber eine Besonderheit, die am Anfang oft übersehen wird. Sie beziehen sich stets auf eine bestimmte Office-Anwendung und Version. Soll ein Add-in unter mehreren Office-Anwendungen zur Verfügung stehen, muss pro Anwendung ein eigenes Projekt angelegt werden. Die nach wie vor zur Verfügung stehenden Shared-Add-ins bieten zwar etwas weniger Komfort, stehen dafür aber in jeder der zu Beginn ausgewählten Office-Version als auch unter Office 2003 sowie 2007 gleichermassen zur Verfügung.
Die mit Office 2007 eingeführten Multifunktionsleisten (Ribbons) sind bei Office 2007 keine Option. Erweiterungen, die über die Multifunktionsleiste steuerbar sein sollen, müssen diese erweitern. Was ohne die VSTOs eine nicht ganz triviale Aufgabe ist, da ein XML-Dokument angelegt werden muss, das in die Dokumentstruktur des Office-2007-Dokuments integriert wird, wird mit den VSTOs zu einem Kinderspiel. Es stehen zwei Templates zur Auswahl.
Das eine basiert auf einer XML-Vorlage, in die die Struktur der Erweiterung direkt im XML-Code eingegeben wird. Das andere basiert auf einem komfortablen Designer, der durch ein RibbonID-Toolwindow als Teil der neuen VSTO PowerTools ergänzt wird, das aber anscheinend nur in einem englischen Visual Studio funktioniert. Die erforderlichen Callback-Prozeduren werden in beiden Fällen in eine begleitende Codebehind-Datei eingegeben. Einfacher kann die Entwicklung nicht mehr sein. Wird ein Office-2003-Dokument geladen, das die Befehlsleiste erweitert, erscheint die Erweiterung in der Add-ins-Gruppe. Dazu noch ein kleiner Tip: Die Gruppe Entwicklertools, die unter anderen den VBA-Makrorekorder enthält, muss explizit sichtbar gemacht werden.
Bei VSTO-Anwendungen galt in der Vergangenheit die Erfahrungsregel, dass sie in zwei bis drei Tagen entwickelt werden, es aber zwei bis drei Wochen dauert, bis man herausgefunden hat, wie sie zuverlässig auf andere Arbeitsplatzrechner verteilt werden. Die grosse Herausforderung bestand darin, dass eine VSTO-2.0-Erweiterung nur dann ausgeführt wurde, wenn für die Assembly (und teilweise auch für das Dokument) eine Full-Trust-Berechtigung im Rahmen der Codezugriffsicherheit (CAS) eingerichtet wurde. Auch wenn die Aufgabe lösbar war, stellte sie viele Entwickler vor eine grössere Herausforderung, zumal in den Verteilprozess oft auch der Administrator miteinbezogen werden musste, wenngleich es am Ende darauf hinauslief, dass entweder ein MSI-Paket mit der Sicherheitsrichtlinie oder ein MSI-Paket mit der kompletten Anwendung verteilt werden musste.
Bei den VSTO 3.0 spielt CAS keine Rolle mehr, zumindest
wenn es um eine Office-2007-Erweiterung geht. Microsoft hat den ClickOnce-Mechanismus dahingehend erweitert, dass er auch mit Assembly-Bibliotheken funktioniert. Jede VSTO-Anwendung wird mit einem Auslieferungsmanifest (Erweiterung .vsto) und ein Anwendungsmanifest (Erweiterung .manifest) ausgeliefert. Das Auslieferungsmanifest beschreibt die Art des Deployment, das Anwendungsmanifest unter anderem die Abhängigkeiten und den Umstand, dass das Assembly Full-Trust-Berechtigung erfordert. Beide Manifestdateien werden beim Bereitstellen der Anwendung mit einem Zertifikat digital signiert.
Da Office 2007 das Auslieferungsmanifest lädt und nicht mehr die Assembly, findet die Authentifizierung auf der Ebene der Manifestdatei statt. Auf dem Ziel-PC muss dem Zertifikat, mit dem das Manifest signiert wurde, vertraut werden (alternativ gibt es die Möglichkeit, die Erweiterung in eine in der Registry gehaltene Inclusion-List aufzunehmen). Das Deployment einer VSTO-3.0-Anwendung besteht darin, dass alle für die Installation benötigten Dateien in ein Installationsverzeichnis kopiert werden (über das Tool mageui.exe kann die Manifestdatei editiert und anschliessend erneut signiert werden, um weitere Dateien aufzunehmen). Der Anwender startet die VSTO-Anwendung entweder direkt über die Dokumentdatei oder indirekt über die VSTO-Datei. Dabei wird die Assembly in den lokalen ClickOnce-Cache kopiert und dort geladen. Liegt das Dokument auf einem Netzwerkverzeichnis, muss dieses in den Optionen der Office-2007-Anwendungen in die Liste der vertrauenswürdigen Speicherorte hinzugefügt werden, sonst funktioniert es nicht. Einfacher kann das Deployment von VSTO-Anwendungen vermutlich nicht mehr werden, insbesondere, wenn im Unternehmen bereits eine Zertifikatinfrastruktur existiert.
Auch wenn es zwischen VSTO und SharePoint keine direkte Beziehung gibt, enthalten die VSTO 3.0 je eine Vorlage für einen sequentiellen und einen State-Machine-Workflow. Der grosse Vorteil gegenüber einem regulären Workflow-Projekt ist das stark vereinfachte Deployment, denn mit dem Drücken von [F5] wird die Assembly-Datei mit dem Workflow bei SharePoint registriert und der IIS zurückgesetzt.
Visual Basic for Applications (VBA) wurde bereits öfters totgeschrieben, befindet sich aber nach wie vor in einem lebendigen Zustand. Viele Unternehmen, vor allem in der Schweiz, nutzen intensiv Access- und Excel-Erweiterungen auf der Basis von VBA und haben nicht vor, in den nächsten Jahren daran etwas zu ändern.
Die VSTOs sind nicht der Nachfolger von VBA, sondern lediglich ein weiteres Angebot für die Entwicklung von Unternehmens-Anwendungen, bei denen eine Office-Anwendung die Rolle des Frontend spielt. Die mit Office 97 eingeführte VBA-Unterstützung wird es mit an Sicherheit grenzender Wahrscheinlichkeit auch beim kommenden «Office 14» geben und vermutlich auch darüber hinaus. Lediglich weiterentwickelt wird es nicht mehr (und das bereits seit Office 2000). Mit den aktuell im Trend liegenden dynamischen Programmiersprachen hat man in Redmond auch das Thema «VBA.NET» wieder aufgegriffen. Es könnte daher durchaus sein, dass die nächste oder übernächste Office-Version ein integriertes Visual Studio mit Visual Basic als «Makrosprache» enthält und VBA-Makros beibehalten oder mit wenig Aufwand konvertiert werden könnten. Davon würden alle profitieren, denn Auswahl ist bekanntlich eine gute Sache.