Die Projektzeiterfassung leidet meist darunter, dass man seinen Pflichten nicht nachkommt und seine Zeiten nicht pflegt. Das ist auch verständlich: Heutzutage muss sich der Anwender mit immer mehr Tools herumschlagen und ist beinahe mehr mit der Dokumentation seines Tuns als mit seiner Arbeit beschäftigt. Da wäre es doch schön, wenn man zwei Fliegen mit einer Klappe schlagen könnte – etwa, indem man die in Outlook eingetragenen Termine und mehr direkt in die Projektzeiterfassung überträgt.
Outlook bietet grundsätzlich nicht alles, was eine Projektzeiterfassung ausmacht: So kann man dort eigentlich keine Projekte festlegen und auch keine Tätigkeiten mit Aufgaben verknüpfen. Diese drei Elemente machen nämlich i,m Kontext dieses Beitrags die Erfassung von Projektzeiten aus: Zu einem Projekt gibt es mehrere Aufgaben und jede Aufgabe kann mit einer oder mehreren Tätigkeiten erledigt werden. Na gut, unter Outlook gibt es immerhin das Aufgaben-Element. Aber was ist mit Projekten und Tätigkeiten Wie bildet man diese nach und vor allem: Wie verknüpfen Sie diese miteinander
Kümmern wir uns zunächst um die Projekte. In einer Anwendung wie Outlook haben Projektinformationen eigentlich nichts zu suchen und auch der allgemeine Mitarbeiter braucht nur zu wissen, welche Aufgaben in Zusammenhang mit einem Projekt anfallen. Also reicht eine Möglichkeit aus, Projekte in irgendeiner Form aufzulisten und diesen Aufgaben zuzuweisen – denn die sind ja, wie oben besprochen, als einziges Element standardmäßig schon in Outlook vorhanden. Zu einem Projekt gehören mehrere Aufgaben. Welcher Analogieschluss lässt sich daraus für die Elemente von Outlook ziehen Aufgaben sind im Aufgabenordner enthalten. Ein Aufgabenordner kann aber, wie auch Mail- oder Kontaktordner, einen oder mehrere, auch hierarchisch verschachtelte Unterordner besitzen. Damit wäre das Projekte-Problem gelöst: Sie legen einfach im Aufgabenordner einen Unterordner namens Projekte an und in diesem für jedes Projekt einen weiteren Ordner.
Das sieht dann in der Ordnerliste von Outlook, die sich für solche Ansichten am besten eignet, etwa wie in Bild 1 aus. Diese Ansicht erhalten Sie über Ansicht|Navigationsbereich|Normal und anschließendes Anklicken des Eintrags Ordnerliste.

Bild 1: Projektordner und darin enthaltene Aufgaben
Hat man einmal ein paar Projektordner angelegt, kann man direkt die passenden Aufgaben – natürlich inklusive geplantem Fertigstellungsdatum – dort ablegen. Projekte, Aufgaben … fehlen noch die Tätigkeiten. Eine Tätigkeit ist ein Element, das durch die Beschreibung der Tätigkeit selbst sowie weitere Informationen, vornehmlich Start- und der Endzeit, gekennzeichnet ist. Richtig – die Beschreibung passt genau auf einen Outlook-Termin. Im Betreff legen Sie eine überschrift fest, in der Beschreibung gegebenenfalls weitere Informationen, und zwei weitere Felder dienen zum Eingeben des Start- und des Endzeitpunkts, aus denen man letztlich die Dauer ermittelt.
Das einzige Problem ist, dass sich ein Termin nicht so leicht einer Aufgabe zuordnen lässt wie eine Aufgabe einem Projektordner. Die Lösung dieses Problems betrachten wir jedoch weiter unten. Bis dahin sei zumindest verraten, wie der Benutzer Termine beziehungsweise Tätigkeiten anlegen kann, die mit einer bestimmten Aufgabe verknüpft sind: Er wechselt dazu von der in Bild 1 gezeigten Ansicht mit einem Klick auf die Schaltfläche Kalender des Navigationsbereichs und aktiviert dann mit Ansicht|Aufgabenleiste|Normal die Aufgabenleiste. Diese zeigt je nach Einstellung beispielsweise die demnächst fertig zu stellenden Aufgaben an, was in diesem Fall Voraussetzung ist (siehe Bild 2): Eine solche Aufgabe lässt sich nämlich per Drag & Drop mit der Maus auf den Zeitplan des aktuellen Tages ziehen und übernimmt einige Eigenschaften in Textform in die Terminbeschreibung (siehe Bild 3). Der Termin hat nun einen oberflächlichen Bezug, aber keine wirkliche Beziehung zu der Aufgabe, aus der er entstanden ist.

Bild 2:
Neue Tätigkeiten legen Sie durch Ziehen von Aufgaben in den Kalender an.

Bild 3: Ein Termin, der durch Ziehen einer Aufgabe in den Kalender erzeugt wurde.
Synchronerfassung
Bis jetzt hat der Beitrag noch nicht viel mit Access zu tun, was sich nun ändern wird: Wie Sie vielleicht wissen, ist Outlook zwar gut in der Erfassung von Terminen, Kontakten et cetera, aber es bringt zum Beispiel keine Werkzeuge mit, um die im Verlauf eines Tages oder eines Projekts angefallenen Daten auszuwerten und gegebenenfalls in Druckform aufzubereiten (es kann prima Terminpläne und Telefonlisten drucken, aber das ist ein anderes Thema).
Hier kommt Access ins Spiel: Wenn man schon die ganzen Projektzeit-Daten in Outlook erfasst, muss es doch einen Weg geben, diese gleichzeitig in die Tabelle einer passenden Datenbank zu schreiben, die Sie unter dem Namen Projektzeiterfassung.mdb in den Beispieldateien zu diesem Beitrag finden.
Voraussetzungen/Vorbereitung
Outlook 2007 ist ein Muss für den Einsatz dieser Anwendung, da es einige Objekte und Ereigniseigenschaften mit sich bringt, ohne die das automatisierte Nachverfolgen der änderungen an Projektordnern, Aufgaben und Tätigkeiten und das damit verbundene Eintragen der Daten in eine Datenbank nicht möglich wäre. Es gibt aber noch weitere Voraussetzungen:
- Sie importieren die vier Module ThisOutlookSession.cls, clsTasks.cls, mdlGlobal.bas und mdlOutlook.bas in das VBA-Projekt. Den Inhalt von ThisOutlookSession.cls kopieren Sie komplett in die gleichnamige standardmäßig vorhandene Klasse (in deutschen Versionen könnte ihr Name auch DieseOutlookSitzung heißen). Zum Importieren ziehen Sie einfach die passenden Dateien aus dem Windows Explorer in den Projekt-Explorer im VBA-Editor von Outlook (Strg + R).
- Sie müssen für das Outlook-VBA-Projekt einen Verweis auf die passende DAO-Bibliothek festlegen.
- Stellen Sie die Konstante cStrDB auf den Pfad der Datenbank Projektzeiterfassung.accdb/.mdb ein.
- Stellen Sie die Sicherheitseinstellungen von Outlook so ein, dass es die Ausführung von Makros zulässt!
- Sie sollten alle, aber auch wirklich alle Routinen mit einer Fehlerbehandlung ausstatten. Hilfe bietet Ihnen dabei die Toolsammlung MZ-Tools (siehe auch Beitrag Programmierhilfe, Shortlink 450). Die beim Start von Outlook in der Ereignisprozedur Application_Startup instanzierten Variablen werden nämlich bei unbehandelten Fehlern geleert; somit erfolgt im Anschluss kein übertragen der Daten von Projektordnern, Aufgaben und Tätigkeiten an die Datenbank mehr. In den Beispielmodulen können Sie sich ansehen, wie eine vollständige Fehlerbehandlung aussieht.
Outlook 2007 bietet immerhin einige Ereignisse, die mit den verschiedensten Ordnern und Elementen zusammenhängen und – so viel sei vorweggenommen – teilweise nicht ganz unkompliziert sind. Nun denn: Schauen wir uns an, was denn bei Verwendung des Projektzeiterfassungs-Frontends namens Outlook so alles erfasst werden müsste:
- Wenn der Benutzer ein neues Projekt (sprich: einen Aufgabenordner) anlegt, sollte dieses ebenfalls in der Tabelle tblProjekte gespeichert werden. Andersherum wäre ein automatisches Anlegen des passenden Ordners beim Hinzufügen eines Projektdatensatzes in der Datenbank sinnvoll.
- In beiden Fällen sollte man eine Beziehung herstellen – etwa in Form einer gemeinsamen ID. Dazu verwendet man praktischerweise die ID des Access-Datensatzes, die noch an geeigneter Stelle im Outlook-Ordner gespeichert werden muss. Mangels Alternativen kommt hier die Eigenschaft Beschreibung (VBA: Description) zum Zuge. Beim Anlegen des Projekts in der Datenbank sollte diese Eigenschaft also die neue ProjektID erhalten.
- Eine neue Aufgabe innerhalb eines Projekts legt der Benutzer beispielsweise an, indem er den Projektordner markiert und doppelt auf die Aufgabenliste klickt. Diese Aufgabe sollte ebenfalls in Form eines Datensatzes der Tabelle tblAufgaben in der Datenbank verewigt werden. Auch hier gilt: Die Aufgaben-ID des neuen Datensatzes soll mit dem passenden Outlook-Element gespeichert werden. Glücklicherweise besitzen alle Elemente wie Mails, Termine oder Aufgaben die BillingInformation-Eigenschaft, die sonst wohl nie benötigt wird. Also schreibt man die Aufgaben-ID hier herein.
- Fehlt noch der Bezug zum Projekt: Natürlich muss beim Anlegen der Aufgabe auch die ID des passenden Projekts berücksichtigt und in der Tabelle tblAufgaben gespeichert werden.
- Legt der Benutzer auf oben genannte Weise eine neue Tätigkeit an, wird diese natürlich ebenfalls in der Datenbank gespeichert und zwar in der Tabelle tblTaetigkeiten. Die Tätigkeits-ID des neuen Datensatzes findet wiederum Platz in der BillingInformation-Eigenschaft. Schwierig wird es hier, die Beziehung zwischen Tätigkeit und Aufgabe herzustellen, also die Aufgabe zu ermitteln, auf der die Tätigkeit basiert.
Dies sind die Aktionen, die beim Anlegen von Elementen zu beachten sind. Es gibt noch eine Reihe weiterer Aktionen, die etwa durch das ändern, Verschieben oder Löschen von Elementen ausgelöst werden. Dies sind im Einzelnen:
- Umbenennen eines Projektordners: Aktualisieren von tblProjekte
- ändern von Eigenschaften einer Aufgabe: Aktualisieren von tblAufgaben
- ändern von Eigenschaften einer Tätigkeit: Aktualisieren von tblTaetigkeiten
- Verschieben einer Aufgabe in einen anderen Ordner: Aktualisieren von tblAufgaben
- Löschen eines Projektordners: Führt nicht zum Löschen eines Datensatzes, sondern zum Eintragen des Löschdatums in ein geeignetes Feld des Datensatzes. Sollte nur möglich sein, wenn der Projektordner keine Aufgaben enthält.
- Löschen einer Aufgabe: wie bei Projekten. Sollte nur möglich sein, wenn es keine korrespondierenden Tätigkeiten zur Aufgabe gibt.
- Löschen einer Tätigkeit: wie bei Projekten
Ereignisreich