logo domkeconsulting

Beratung und Entwicklung - Mehr Produktivität für Microsoft Office

Ein typisches Beispiel für Office Automatisierung mit C#

Dieses Projekt ist ein typisches Beispiel dafür, wie Word, Excel und Outlook durch eine Windows Forms Anwendung automatisiert werden können. Programmiert unter C# 4.0 mit einer Prise aus der Redemption Bibliothek.

Aufgaben

In einer Rechtsanwaltsfirma sollen die Verarbeitung der Fremdgeldzahlungen automatisiert werden. Der Arbeitsablauf verbindet die Buchhaltung (wo die Zahlungseingänge aufgrund des Betreffs einer Akte zugeordnet werden), die Allgemeine Verwaltung (die den Prozess überwacht), und die einzelnen Anwälte, die die Akte bearbeiten und allein über das endgültige Ziel der Zahlung entscheiden).

Zukünftig soll der Workflow über SharePoint oder ein anderes System abgewickelt werden. Für die kommenden zwei bis drei Jahre aber würde eine schnelle und preisgünstige Lösung von großem Nutzen für die Allgemeine Verwaltung sein, die zur Zeit manuell Word Formulare erstellt und per E-Mail versendet.Somit werden folgende Anforderungen formuliert:

Es ist eine Anwendung zu erstellen, die den manuelle Prozess in Word, Excel und Outlook abbildet und beschleunigt. Zum Zeitpunkt des Prototypen wird Office 2003 eingesetzt, aber die Planungen für den Office 2010-Rollout sind im Gange; die Anwendung soll mit beiden Versionen funktionieren.

  • Verwende eine vorhandene Datenbank, um die E-Mail-Adressen der Anwaltssekretariate zu ermitteln
  • Speichere die Word-Formulare im vorhandenen Dokumenten-Management-System (Interwoven) ab, und erstelle Link-Dateien, die dann statt der Dokumente als E-Mail-Attachments versendet werden
  • Versende E-Mails automatisch ohne den Benutzer zu belasten
  • Lege ein Log aller Transaktionen an und informiere den Benutzer über Datenfehler
  • Erstelle ein MSI Setup
  • ... und verlange nur ein bescheidenes Budget  ... und sei fertig vergangene Woche ...

UML Paket Diagramm

Lösung

Eine Windows Forms Anwendung wurde erstellt unter Verwendung von C# 4.0 als Programmiersprache. Die Bibliothek "Redemption" von Dmitry Streblechenko wurde benutzt, um die E-Mail-Erstellung in Outlook zu erleichtern (siehe www.dimastr.com). Zusätzlich nutze ich die Bibliothek NLog (http://nlog-project.org) für Tracing und Fehler-Logs.

Es gibt ein einfache Benutzerschnittstelle, in der der Benutzer die Excel-Quelldatei auswählen und den Prozess starten kann. Alle einzelnen Arbeitsschritte werden durch "BackgroundWorker" Komponenten übernommen, damit das UI den jeweiligen Stand anzeigen kann und nicht einfriert (somit kann der Benutzer die Verarbeitung auch abbrechen):

Details

Projektaufwände

Das gesamte Projekt benötigte 120 Stunden für Planung, Entwicklung, Administrative Aufgaben und für die Änderungen nach dem Prototypen. Dabei fielen mindestens 40 Stunden für Change Requests und zusätzliche Aufgaben an, die ursprünglich nicht vorgesehen waren. Auf der anderen Seite konnte ich Zeit sparen durch die Nutzung von Code-Fragmenten, die sich anderen Projekten verdanken (z.B. die Nutzung des Interwoven API und die Einbindung/Konfiguration der NLog-Bibliohek).

Nutzen

Die Anwendung wird vom IT Management nicht wirklich geschätzt aus folgenden Gründen: "Wird doch nur von einer Handvoll Benutzer eingesetzt", und "Ist nur eine lokale Anwendung, die gar nicht in's große Bild passt". Aber der Zeitgewinn für diese Handvoll Benutzer ist groß, da sie nicht mehr manuell Daten von A nach B schaufeln müssen. Es wurde geschätzt, dass ca. 3 bis 4 Wochenstunden in der Allgemeinen Verwaltung gespart werden. Somit wurde der Break-Even nach ca. 30 Wochen erreicht.

Einige Details über die Struktur der Anwendung

Die Anwendung ist wie üblich objektorientiert aufgebaut.

  • Die Klasse MainController strukturiert den Ablauf der Einzelaufgaben und überwacht die Benutzereingaben.
  • Sie prüft die Arbeitsumgebung, erstellt Temp-Verzeichnisse, prüft die SQL Server-Datenbankverbindung, und testet, ob der Benutzer sich mit allen Servern/Bibliotheken des DMS verbinden kann. Dann startet die Bearbeitung.
  • Die Klasse ExcelWorker startet eine neue Instanz von Excel (im Hintergrund), lädt die Quelldatei (eine Excel-Arbeitsmappe). Sie prüft, ob die Datei der Spezifikation entspricht, und liest den Bereich UsedRange aus Blatt #1. Jede Zeile der Excel-Datei entspricht einem Datensatz. Alle Datensätze werden in Objekte der Klasse TrustRecord übertragen und einem List-Objekt hinzugefügt. Dann wird Excel wieder geschlossen.
  • Die Klasse DatabaseWorker verbindet zur SQL Server-Datenbank. Sie durchläuft die Liste der TrustRecord-Objekte, entnimmt die Anwalts-ID und fragt die jeweils hinterlegten Sekretariatsadressen ab.
  • Die Klasse WordWorker startet eine unsichtbare Instanz von Word (so dass der Benutzer in seiner Arbeit nicht unterbrochen wird, sollte er zufällig schon Dokumente in Bearbeitung haben). Sie durchläuft ebenfalls die Liste der TrustRecords, und erstellt für jeden Datensatz ein Word-Dokument. Als Vorlage dient eine Word-Datei im Programmverzeichnis der Anwendung. Alle Word-Dokumente werden mit temporären Dateinamen im Temp-Verzeichnis gespeichert. Die Word-Sitzung wird geschlossen.
  • Die Klasse DMSWorker durchläuft die Liste der TrustRecords, ruft für jeden Datensatz die Mandanten- und Aktennummer ab, erstellt dafür einen neuen Eintrag in der DMS-Bibliothek des Standorts, in dem die Akte geführt wird, lädt die Word-Datei auf den DMS-Server hoch und erstellt eine Linkdatei dafür. Diese wird im Temp-Verzeichnis abgelegt.
  • Die Klasse EmailWorker stellt eine Verbindung zum Ordner "Postausgang" im MAPI-Profil des angemeldeten Benutzers her unter Verwendung der Redemption RDO Objekte. Auch diese Klasse durchläuft die Liste der TrustRecords, erstellt für jeden Datensatz eine neue E-Mail, fügt den/die Empfänger an, fügt den E-Mail-Body aus einer Vorlage ein, fügt die Link-Datei als Anhang an, und sendet die E-Mail. Dies geschieht unabhängig davon, ob Outlook läuft oder nicht.
  • Zum Schluß wird das Protokoll erstellt (als Excel-Tabelle) und ebenfalls im DMS abgelegt. Sollten Datenfehler festgestellt worden sein (z.B. fehlende E-Mail-Adressen), wird der Benutzer informiert und der Grund in das Protokoll geschrieben.

Wie üblich bei Anwendungen, die mit Office-Programmen "sprechen", müssen alle Referenzen sorgfältig aufgelöst werden, um Speicherfehler und Probleme zu vermeiden. Dies gilt besonders für Outlook.

Entwicklungswerkzeuge

Für die Versionskontrolle setze ich Mercurial Tortoise ein. Das MSI Setup erstelle ich mit WIX und nutze dafür MSIFactory von Indigo Rose Software.