Session D-SCED

Ansteuerung von Outlook aus Visual FoxPro

Norbert Abb
Wizards & Builders GmbH


Einleitung

Outlook als der Nachfolger von Exchange und Schedule bietet außer der Möglichkeit E-Mail zu verschicken integriert die Möglichkeit Termine und Aufgaben zu verwalten. Die Session zeigt wie man mit VFP Outlook ansteuern kann.

Die Session zeigt zuerst mit der Möglichkeit, aus VFP heraus, E-Mails und Faxe zu verschicken. Es wird kurz die Möglichkeit des Arbeitens mit den mitgelieferten Controls gezeigt.

Der zweite (größere) Teil der Session beschäftigt sich mit dem Zugriff auf Outlook und die enthaltenen Folder wie Kalender, Aufgaben und Journal.

Das Objektmodell von Outlook wird erläutert. Es wird am Beispiel gezeigt wie auf die Komponenten von Outlook zugegriffen werden kann und die Daten bearbeitet werden können.

Überblick

Mail und VFP

Es werden die Möglichkeiten gezeigt mit denen man aus VFP Mails (und Faxe) verschicken kann.

ActiveX Controls

Die mit VFP gelieferten ActiveX Controls um die MAPI Schnittstelle (E-Mail) anzusprechen werden vorgestellt und es wird am Beispiel gezeigt, wie man damit arbeiten kann.

OLE Automation

Es werden einige Grundlagen zu OLE Automation erklärt.

Outlook

Die Applikation Outlook wird vorgestellt und die interaktiven Funktionen des Programms gezeigt um zu verdeutlichen welche Funktionen später angesprochen werden sollen.

Objektmodell

Das Objektmodell von Outlook wird erläutert. Diese Modell ist zwar einfacher als das anderer Office Applikationen, aber ohne Kenntnisse über den Aufbau der Objektstruktur kann man mit OLE Automation nicht arbeiten.

Zugriff auf Outlook

Der Zugriff auf Outlook wird an mehreren Beispielen gezeigt.

Mail und VFP

Es ist unter FoxPro schon lange möglich E-Mail zu versenden. Unter FPW 2.6 war dies mit den Funktionen der FoxMapi.FLL möglich. Diese Schnittstelle wird aber unter VFP 5.0 nicht mehr unterstützt. Ein Ansprechen von MS Mail ist daher nur über einen Exchange Client (mit dem Mail Dienst im Profil) möglich. Es ist nicht möglich aus VFP 5.0 MS Mail direkt anzusprechen (über die ActiveX Controls).

Das Versenden von Mail und Faxen ist mit den ActiveX Controls, die bei VFP mitgeliefert werden, relativ einfach möglich.

Per OLE Automation (‚Fernsteuerung‘ ist es jedoch auch möglich die erweiterten Funktionalitäten der Anwendung Outlook (Terminkalender, Aufgabenverwaltung, Adressen) von VFP aus zu nutzen.

ActiveX Controls

Seit VFP 3.0 werden zwei OLE Container Controls ausgeliefert, die die MAPI Funktionen auf Masken von VFP bringen. Die Controls sind unter Windows 95 und Windows NT einsetzbar. Die Controls stellen Eigenschaften und Methoden zur Verfügung um MAPI Funktionen anzusprechen. Das heißt es können E-Mails empfangen und gesendet werden.

Session Control

Mit dem Session Control wird eine Mail Session verwaltet. Eine Session wird mit der SignOn Methode des Session Controls eröffnet. Die Eigenschaften dieses Controls steuern die Art wie das Login zu der Session geschehen soll:

LogonUI (logisch): Diese Eigenschaft bestimmt, ob eine Dialog Box beim Eröffnen der Session angezeigt werden soll oder nicht

NewSession (logisch): Dieses Flag bestimmt ob eine neue Session eröffnet werden soll wenn bereits eine Mail Session (Exchange) besteht oder ob die bestehende Session verwendet werden soll.

Username (String): Hier wird der Name des Profils eingetragen.

DowloadMails (logisch): Dieses Flag bestimmt ob zu Beginn der Session ein Abgleich für alle Offline Dienste (Internet Mail, Compuserve Mail, Remote Mail) gemacht werden soll oder nicht.

Achtung!: Der Defaultwert für diese Eigenschaft ist .T. . Das heißt es werden alle definierten Verbindungen kontaktiert wenn die Session gestartet wird.

Das Control dient nur zum Eröffnen und Schließen einer Session. Wichtig ist die SessionID die von der SignOn Methode zurückgeliefert/gesetzt wird. Diese ID wird benötigt um mit dem Message Control auf die Nachrichten zugreifen zu können.

Zum Schließen einer Mail Session wird die SignOff Methode ausgeführt.

Message Control

Das Message Control dient der Verwaltung von Messages. Die Steuerung des Controls geschieht über Eigenschaften des Objekts. Die meisten Eigenschaften sind zur Designzeit nicht verfügbar, da sie Eigenschaften von Messages enthalten und diese beim Design noch nicht vorhanden sind.

Die Verbindung zur Session geschieht über die SessionID. Es muß also um mit diesem Control arbeiten zu können zuerst die SessionID von der Session (Session OCX) übertragen werden.

Lesen von Nachrichten

Um Messages in den Puffer des Controls zu laden, wird die fetch() Methode ausgeführt. Danach stehen alle Messages zur Verfügung und können durch Verändern der MsgIndex Eigenschaft durchgeblättert werden. Die Anzahl der Messages steht in MsgCount. Vorsicht!: Der MsgIndex beginnt bei 0 und geht daher nur bis MsgCount -1.

Als weitere steuernde Eigenschaften können FetchSorted und FetchUnreadOnly verwendet werden. Mit FetchUnreadOnly = .T. werden nur Messages geholt, die noch nicht gelesen wurden. Mit FetchSorted = .T. werden die Nachrichten in Eingangsreihenfolge gelesen. Mit FetchSorted = .F. werden die Nachrichten in derselben Reihenfolge gelesen, wie sie in der InBox des Benutzers auftauchen würden.

Weitere Eigenschaften:

MsgNoteText:

Der Text der Nachricht
MsgSubject: Der ‘Betreff’ Text

MsgOrigDisplayName:

Der Name des Absenders
RecipDisplayName:

Der Name des Adressaten. Achtung! Dies ist wieder eine Collection und es gibt

RecipCount und RecipIndex um weitere Adressaten festzustellen.

Achtung!: beim ‘normalen’ Einlesen von Mails ist die Nachricht mit MsgIndex = 0 die älteste Mail!

Versenden von Nachrichten

Eine neue Nachricht wird angelegt durch den Aufruf der Methode Compose(). Alternativ kann der MsgIndex auf -1 gesetzt werden. Es werden dabei alle Nachrichten Eigenschaften leer angelegt und können danach gefüllt werden. Die Nachricht kann zusammengestellt werden mit den Empfängern, dem Betreff, dem Nachrichtentext und eventuell mit Anlagen. Versandt wird die Nachricht erst, wenn die Methode Send() aufgerufen wird.

OLE Automation

OLE Automation bedeutet quasi eine ‚Fernsteuerung‘ einer anderen Applikation. Es gibt dabei immer einen Client und einen Server. Die steuernde Komponente wird Client und die angesteuerte Applikation Server genannt. VFP ist also in den folgenden Erläuterungen als der Client zu sehen und Outlook als der Server.

Um mit OLE Automation arbeiten zu können spricht man die gesteuerte Applikation als VFP Objekt an:

Es wird von VFP aus ein Objekt erstellt, das dann als (Objekt)Referenzen jeweils Collections mit den darunterliegenden Ebenen enthält. Für die Collections legt man am besten eigene Objektreferenzen in VFP Variablen ab.

Mehr Informationen zu OLE Automation gibt es im Vortrag ‚OLE Automation mit WinWord und Excel‘.

Im Folgenden wird immer von einem ‚Outlook Objekt‘ ausgegangen. Das MAPI Objekt von Exchange, das in der Session auf der letzten Konferenz (dFPUG 96) erläutert wurde, ist immer noch vorhanden. Die dortigen Aussagen und Beispiele gelten immer noch.

Outlook

Outlook ist der Nachfolger von Exchange und Schedule+ zusammen. Das Produkt wird als Client zum Exchange Server ausgeliefert, oder als Bestandteil des Office Paketes, oder als separate Applikation.

Die Funktionalität von Exchange und Schedule+ wurde in einem Programm zusammengefügt. Das bedeutet die Termin und Aufgaben Verwaltung ist mit der E-Mail Applikation integriert. Außerdem sind weitere Funktionen hinzugekommen, wie z.B. die Möglichkeit ein Protokoll über seine Tätigkeiten zu verwalten.

In Outlook werden die Informationen welche (Mail) Dienste angesprochen werden sollen in Profiles verwaltet (wie auch schon in Exchange). Beispiele für Dienste sind: Exchange Server, Internet Mail, Fax, Compuserve Mail etc.

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

Ein interessanter neuer Folder ist der Folder Journal. Dort können automatisch Zeiten mitprotokolliert werden die für verschiedene Office Dokumente benötigt wurden. Es können aber auch Einträge manuell (oder per OLE Automation) erstellt werden.

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 Dokumention zu den Anwendungen. Bei den Office Anwendungen sind dies die VBA*.HLP Dateien im Office Verzeichnis. In diesen Hilfedateien findet man zum Teil auch aufbereitete Objektmodelle. Für Outlook existiert jedoch kein graphisches Objektmodell in der VBA Hilfe.

Man sieht an dem Modell, daß der Zugriff auf die genannten Outlook Folder nur über ein Namespace Objekt möglich ist. Diese Name Space Objekt erhält man, wenn man vom Outlook Objekt die getnamespace Methode mit dem Parameter “MAPI” aufruft (dies ist derzeit der einzige verfügbare NameSpace).

Zugriff auf Outlook

Ein ‘Outlook Objekt’ wird in VFP erstellt durch den Befehl:

Anschließend kann man mit dieser Objektreferenz in VFP arbeiten.

Um mit Elementen von Outlook zu arbeiten, benötigt man das NabmeSpace Objekt. Wenn aber einfach nur Elemente (E-Mails, Termine, Aufgaben etc.) zu Outlook hinzugefügt werden sollen kann dies einfach über die Methode createitem mit dem entsprechenden Item Typ geschehen. - Die Typen (und andere Konstanten) findet man in der Hilfe Datei. – Die Methode gibt ein Objekt des gewünschten Typs zurück. Anschließend können die Eigenschaften des Objektes gesetzt werden (z.B. Absender, Adressat, Text) und das Objekt dann verschickt (send) oder gespeichert werden.

Um mit Outlook umzugehen ist zum einen die Hilfedatei (VBAOUTL.HLP) wichtig zum anderen das Objektmodell (s.o.). Mit etwas Experimentierfreude und den Beispielen auf der Begleitdiskette sieht man dann schnell wie man Informationen aus Outlook herausbekommen kann oder Outlook mit Informationen versorgen kann.