Outlook und Dynamics NAV

Der Dynamics NAV-Standard bietet bereits ein integriertes Tool um Daten in Microsoft Outlook und Microsoft 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 Dynamics 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 wir Kontakte in Microsoft Outlook in eine zuvor neu angelegte 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:

Name Type Länge
Code Code 10
First Name Text 30
Middle Name Text 30
Last Name Text 30
E-Mail-Address Text 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:

Name Type Subtype
Idx Integer  
olFolderContacts Integer  
olContact Integer  
olApplication Automation 'Microsoft Outlook 12.0 Object Library'.Application
olNamespace Automation 'Microsoft Outlook 12.0 Object Library'.NameSpace
olFolder Automation 'Microsoft Outlook 12.0 Object Library'.Folder
olItems Automation 'Microsoft Outlook 12.0 Object Library'.Item
olContactItem Automation 'Microsoft Outlook 12.0 Object Library'.ContactItem
OutlookContact Record 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;