Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.
In den vorherigen Teilen dieser Beitragsreihe haben wir den Aufbau einiger Funktionen eines Ticketsystems beschrieben. Es fehlt noch der letzte Feinschliff: Wir wollen die erneuten Antworten von Kunden auf unsere als Antwort versendeten E-Mails automatisch in die Ticketverwaltung aufnehmen. Bevor wir das im nächsten Teil erledigen können, haben wir in diesem Teil noch einige Feinheiten ergänzt und werfen außerdem noch einmal einen zusammenfassenden Blick über die bisher programmierten Funktionen und die Inbetriebnahme der Ticketverwaltung inklusive der Einrichtung in Outlook. Außerdem fügen wir noch einen Dialog zur Verwaltung der Optionen der Lösung hinzu.
Einrichtung des Ticketsystems
Um das Ticketsystem einzurichten, benötigen Sie zunächst die Access-Datenbank aus dem Download zu diesem Beitrag namens Ticketsystem.accdb. Außerdem sind kleine Anpassungen an Outlook erforderlich, genau genommen am VBA-Projekt von Outlook.
Einrichtung in Outlook
Es gibt einen kurzen und einen etwas umständlicheren Weg, die für das Ticketsystem nötigen Elemente in Outlook zu integrieren. Dabei brauchen wir einige Module. Diese können Sie einzeln zum aktuellen VBA-Projekt von Outlook hinzufügen. Das bietet sich an, wenn Sie bereits Änderungen am VBA-Projekt von Outlook vorgenommen haben. Wenn Sie jedoch eine jungfräuliche Instanz von Outlook nutzen, können Sie auch das komplette VBA-Projekt austauschen gegen das aus dem Download zu diesem Beitrag.
Outlook-VBA-Projekt austauschen
Wenn Sie das komplette VBA-Projekt für die Ticketverwaltung nutzen wollen, gehen Sie wie folgt vor:
- Navigieren Sie zur Datei VbaProject.OTM. Diese finden Sie beispielsweise im Ordner C:UsersUserAppDataRoamingMicrosoftOutlook.
- Benennen Sie die Datei VbaProject.OTM um, beispielsweise in _VbaProject.OTM.
- Fügen Sie dann die Datei VbaProject.OTM aus dem Download zu diesem Beitrag in das angegebene Verzeichnis ein.
- Anschließend starten Sie Outlook und fahren wie weiter unten unter Outlook starten beschrieben fort.
Module einzeln zu bestehendem VBA-Projekt hinzufügen
Wenn Sie Outlook starten und dann die Tastenkombination Alt + F11 drücken, öffnet sich der VBA-Editor von Outlook. In diesem finden Sie, wenn der Projekt-Explorer geöffnet ist, ein Projekt mit einem Unterordner Microsoft Outlook Objekte. Dieser Ordner stellt das Klassenmodul This-OutlookSession bereit. In diesem legen Sie eine neue Prozedur an, die wie in Bild 1 aussieht. Das erledigen Sie am einfachsten, indem Sie aus dem linken Kombinationsfeld des Codefensters den Eintrag Application und aus dem rechten Startup auswählen.
Bild 1: Anlegen der Prozedur, die beim Start von Outlook ausgelöst wird
Die einzige Anweisung dieser Prozedur soll eine weitere Prozedur namens Application_Startup_Ticketverwaltung aufrufen. Diese haben wir der Zip-Datei mit den Beispieldateien unter dem Namen mdlTicketverwaltung.bas untergebracht. Kopieren Sie dieses Modul aus der Zip-Datei mit den Beispieldateien in das VBA-Projekt von Outlook, damit die Prozedur Application_Startup_Ticketverwaltung beim Start von Outlook aufgerufen werden kann.
Sie benötigen noch weitere Module im VBA-Projekt von Outlook, und zwar mdlTicketverwaltung.bas, mdlTicketverwaltung_Folders.bas, mdlTicketverwaltung_Global.bas und mdlTicketverwaltung_Outlook.bas.
Schließlich benötigen Sie noch das Klassenmodul clsFolderArchiv.cls, das Sie in der Zip-Datei mit den Beispieldateien finden. Sie können dieses ebenso wie die anderen Module einfach aus dem Windows Explorer in den Projekt-Explorer des VBA-Editors von Outlook ziehen.
Verweise zum VBA-Projekt von Outlook hinzufügen
Im VBA-Editor stellen Sie nun noch zwei Verweise ein, und zwar für die Bibliotheken Microsoft Access 16.0 Object Library und Microsoft Office 16.0 Access Database Engine Object Library.
Danach können Sie Outlook einmal neu starten. Es erscheint dann direkt der Dateiauswahl-Dialog namens Datenbankpfad auswählen. Hier wählen Sie die Datenbank Ticketsystem.accdb aus.
Outlook starten
Wenn Sie Outlook nun starten, wird die Ereignismethode Application_Startup ausgelöst. Diese ruft die Prozedur Application_Startup_Ticketverwaltung auf, die mit der Funktion DatenbankpfadHolen prüft, ob der Pfad zur Datenbank bereits in einer UserProperty innerhalb von Outlook gespeichert ist – und ob die angegebene Datei vorhanden ist. Falls nicht, erscheint ein Dateiauswahl-Dialog, mit dem der Benutzer die Datei Ticketsystem.accdb auswählen kann (siehe Bild 2). In diesem Fall wird der Pfad zur Ticketmanager-Datenbank in der UserProperty gespeichert, wo er beim nächsten Start von Outlook wieder ausgelesen werden kann.
Bild 2: Auswählen der Datei Ticketsystem.accdb
Die Prozedur Application_Startup_Ticketverwaltung öffnet nun die Datenbank und liest den Inhalt der Tabelle tblOptionen ein, die wir weiter unten noch beschreiben.
Die Tabelle enthält im Wesentlichen Informationen darüber, welche Verzeichnisse in Outlook zum Sammeln der Kunden-E-Mails zur Bearbeitung im Ticketsystem verwendet werden sollen.
Hier sind beim ersten Aufruf in der Regel noch keine Outlook-Verzeichnisse festgelegt und somit auch noch keine Datensätze in der Tabelle tblOptionen. Dementsprechend bietet die Prozedur dem Benutzer nun die Möglichkeit, einen Outlook-Ordner auszuwählen und diesen zur Tabelle tblOptionen hinzuzufügen. Damit der Benutzer weiß, was auf ihn zukommt, erscheint nun zunächst die Meldung aus Bild 5.
Bild 3: Hinweis auf das anstehende Auswählen eines Verzeichnisses in Outlook
Anschließend erscheint der Dialog Ordner auswählen von Outlook. Dieser zeigt alle in Outlook verfügbaren Ordner an. Wir wählen hier den dafür vorbereiteten Ordner Ticketsystem aus (siehe Bild 3). Danach wird Outlook wie gewohnt gestartet und auch bei nachfolgenden Startvorgängen müssen die Informationen nicht erneut eingegeben werden.
Bild 4: Auswahl des zu trackenden Outlook-Ordners
Sollten Sie den Ordner für die E-Mails für die Ticketverwaltung noch nicht angelegt haben, können Sie das nachträglich erledigen – und zwar direkt im Dialog Ordner auswählen von Outlook. Dazu klicken Sie dort auf die Schaltfläche Neu… und legen dann mit dem Dialog aus Bild 4 einen neuen Outlook-Ordner für E-Mails an.
Bild 5: Anlegen eines neuen Ordners in Outlook
Ändern des Ordners in Outlook oder in der Datenbank
Es kann sein, dass Sie den Ordner in Outlook umbenennen oder das der Wert des Feldes Verzeichnis in der Tabelle tblOptionen so geändert werden, dass beide nicht mehr übereinstimmen. In diesem Fall findet die Prozedur Application_Startup_Ticketverwaltung den Outlook-Ordner nicht und zeigt die Meldung aus Bild 6 an.
Bild 6: Es fehlt ein Ordner, der vom Ticketsystem getrackt werden soll.
Diese Funktion war in der ersten Version der Prozedur Application_Startup_Ticketverwaltung noch nicht enthalten. Die erweiterte Version finden Sie in Listing 1.
Public Sub Application_Startup_Ticketverwaltung() Dim db As DAO.Database, rst As DAO.Recordset Dim objFolder As Outlook.Folder, objFolderArchiv As clsFolderArchiv, strTicketsystemDatenbank As String strTicketsystemDatenbank = DatenbankpfadHolen("Ticketsystem", "Datenbankpfad") If Len(strTicketsystemDatenbank) = 0 Then MsgBox "Verbindung zur Ticketdatenbank konnte nicht hergestellt werden." Exit Sub End If Set db = DBEngine.OpenDatabase(strTicketsystemDatenbank, , True) Set rst = db.OpenRecordset("SELECT * FROM tblOptionen", dbOpenDynaset) Set colFolders = New Collection If rst.EOF Then MsgBox "Sie können nun ein Verzeichnis in Outlook auswählen, dessen E-Mails automatisch in das " _ & "Ticketsystem eingelesen werden." Set objFolderArchiv = New clsFolderArchiv With objFolderArchiv Set objFolder = Outlook.GetNamespace("MAPI").PickFolder If Not objFolder Is Nothing Then rst.AddNew rst!Verzeichnis = objFolder.FolderPath rst.Update Set .Folder = objFolder Set .Database = db colFolders.Add objFolderArchiv End If End With Else Do While Not rst.EOF Set objFolderArchiv = New clsFolderArchiv With objFolderArchiv Set objFolder = GetFolderByPath(rst!Verzeichnis) If objFolder Is Nothing Then MsgBox "Der in der Export-Datenbank ''" & strTicketsystemDatenbank & "'' angegebene Outlook-Ordner ''" _ & rst!Verzeichnis & "'' ist nicht in Outlook vorhanden. Wählen Sie diesen nun erneut aus." Set objFolder = Outlook.GetNamespace("MAPI").PickFolder rst.Edit Verzeichnis = objFolder.FolderPath rst.Update End If Set .Folder = objFolder .AnlagenSpeichern = rst!AnlagenSpeichern Set .Database = db .NeuEinlesen = rst!NeuEinlesen .Groesse = Nz(rst!Groesse) End With colFolders.Add objFolderArchiv If rst!Rekursiv Then UnterordnerInstanzieren objFolder, db, Nz(rst!Groesse), rst!NeuEinlesen, rst!AnlagenSpeichern, colFolders End If rst.MoveNext Loop End If End Sub
Listing 1: Die Prozedur Application_Startup_Ticketverwaltung
Zur Erinnerung: Die Prozedur ermittelt zunächst über die Funktion DatenbankpfadHolen den aktuell in einer UserProperty in Outlook gespeicherten Pfad der Datenbank, also in unserem Fall der Datei Ticketverwaltung.accdb. Wenn dies eine leere Zeichenkette liefert, wird eine Meldung angezeigt, dass die Verbindung zur Ticket-verwaltung nicht hergestellt werden konnte und die Prozedur beendet.
Anderenfalls füllt die Prozedur eine Database-Variable mit einem Verweis auf die angegebene Datenbank, und zwar über die OpenDatabase-Methode. Dann öffnet sie ein Recordset auf Basis der Tabelle tblOptionen und referenziert dieses mit der Variablen rst.
Die Tabelle enthält keinen, einen oder mehrere Einträge mit Angabe von Outlook-Verzeichnissen, in die der Benutzer Kunden-E-Mails verschieben kann, damit auf ihrer Basis ein Ticket in der Ticketverwaltung angelegt wird. Hier prüft die Prozedur zunächst, ob überhaupt ein Datensatz vorliebt (rst.EOF).
Ist das der Fall, erscheint die Meldung, dass nun ein Outlook-Verzeichnis ausgewählt werden kann, das als Auffangbehälter für die Kunden-E-Mails dienen soll. Dieses Verzeichnis wird dann mit dem über die PickFolder-Methode geöffneten Dialog Ordner auswählen selektiert. Hat der Benutzer einen Ordner ausgewählt, wird ein neuer Datensatz in der Tabelle tblOptionen angelegt und mit dem Verzeichnisnamen aus Outlook gefüllt. Außerdem wird das Folder-Objekt der Collection aus colFolders hinzugefügt.
Sollte rst.EOF den Wert False zurückliefern, enthält die Tabelle tblOptionen mindestens einen Datensatz. In diesem Fall durchläuft die Prozedur in einer Do While-Schleife alle Einträge der Tabelle und versucht jeweils über die Funktion GetFolderByPath ein Folder-Objekt auf Basis der Pfadangabe zu erhalten – also etwa über \OutlookPosteingangTicketsystem. Eingebettet sind diese Anweisungen in das Erstellen eines neuen Objekts auf Basis der Klasse clsFolderArchiv, dem das Folder-Objekt und die Datenbank als Eigenschaften zugewiesen werden. Diese Klasse enthält die Automatismen, die dafür sorgen, dass eine in ein damit referenziertes Folder-Objekt eingefügten Mails automatisch in die Ticketverwaltungs-Datenbank eingetragen und auf spezielle Art markiert werden – nämlich durch Voranstellen der Zeichenfolge [Ticket x], wobei x der Nummer des Datensatzes entspricht.
Kann kein Folder-Objekt zu diesem Verzeichnis gefunden werden, erscheint die Meldung, dass der Outlook-Ordner nicht vorhanden ist und dass der Benutzer einen neuen Ordner auswählen soll. Dies geschieht dann wiederum über den Dialog Ordner auswählen.
Der so ausgewählte Ordner wird dann in das Feld Verzeichnis des aktuellen Datensatzes eingetragen. Außerdem werden auch hier das Folder-Objekt und die Referenz auf die Datenbank in ein neu erstelltes Objekt des Typs clsFolderArchiv eingetragen. Dieser Vorgang kann auch für mehr als einen Outlook-Ordner erfolgen, sofern dieser in der Tabelle tblOptionen eingetragen ist. Hier werden dann auch noch weitere Eigenschaften zum neu erstellten Objekt objFolderArchiv hinzugefügt, die in der nachfolgend beschriebenen Tabelle tblOptionen gespeichert werden.
Sollte das Feld Rekursiv des Datensatzes der Tabelle tblOptionen den Wert True aufweisen, ruft die Prozedur noch die Routine UnterordnerInstanzieren auf, welche alle unterhalb des angegebenen Outlook-Verzeichnisses enthaltenen Verzeichnisse mit jeweils einem clsFolderArchiv-Objekt referenziert und zur Auflistung colFolders hinzufügt.
Die Tabelle tblOptionen
Noch nicht im Detail beschrieben wurde die Tabelle tblOptionen. Diese ist wie in Bild 7 aufgebaut und enthält mehr Optionen als nur die Einstellung der Folder aus Outlook, aus denen die E-Mails der Kunden eingelesen werden sollen.
Bild 7: Entwurf der Tabelle tblOptionen
Die Felder haben folgende Bedeutung:
Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...
Testzugang
eine Woche kostenlosen Zugriff auf diesen und mehr als 1.000 weitere Artikel
diesen und alle anderen Artikel mit dem Jahresabo