Session D-MAPI

Workgrouping mit Visual Foxpro

Friedhelm Budnick
Microsoft GmbH

 


EINLEITUNG


DER REDNER


INHALT


Modern Times: Was bringt Ihnen diese Session?

Der Austausch von Nachrichten und Dokumenten gewinnt im Zuge fortschreitender Vernetzung der Arbeitsrechner immer größere Bedeutung. In Zeiten größer werdender Konkurrenz im Geschäftsleben ist der Erfolg eines Unternehmens immer stärker davon abhängig wie schnell und problemlos die Menschen innerhalb des Unternehmens miteinander zusammenarbeiten und kommunizieren.

Das Simple MAPI des MAPI-Subsystems bietet eine einfach zu bedienende Benutzerschnittstelle die die Kommunikation im Netz und damit das Arbeiten im Team effizienter macht.

MAPI = Messaging Application Programming Interface

Denkbare Anwendungsmöglichkeiten sind z.B.:

Mit Microsoft VISUAL FOXPRO 3.0 für WINDOWS haben Sie unterschiedliche Möglichkeiten auf diese Schnittstelle zuzugreifen. Diese Session macht Sie mit den Grundprinzipien des MAPI - Subsystems vertraut, stellt die Zugriffsmethoden unter VISUAL FOXPRO vor und diskutiert deren FÜR und WIDER.

Nach der Teilnahme an dieser Session kennen Sie

Sie sind nach Ende der Session in der Lage von Microsoft VISUAL FOXPRO 3.0 für WINDOWS aus Simple MAPI anzusprechen, sofern Ihre lokale Hard- und Software dies erlaubt.


Architektur: Die MAPI-Architektur im Überblick

Elektronische Messaging-Systeme helfen Nachrichten und Dokumente über ein Netzwerk auszutauschen. Sie speichern, filtern und verwalten diese Daten, lokalisieren Sender und Empfänger und regeln den eigentlichen Austausch über das Netzwerk. Ihre Leistungsfähigkeit geht in der Regel weit über das hier Beschriebene hinaus. Sie bilden das backbone der Kommunikation im Netzwerk.

Das MAPI-Subsystem wurde von Microsoft in Zusammenarbeit mit anderen Unternehmen entwickelt um beliebigen Client-Applikationen in einer Windows-Umgebung den Zugriff auf unterschiedliche Messaging-Systeme zu erlauben. Hierzu gehören Microsoft Mail, Novell MHS, X.400 und IBM PROFS .

Wie aus Abbildung 1 zu ersehen ist, stellt MAPI zwei Schnittstellen zur Verfügung.

Damit funktioniert das MAPI Subsystem vergleichbar zum Windows Printing System. Auch hier muß der Client keine Kenntnis von der tatsächlichen Natur des angeschlossenen Druckers haben, solange ein geeigneter Treiber vorliegt.

Das MAPI Subsystem besteht aus einem Set von DLLs, von denen die MAPI.DLL die Client Schnittstelle bereitstellt. Sie exportiert alle vom Client benötigten Funktionen. Diese Funktionen sind u.a. in [1] und [2] dokumentiert

Ist in einer 32bit-Umgebung ein 32bit MAPI Subsystem installiert, wird die Client Schnittstelle von MAPI32.DLL bereitstellt.

Abbildung 1: Das MAPI-Subsystem im schematischen Überblick

 

Gegenstand dieser Session ist die von der MAPI Client Schnittstelle angebotene Simple MAPI. Hierzu gehören Senden und Empfangen von Mails mit/ohne Attachements, das Prüfen von Adressen und das Verwalten der Inbox (Löschen, Suchen, Zwischenspeichern)

Die Service Provider Schnittstelle ist nicht Gegenstand dieser Session.


Simple MAPI: Wichtige Funktionen und Datentypen
MAPILogon(  
UIParam ByVal as Long, Handle des Parent Fensters. Kann 0 sein.
User as String, Der Benutzername. Maximal 255 Zeichen lang. Kann leer sein, dann wird ein Einlog-Dialog angezeigt, wenn Flags entsprechend gesetzt ist.
Password as String, s. User
Flags as Long, Bitmaske die die Anmeldung konfiguriert. Beispiele für Flags, die gesetzt werden können:

&H1 = Einlog-Dialog erzwingen

&H2 = Neue Session öffnen, auch wenn bereits eine Mail-Session aktiv ist

Reserved as Long, Reserviert, muß 0 sein.
Session as Long) Pointer auf eine Variable, in die das Sessionhandle eingetragen wird, wenn das Logon erfolgreich war
as Long 0, wenn ein gültiges Sessionhandle erstellt werden konnte, sonst unterschiedliche Werte. Kann zum Fehlerhandling benutzt werden.

 
MAPILogoff(  
Session as Long, das von MAPILogon zurückgegebene Sessionhandle
UIParam as Long, Handle des Parent Fensters. Kann 0 sein.
Flags as Long, Reserviert, muß 0 sein.
Reserved as Long) Reserviert, muß 0 sein.
as Long 0, wenn die Session beendet werden konnte, sonst unterschiedliche Werte abhängig vom Fehler.

 
MAPISendMail(  
Session as Long,. das von MAPILogon zurückgegebene Sessionhandle
UIParam as Long, Handle des Parent Fensters. Kann 0 sein
Message as MAPIMessage, MAPIMessage ist eine Struktur, die den Aufbau der Nachricht näher spezifiziert
Recips as MAPIRecip, MAPIRecip ist eine Struktur, die Anzahl und Art der Empfänger näher spezifiziert
Files as MAPIFile, MAPIFile ist eine Struktur, die eventuelle Attachements näher spezifiziert
Flags as Long, s. MAPILogon
Reserved as Long) Reserviert, muß 0 sein
as Long 0, wenn das Mail gesendet werden konnte, sonst unterschiedliche Werte abhängig vom Fehler.

 
Type MAPIFile  
Reserved as Long Reserviert, muß 0 sein.
Flags as Long Bitmaske die den OLE-Status des Attachements beschreibt
Position as Long Position desAttachements im Text
PathName as String Pfad des Attachements
FileName as String Name des Attachements
FileType as String Dateityp (muß derzeit „" sein)
End Type  

 
Type MAPIRecip  
Reserved as Long Reserviert, muß 0 sein.
RecipClass as Long beschreibt z.B., ob der Empfänger ein Alias ist
Name as String Name des Empfängers, wie es das Messaging System anzeigen soll
Address as String Adresse des Empfängers
EIDSize as Long Größe der Nachfolgend beschriebenen ID (abhängig vom Messaging System )
EntryID as String ID zur eindeutigen Kennzeichnung des Empfängers
End Type  

 


VFP ruft Simple MAPI: Die Methoden

Da die MAPI-Funktionen von einer DLL exportiert werden, ist es naheliegend sie von VISUAL FOXPRO aus unter Verwendung von FOXTOOLS.FLL (16bit) oder direkt nach einem DECLARE-DLL aufrufen zu wollen.

Dies ist möglich, jedoch nur unter Verwendung einer ganzen Reihe weiterer Windows API-Funktionen, die nicht von MAPI.DLL exportiert werden. Tatsächlich sind es so viele Funktionen, daß sich (wenn möglich) die Erstellung einer eigenen FLL empfiehlt. Ein direkter Zugriff wäre damit schon nicht mehr gegeben.

Die Ursache liegt in einer Produktbeschränkung der FOXPRO API-Schnittstelle, die bereits von Microsoft FOXPRO 2.6 für WINDOWS bekannt ist:

FOXPRO bietet keine Möglichkeit API-Funktionen aufzurufen, die C-Strukturen benötigen.

Zwar gibt es dokumentierte work arounds [3] diese greifen jedoch nicht bei komplexeren Strukturen, die z.B. Pointer auf andere Objekte enthalten.

Wie bereits weiter oben beschrieben wurde, werden genau solche Strukturen von einigen wichtigen Funktionen der MAPI.DLL benötigt.

Das Wesentliche an den weiter unten besprochenen Methoden ist, daß sie die hier beschriebene Beschränkung ausgleichen.

Bereits für Microsoft FOXPRO 2.6 für WINDOWS standen die sogenannten Workgroup Extensions zur Verfügung. Das Herzstück dieser Erweiterung ist die Library FOXMAPI.FLL. Sie fungiert als Schnittstelle zu MAPI. Die Hauptaufgabe der FOXMAPI.FLL liegt in der Erstellung der Strukturen, die von MAPI.DLL benutzt werden und deren Umsetzung in eine von FOXPRO verwertbare Form.

FOXMAPI.FLL exportiert hierzu die Funktion mpCursor(). Sie erstellt je nach Aufrufparameter eine von drei Cursor-Dateien MAPIFile, MAPIMesg oder MAPIRecip. Diese Cursor sind Abbildungen der oben beschriebenen gleichnamigen Strukturen. Der Anwender füllt sie mit den benötigten Daten.

Die übrigen von FOXMAPI.FLL exportierten Funktionen sind durchweg Abbildungen von Funktionen die durch MAPI.DLL exportiert werden. Ihre Namen sind analog vergeben:
MAPI.DLL FOXMAPI.FLL
MAPILogon MPLogon
MAPILogoff MPLogoff
MAPISendMail MPSendMail
... ...

Wird eine dieser Funktionen aufgerufen, so reicht sie den Aufruf an die namensverwandte Funktion in der MAPI.DLL weiter. Werden als Parameter eine oder mehrere der o.a. Strukturen benötigt holt FOXMAPI.FLL sich die Inhalte aus den mit mpCursor() erstellten Cursor-Dateien und erstellt damit die benötigten Strukturen.

Beispiele:

 

Die mit Microsoft VISUAL FOXPRO 3.0b für WINDOWS ausgelieferte FOXMAPI.FLL ist eine 32bit Version.

Kommt sie auf einer 16bit-Plattform zum Einsatz, so führt sie ein thunking durch.

FOXMAPI.FLL ist von der Plattform unabhängig - es kann sowohl MAPI32.DLL als auch MAPI.DLL angesprochen werden.

Plus: Die Workgroup Extensions bieten Zugriff auf Schedule+.

FOXMAPI.FLL darf mit eigenen Anwendungen weitergegeben werde. Zum Lieferumfang von Microsoft FOXPRO 2.6 für WINDOWS gehört eine Anleitung, wie der Setup Assistent angepaßt werden kann, wenn FoxMAPI mitgeliefert werden soll.

Das Besprochene gilt für die Nutzung auf allen drei Windows-Plattformen. Auf Windows NT bzw. Win95 wird allerdings das Vorhandensein eines 32bit MAPI Subsystems vorausgesetzt. Ein eventuell installiertes 16bit Mail wird ignoriert. Dieses Verhalten traf bereits auf Microsoft FOXPRO 2.6 für WINDOWS zu, kann aber bei Bedarf durch Anpassung der WIN.INI geändert werden.

Mit der Professional Edition von Microsoft VISUAL FOXPRO 3.0 für WINDOWS wird ein OCX-Control ausgeliefert, daß einen schnellen und einfachen Mailzugriff ermöglichen soll: MSMAPI32.OCX

Die Benutzung dieses Controls ist in zweierlei Hinsicht sehr konsequent.

Beispiel:

Dies ist die wohl einfachste Methode von Microsoft VISUAL FOXPRO 3.0 für WINDOWS Mails zu versenden. Sie funktioniert auf allen Plattformen. Wenn Mail nicht installiert ist, steht der Menüpunkt nicht zur Verfügung.

Die von diesem Menüpunkt aufgerufene Funktion wird von MAPI.DLL exportiert und ist auch programmiertechnisch äußerst einfach zu benutzen
MAPISendDocuments( .
UIParam as Long, Handle des Parent Fensters. Kann 0 sein
DelimChar as String, Das Zeichen, das für FullPaths und FileNames als Feldtrenner verwendet wird
FullPaths as String, Textstring der eine durch DelimChar getrennte Liste von Pfadnamen enthält
FileNames as String, Textstring der eine durch DelimChar getrennte Liste von Dateinamen enthält die als Attachement gesendet werden sollen
Reserved as Long) Reserviert, muß 0 sein
as Long 0, wenn das Mail gesendet werden konnte, sonst unterschiedliche Werte abhängig vom Fehler.

Diese Funktion setzt nicht eine gültige Mail-Session voraus. Strukturen zur Angabe von Empfängern werden nicht benötigt.

Andererseits kann das Mail nur interaktiv erstellt werden.

Besteht keine Mail-Session, wird ein Einlog-Dialog gezeigt, besteht eine Session wird immer die bereits gestartete verwendet.


Hilfe: weiterführende Hilfe und Programmcode

weiterführende Hilfe:

[1] MAPI SDK (als Beta auf MSDN)

[2] technical reference zu MS MAIL

[3] KB-Artikel D26641 „Für API-Aufrufe benötigte Strukturen durch Textvariablen ersetzen"

[4] FOXMAPI.HLP aus dem Lieferumfang von Microsoft VISUAL FOXPRO 3.0b für WINDOWS

[5] FOXHELP.HLP

[6] Microsoft Hotline zu FOXPRO

 

Beispiel-Applikationen

[1] Compuserve FOXFORUM


Exchange: Ein Ausblick