ENTWICKLER-BLOG

OData REST Web Service Beispiel (Subscribe)09 Nov2019

Kategorie: AL Development

Wie OData in Business Central verwendet wird

In diesem Beitrag zeigen wir ein Beispiel von OData REST Web-Service in Dynamics 365 Business Central (TM) On-Premise. Eine notwendige Einrichtung zur Verwendung von .NET Interoperability wird hier gezeigt. Das Beispiel kommt aus einer Session von NAV TECH Days 2015. Damals wurde die Version Dynamics NAV 2016 (9.00) verwendet. Jetzt bilden wir die Web-Service in AL und in Business Central 2019 wave 2 (Version 15).

Wir wollen in unserem Business Case einen QR-Code Bild des Debitoren Webseite auf der Debitoren-Karte speichern, damit Anwender schnell mit einem Scanner die Webseite des Kunden öffnen können. Zum diesem Zweck nutzen wir eine OData REST Service, die unter diese Adresse http://barcodes4.me/ zur Verfügung gestellt wird. Ähnlich, wie in NAV Tech Days, bauen wir eine Funktionalität, die ein QR-Code Bild als Stream auf der 'Customer' Tabelle in einem neuen Feld gespeichert wird. Dazu brauchen wir .NET Klassen. Die OData wird mit .NET Klasse System.Net.Http.HttpResponseMessage behandelt. Wir bauen eine spezielle CodeUnit, die alle diese Aufgaben übernimmt. Bevor wir mit OData los gehen, wir müssen folgende andere Anpassungen im Business Central vornehmen:

  1. Eine Extension der Tabelle "Customer" (Debitor) für ein neues Feld zum Speichern von heruntergeladenen Bildern.

Dynamics 365 Business Central (Navision) - OData Rest Extension in der Tabelle

  1. Eine neue Card Part Page "QR Fact Box", zum Anschauen des Bildes im Faktbox-Pane der Seite 'Debitorenkarte'.

Dynamics 365 Business Central (Navision) - OData Rest - Factbox Seite

  1. Eine Extension der Page "Customer Card" zum Anzeigen des neuen Feldes.

Dynamics 365 Business Central (Navision) - OData REST - Seitenextension zum Speichern des Bildes

Jetzt können wir mit unserer Hauptaufgabe anfangen. Die ist einen Web-Service Call mit REST aufbauen und der als Response empfangenes Bild zu bearbeiten und auf der Tabelle zu speichern. Der Synthax der REST Request ist auf der Seite http://barcodes4.me/apidocumentation#qr zu finden:

Dynamics 365 Business Central (Navision) - Synthax der Webdienst, die im Beispiel verwendet wird.

In der Codeunit müssen definiert werden:

  1. .NET Methoden zur HTTP-Kommunikation mit REST-Api.
  2. Methoden zur Bearbeitung des Streams.
  3. Eine Text-Konstante und Variable zum Aufbau des REST-Anfrage.

Dynamics 365 Business Central (Navision) - OData REST .NET Klasse zum Bearbeiten des Calls

Wir bauen eine allgemeine AL Methode, die erlaubt alle REST Methoden zu aufrufen (GET,POST,PUT,DELETE). Es kann zu anderen Zwecken verwendet werden. Im Beispiel brauchen wir nur GET. Die Methode hat einen Responseparamterart 'Text'. Im Beispiel wird er auch nicht verwendet, weil die REST-Response einen Stream übergibt.

Dynamics 365 Business Central (Navision) - HttpResponseMessage .NET Klasse.

Der Ablauf wird in den folgenden Sektionen ausgeführt:

  1. Die Codeunit ist ein Eventsubsriber zur Page "Debitorenkarte" zum 'OnAfterValidateEvent' des Feldes 'Home Page'.
  2. Sobald der Trigger ausgelöst wird und das Feld 'Homepage' einen Wert hat, wird einen REST-Call ausgeführt.
  3. Die REST-Request wird im Textwert 'RestUrl' aufgebaut und als Parameter in der Funktion 'CallRest' übergegeben.
  4. Wäre der REST-Response ein Text, könnten wir direkt weiter den Return-Parameter aus der Funktion CallREST bearbeiten. So ist es nicht der Fall, deswegen wird die Response weiter mit der HttpResponseMessage .NET Klasse als Stream zum neuen Feld (MediaSet) weggeschrieben.

Dynamics 365 Business Central (Navision) - Event Subscriber zu OData REST

Das Ergebnis ist hier zu sehen:

Dynamics 365 Business Central (Navision) - das finalle Ergebnis aus dem Beispiel. OData REST Api.

Dynamics 365 Business Central(TM) (Navision) Entwickler und Berater View Konrad Buczkowski's LinkedIn profile Konrad Buczkowski