Barcode-as-a-Service in C/AL

Author

Daniel Gorski

CEO

2 Min. Lesezeit

Barcodes per API in C/AL integrieren

The smartest way to manage your barcodes

#Barcodes für alle!

👉 www.beyondbarcodes.de bietet eine schnelle und sehr einfache Möglichkeit, eine Barcode-API zu implementieren.
👉 Wir wollen alle glücklich machen, die sich mit Barcodes herumschlagen müssen.
👉 Holen Sie sich einen Account und werden Sie Barcode-Millionär! Wir bieten >1.000.000 Aufrufe pro Monat.

Unsere Featureliste wächst, das Backlog ist voll, wir erweitern unseren Funktionsumfang laufend!

Barcode-Beispielbild API Integration in C/AL

In C/AL kann ein Barcode über unsere API angesprochen werden. Im folgenden Beispiel wird die Kred.-Artikelnr. als String übergeben, in einen Barcode (Code128) konvertiert und als Bild (Standard-Feld BLOB) am Artikel gespeichert.

Get-Barcode-Function

IF ('' IN [Item."Vendor Item No.", Item."No."]) THEN
 EXIT(FALSE);

method := STRSUBSTNO('%1/%2?token=%3&height=%4',
type::CODE128,
Item."Vendor Item No.",
'YOUR-TOKEN',
100
);
Consume('https://api.beyondbarcodes.de/v1/barcode/', method, 'GET', HttpResponseMessage);

MemoryStream := HttpResponseMessage.Content.ReadAsStreamAsync.Result;
Item.Picture.CREATEOUTSTREAM(OutStr);
MemoryStream.WriteTo(OutStr);
EXIT(Item.MODIFY);

Consume-Function

HttpClient := HttpClient.HttpClient();
HttpClient.BaseAddress := Uri.Uri(BaseUrl);
HttpResponseMessage := HttpClient.GetAsync(Method).Result;
HttpResponseMessage.EnsureSuccessStatusCode();

Hier steht die Codeunit 50000 als Implementationsbeispiel zum Download zur Verfügung:

C50000_C_AL.txt

OBJECT Codeunit 50000 Beyondbarcodes Webservice
{
OBJECT-PROPERTIES
{
Date=11.01.21;
Time=12:00:00;
Version List=beyondbarcodes.de;
}
PROPERTIES
{
TableNo=27;
OnRun=BEGIN
END;

}
CODE
{

    PROCEDURE GetBarcode@50001(VAR Item@50000 : Record 27) : Boolean;
    VAR
      method@50006 : Text;
      type@50005 : 'CODE128,CODE128A,CODE128B,CODE128C,CODE39,EAN13,EAN8,EAN5,EAN2,UPC';
      WebUtility@50004 : DotNet "'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Net.WebUtility";
      HttpResponseMessage@50003 : DotNet "'System.Net.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.System.Net.Http.HttpResponseMessage";
      MemoryStream@50002 : DotNet "'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.IO.MemoryStream";
      OutStr@50001 : OutStream;
    BEGIN
      IF ('' IN [Item."Vendor Item No.",Item."No."]) THEN
        EXIT(FALSE);

      method := STRSUBSTNO('%1/%2?token=%3&height=%4',
        type::CODE128,
        Item."Vendor Item No.",
        'YOUR-TOKEN',
        100
      );

      Consume('https://api.beyondbarcodes.de/v1/barcode/',method,'GET',HttpResponseMessage);

      MemoryStream := HttpResponseMessage.Content.ReadAsStreamAsync.Result;
      Item.Picture.CREATEOUTSTREAM(OutStr);
      MemoryStream.WriteTo(OutStr);
      EXIT(Item.MODIFY);
    END;

    [TryFunction]
    PROCEDURE Consume@50000(BaseUrl@50003 : Text;Method@50002 : Text;RestMethod@50001 : Text;VAR HttpResponseMessage@50000 : DotNet "'System.Net.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.System.Net.Http.HttpResponseMessage");
    VAR
      HttpClient@50005 : DotNet "'System.Net.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.System.Net.Http.HttpClient";
      Uri@50004 : DotNet "'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Uri";
    BEGIN
      HttpClient := HttpClient.HttpClient();
      HttpClient.BaseAddress := Uri.Uri(BaseUrl);
      HttpResponseMessage := HttpClient.GetAsync(Method).Result;
      HttpResponseMessage.EnsureSuccessStatusCode();
    END;

    BEGIN
    END.

}
}