Integration Dynamics 365 for Finance and Operations mit BizTalk 2016 und oData

24.05.2018

Microsoft hat sich bekannterweise dazu entschieden, mit allen Produkten auf lange Sicht in die Cloud zu gehen. Zu diesen Produkten gehören auch Dynamics AX und Dynamics CRM, welche Microsoft mit der Produktfamilie Dynamics 365 in die Cloud bringt.

Diese komplett cloudbasierte Lösung bietet Applikationen für sämtliche Geschäftsprozesse, die wie sooft Schnittstellen zu und von Partner-Systemen benötigen.

Wir haben im Zuge eines Integrations-Projektes Microsofts ersten großen europäischen „Dynamics 365 for Finance and Operations“-Kunden mit Hilfe vom Microsoft BizTalk Server 2016 und Microsoft Azure erfolgreich bei der Integration unterstützt.

Eine kleine Herausforderung in diesem Projekt war die Anforderung, dass zum Datenaustausch mit Dynamics 365 der oData-Standard über http-Requests verwendet werden sollte.

Da wir das Rad nicht neu erfinden wollten, wurde zu Beginn des Projektes eine generische und typsichere Lösung zum Abfragen und Schreiben von Datenentitäten gegen Dynamics 365 gesucht. Einige Tools sind auch damals schon verfügbar gewesen, haben jedoch nicht zum gewünschten Ergebnis geführt, weshalb wir uns entschieden haben, die Lösung selbst zu entwickeln.

Diese Lösung beinhaltet die folgenden Komponenten, um den Anforderungen gerecht zu werden:

1. oDataSchemaGenerator:

Ein kleines WPF-Tool zur Generierung von XSD-Dateien und entsprechenden C#-Klassen-Dateien. Dieses Tool beinhaltet zudem die Möglichkeit zur Auswahl der zu generierenden Entitäten. 
Technisch beinhaltet die Implementierung die Suche und Auswahl der gewünschten Entitäten, die Erzeugung des XML-Schemas und die Generierung der C#-Klassendatei zum Schema.



Das Resultat sind 2 Dateien – Eine .xsd mit der Schemadefinition der Entität und eine .cs-Datei mit der C#-Klassenrepräsentation des Schemas.

Diese Dateien kann man anschließend in ein Visual Studio BizTalk-Projekt bzw. in eine entsprechende Klassenbibliothek für das Model hinzufügen.

2. OAuth2:

Eine weitere Komponente wird benötigt, um die Anfragen gegen Dynamics 365 mittels oAuth2-Authentifizierung zu autorisieren. Hierzu wird ein POCO-Objekt für die für oAuth2 notwendigen Parameter bereitgestellt. Das oAuth2-Token wird letztlich mit Hilfe des Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext ermittelt.


3. Dynamics365Client:

Die dritte notwendige Komponente ist hier die Implementierung eines Service-Proxies. Dieser stellt die generischen Methoden zum Lesen und Schreiben von Dynamics365-Entitäten zur Verfügung.

Zusammengefasst ermöglichen diese Klassen die nachfolgende Implementierung zum generischen und typsicheren Abruf einer „ServiceOrderTable“-Entität an Hand ihrer „serviceOrderId“:

 

Für die meisten Anwendungsfälle besteht heutzutage die Möglichkeit mit Hilfe der neusten Version des „OData v4 Client Code Generator’s“ (https://marketplace.visualstudio.com/items?itemName=bingl.ODatav4ClientCodeGenerator#overview) und der Metadaten-Datei (.edmx) des Dynamics 365 oData-Endpunktes Entitätsklassen und einen Service-Proxy zu generieren, der einem den Großteil der Arbeit abnimmt.

Sehr ausführliche Beispiele findet ihr dazu unter: https://github.com/Microsoft/Dynamics-AX-Integration

In unserem Projekt ist die Nutzung des OData v4 Client Code Generator jedoch bisher noch nicht ohne hohen Zeitaufwand möglich, da wir zum einen nur bestimmte Entitäten und diese dann auch noch in ihren XSD-Repräsentationen benötigen.

Tino Reichel
Geschäftsführung QUIBIQ Berlin

zurück