Session D-OUT

Integration Outlook

Rolf Riethmüller
Wizards & Builders GmbH


Integration Outlook

Outlook ist der Nachfolger von Exchange und Schedule+ und kann als Persönlicher Informationsmanager eingesetzt werden. Outlook integriert die Funktionen Kontakt-, Termin- und Aufgabenverwaltung sowie den Versand von E-Mails.

Die Konfiguration von Outlook ist in sogenannten Profilen abgelegt. Ein Profil beinhaltet zum Beispiel persönliche Ordner, Adressbücher und die (verfügbaren) E-Mail Dienste wie Exchange Server, Internet Mail, Compuserve Mail und Lotus Notes.

Innerhalb von Outlook werden die Informationen in Foldern verwaltet. Diese Folder sind zum Teil schon aus Exchange bekannt, wie Posteingang und Postausgang. Aber auch die Informationen zur Terminplanung (Kalender und Aufgaben) sind in solchen Ordnern gespeichert.

Für die Integration von Outlook mit anderen Anwendungen unterstützt Outlook die Ansteuerung per OLE. Mit Hilfe dieser Technologie sind wir in der Lage, Outlook von VFP aus fernzusteuern. Die Steuerung einer OLE-Anwendung erfordert jedoch Information zum Objektmodells der OLE-Anwendung.

Objektmodell

Um mit OLE Automation arbeiten zu könne muß man die Objektstruktur des erstellten Objektes kennen. Informationen zu den Objektmodellen findet man in der Dokumentation zu den Anwendungen. Bei den Office Anwendungen sind dies die VBA*.HLP Dateien im Office Verzeichnis. In diesen Hilfedateien finden wir auch graphisch aufbereitete Objektmodelle.

Am Beispiel des Outlook – Modells sehen wir, daß der Zugriff auf die genannten Outlook Folder nur über ein Namespace Objekt möglich ist. Dieses Name Space Objekt erhalten wir über die Methode GetNameSpace des Application Objekts. Diese Methode erwartet den Parameter „MAPI“, andere Name Spaces werden zur Zeit nicht unterstütz.

Der grundlegende Zugriff auf Outlook

Ein ‘Outlook Objekt’ können wir in VFP mit den Funktionen CreateObject() und NewObject() erstellen. Die Ordner (Folders) von Outlook sind nur über das NameSpace Objekt ansprechbar. Bevor wir jedoch auf ein einen Ordner zugreifen können, müssen wir uns bei Outlook anmelden. Die Erfolgt über die Methode LOGON des NameSpace Objekts. Nach dem Anmelden können wir auf die Folders zugreifen.

Für die Erstellung eines Eintrags in einem Standardordner (Mail, Aufgabe, Termin) können wir direkt vom NameSpace Objekt ein neues Element anfordern. Die Methode für das Erstellen eines solchen Elements erfolgt mit der NameSpace Methode CreateItem( nTyp). Sofern die Aktion erfolgreich durchgeführt wurde, erhalten wir eine Objektreferenz auf das neue Element, mit deren Hilfe wir die Eigenschaften bearbeiten können.

Im folgenden Beispielprogramm sehen Sie die prinzipiellen Schritte zur Instanzierung eines Outlook Objekts.

loApp= create( "Outlook.Application")

** Prüfen ob Outlook instanziert wurde und eine Referenz vorhanden ist

if type( "loApp.Name")# "C"

   return

endif

** Referenz auf das Name Space Objekt holen

loNameSpace= loApp.GetNameSpace( "Mapi")

** und gleich mit dem entsprechenden Profil anmelden

loNameSpace.Logon( "Devcon")

** Hier sind wir auf der ersten Ordnerebene in Outlook

** Dies sind beispielsweise persönliche Ordner, Server Postfach etc.

loRootFolder= loNameSpace.Folders.GetFirst()

** und hier holen wir uns die Anzahl der untergeordneten Folder  wie Kontakte, Posteingang etc.

lnFolders= loRootFolder.Folders.Count

** Und nun die Folder-Collection durchgehen

for i= 1 to lnFolders

   ? loRootFolder.Folders(i).Name

endfor

Arbeiten mit Ordnern und Elementen (Items)

Nachdem wir jetzt wissen, wie wir auf die Ordner in Outlook zugreifen können, wollen wir nun die einzelnen Elemente der Ordner bearbeiten. Dazu besorgen wir uns zuerst eine Referenz auf den entsprechenden Ordner. Anschließend können wir die Items – Collection benutzen, um neue Elemente hinzufügen, bestehende zu bearbeiten oder zu löschen. Die Elemente der Ordner besitzen einen bestimmte Anzahl von Eigenschaften die bei jedem Elementtyp vorhanden sind. Die wichtigste Eigenschaft ist die SAVED Eigenschaft. Mit deren Hilfe können wir feststellen, ob ein Eintrag geändert wurde.

Das nachfolgende Beispiel erstellt zuerst eine Referenz auf den Ordner Kontakte. Anschließend suchen wir den Kontakt „Riethmüller“ in diesem Ordner. Falls der Kontakt nicht gefunden wurde, legen wir ihn einfach an und setzen die Eigenschaften für Name, Vorname und Firma und speichern den Kontakt.

loFolder= loRootFolder.Folders.Item( "Kontakte")

loKontakt= loFolder.Items.Find( '[Lastname]= "Riethmüller" ' )

if type( „loKontakt.class“) # „N“

   loKontakt= loFolder.Items.Add()

   loKontakt.FirstName= „Rolf“

   loKontakt.LastName= „Riethmüller“

   loKontakt.CompanyName= „Wizards & Builders GmbH“

   loKontakt.save()

endif

Die Outlookelemente besitzen eine Reihe von Standardeigenschaften deren Erläuterung in der folgenden Tabelle aufgeführt ist. Jedes Element besitzt zusätzlich noch typspezifische Eigenschaften. Wir können einem Element noch zusätzliche Eigenschaften mit Hilfe der Collection UserProperties anlegen und mit Werten füllen.

 
Eigenschaft Beschreibung

Attachments

Anhänge eines beliebigen Outlookeintrags wie Kontakt, Notiz, Aufgabe, Termin etc.

Body

Der Body enthält einen Freitext mit beliebigem Inhalt, dies können auch Graphiken sein

CreationTime

Datum und Uhrzeit der Erstellung des Elements

CoversationTopic

Der ConversationTopic kann mit einem Thema verglichen werden.

EntryID

Dies ist die eindeutige ID des Elements in Outlook

LastModificationTime

Diese Eigenschaft gibt das Datum und die Uhrzeit der letzen Änderung an

StoreID

Die ist die ID des Ordners in dem das Element gespeichert ist

GetInspector

Referenz auf ein Inspector Objekt

UserProperties

Collection mit den benutzerdefinierten Eigenschaften

Das Hinzufügen von Eigenschaften erfolgt über  die Collection mit der ADD-Methode

Beispiel: loKontakt.UserProperties.Add( „Umsatz“, olText)

Diese Eigenschaften können sogar mit Validierungsregeln versehen werden

Der Inspector

Jedes Element in Outlook hat normalerweise einen Inspector und Ordnern einen Explorer zugeordnet. Diese können für die manuelle Eingabe der Daten zu einem Element durch den Anwender benutzt werden. Den Inspector eines Elements liefert uns die Eigenschaft GetInspector des Element-Objekts.

Das folgende Beispiel zeigt den Inspektor zu einem Kontaktelement.

loKontakt= loFolder.Items.Find( '[Lastname]= "Riethmüller" ' )

if type( „loKontakt.class“) = „N“

   loInspector= loKontakt.GetInspector()

   loInspector.display()

endif

Das folgende Beispiel zeigt den Explorer zum Kontaktordner.

loFolder= loRootFolder.Folders.Item( "Kontakte")

if type( „loFolder.Name“) = „C“

   loExplorer= loFolder.GetExplorer()

   loExplorer.display()

endif

E-Mail mit Outlook

Der Versand von E-Mail ist die ursprüngliche Funktionalität von Outlook. Zum Versenden einer Mail benötigen wir nur das Applicatione Objekt. Alternativ könnte auch der Ordner Postausgang für zu sendende Mails benutzt werden. Der Einfachheit wegen werden wir im folgenden Beispiel über das Application Objekt eine neue Nachricht versenden. Die Besonderheit bei E-Mails ist die Angabe eines oder mehren gültigen Empfängers (Recipients) und es werden auch häufig Dokumente als Mail Anhang versandt..

Das Versenden einer E-Mail ist im folgenden Beispiel dokumentiert.

loMail= loApp.CreateItem( 0)

loMail.To= "RolfR@Compuserve.com"

loMail.Subject= "Mail von der DevCon"

loMail.Body= "Hallo Rolf,"+ crlf+ crlf+ "tschüß"+ crlf+ "Rolf"

loMail.Attachments.Add( “C:\Temp\Session.doc”, 1)

loMail.Send()

Zusammenfassung

Outlook bietet eine komplette Verwaltung von persönlichen Daten wie Kontakte, Termine und Aufgaben. Die Verfügbarkeit der Ansteuerung mit OLE ermöglicht uns, diese Daten von unserer Anwendung aus abzufragen, anzusprechen und zu modifizieren. Eine Einsatzmöglichkeit ist auch die Benutzung von E-Mail als Transportmittel für unsere Daten.