Mit Microsoft Outlook kommunizieren
Microsoft Outlook kommt in sehr vielen Firmen zum Einsatz, entsprechend groß ist das Interesse, auf die Outlook-Daten innerhalb von Dynamics NAV zugreifen zu können. Eine Outlook-Installation und ein paar C/AL-Zeilen sind nötig um beispielsweise Outlook-Kontakte in einer Tabelle in Dynamics NAV speichern zu können.
Der Dynamics NAV-Standard bietet bereits ein integriertes Tool um Daten in Outlook und Dynamics NAV zu synchronisieren. Dieses Tool ist sehr umfangreich und die Synchronisation läuft seit der 5.0-Version von Dynamics NAV über C/FRONT ab. Möchte man lediglich ein paar Daten austauschen und diesen Datenaustausch von NAV aus anstoßen müssen die Automation Server genutzt werden. Mit einer Microsoft Outlook-Installation werden diese Automation Server bereitgestellt und können in Dynamics NAV genutzt werden.
In diesem Tutorial werden wird Kontakte in Microsoft Outlook in eine zuvor neuangelegte Tabelle in Dynamics NAV übertragen.
Zuerst legen wir eine neue Tabelle an. Hierzu gehen wir in den ObjectDesigner und drücken auf Neu. In dem sich anschließend öffnenden Fenster können wir die folgenden fünf Felder anlegen:
- Code, Type: Code, Länge: 10
- First Name, Type: Text, Länge: 30
- Middle Name, Type: Text, Länge: 30
- Last Name, Type: Text, Länge: 30
- E-Mail-Address, Type: Text, Länge 80

Nachdem die o. g. Felder angelegt sind, können wir das Fenster schließen und die neue Tabelle unter einer freien ID (z. B. 50000) und der Bezeichnung Outlook Contact abspeichern.
Jetzt werden wir eine neue Codeunit erstellen, die sich um die Kommunikation mit Microsoft Outlook kümmert. Gehe hierzu wieder in den ObjectDesigner und drücke auf Codeunit und dann auf Neu.
Lege zunächst im OnRun-Trigger die folgenden lokalen Variablen an:
- Idx, Type: Integer
- olFolderContacts, Type: Integer
- olContact, Type: Integer
- olApplication, Type: Automation, Subtype: 'Microsoft Outlook 12.0 Object Library'.Application
- olNamespace, Type: Automation, Subtype: 'Microsoft Outlook 12.0 Object Library'.NameSpace
- olFolder, Type: Automation, Subtype: 'Microsoft Outlook 12.0 Object Library'.Folder
- olItems, Type: Automation, Subtype: 'Microsoft Outlook 12.0 Object Library'.Item
- olContactItem, Type: Automation, Subtype: 'Microsoft Outlook 12.0 Object Library'.ContactItem
- OutlookContact, Type: Record, Subtype: Outlook Contact
Im OnRun-Trigger hinterlegen wir als erstes die folgenden C/AL-Zeilen:
olFolderContacts := 10;
olContact := 40;
Die Werte 10 und 40 repräsentieren im Microsoft Outlook 2002-Objektmodell zum einen den Kontaktordner und zum anderen einen Kontakt. Ausführliche Information zum Microsoft Outlook 2002-Objektmodell erhältst du auf den Seiten von Microsoft.
Die nächsten C/AL-Zeilen sehen folgendermaßen aus:
IF ISCLEAR(olApplication) THEN
IF NOT CREATE(olApplication) THEN
ERROR('Outlook nicht gefunden!');
Mit diesen drei Zeilen erzeugen wir die Variable olApplication und geben ggf. eine Fehlermeldung aus, wenn die Erstellung der Variable nicht geklappt hat.
Die nächsten drei C/AL-Zeilen sind:
olNamespace := olApplication.GetNamespace('MAPI');
olFolder := olNamespace.GetDefaultFolder(olFolderContacts);
olItems := olFolder.Items;
Über die zuvor erzeugte Variable olApplication holen wir uns den MAPI-Namespace und ordnen dies der Variable olNamespace zu. Über diese Variable und der Variable olFolderContacts wird der Outlook-Standard-Kontaktordner geholt und der Variable olFolder zugeordnet. Zum Schluss wird der Variable olItems die in dem Kontaktodner befindlichen Kontakte zugeordnet.
Jetzt, wo wir über die Variable olItems an die Kontakt kommen, gilt es nun diese in die neue Dynamics NAV-Tabelle hinzuzufügen.
Erst einmal wird die Tabelle geleert:
OutlookContact.RESET;
IF NOT OutlookContact.ISEMPTY THEN
OutlookContact.DELETEALL;
Und nun werden die Kontakte übertragen:
FOR Idx := 1 TO olItems.Count DO BEGIN
olContactItem := olItems.Item(Idx);
IF olContactItem.Class = olContact THEN BEGIN
UserOutlookContact.INIT;
UserOutlookContact.Code := FORMAT(Idx);
UserOutlookContact."First Name" := olContactItem.FirstName;
UserOutlookContact."Middle Name" := olContactItem.MiddleName;
UserOutlookContact."Last Name" := olContactItem.LastName;
OutlookContact."E-Mail-Address" := olContactItem.Email1Address;
UserOutlookContact.INSERT;
END;
END;
Schließe nun die neue Codeunit und speicher sie unter einer freien ID (z. B. 50000) und der Bezeichnung Transfer Outlook Contact ab. Nach dem Ausführen der neuen Codeunit sollten die Kontakte aus Microsoft Outlook jetzt in der neuen Microsoft Dynamics NAV-Tabelle zusehen sein.
Die Tabelle und die Codeunit können hier heruntergeladen werden.
Nachfolgend nochmal den gesamten C/AL-Code:
olFolderContacts := 10;
olContact := 40;
IF ISCLEAR(olApplication) THEN
IF NOT CREATE(olApplication) THEN
ERROR('Outlook nicht gefunden!');
olNamespace := olApplication.GetNamespace('MAPI');
olFolder := olNamespace.GetDefaultFolder(olFolderContacts);
olItems := olFolder.Items;
OutlookContact.RESET;
IF NOT OutlookContact.ISEMPTY THEN
OutlookContact.DELETEALL;
FOR Idx := 1 TO olItems.Count DO BEGIN
olContactItem := olItems.Item(Idx);
IF olContactItem.Class = olContact THEN BEGIN
OutlookContact.INIT;
OutlookContact.Code := FORMAT(Idx);
OutlookContact."First Name" := olContactItem.FirstName;
OutlookContact."Middle Name" := olContactItem.MiddleName;
OutlookContact."Last Name" := olContactItem.LastName;
OutlookContact."E-Mail-Address" := olContactItem.Email1Address;
OutlookContact.INSERT;
END;
END;
Zurück zur Tutorialübersicht.