Anveo EDI Connect / Config / Entwicklung / Integration / Benutzerdefinierter Kommunikations-Handler
This is an automatic translation. The original post is available in Englisch.

Benutzerdefinierter Kommunikations-Handler

In Anveo EDI Connect können Sie benutzerdefinierte Codeunits zur Abwicklung des Datenaustauschs verwenden. Sie können sich dafür entscheiden, nur die Methoden zu implementieren, die Sie benötigen, und z.B. nur das Versenden von Dateien zulassen.

Benutzerdefinierte Codeunits werden von allen Versionen unseres Moduls unterstützt. Wir werden es anhand einer in AL geschriebenen Dynamics Extension veranschaulichen, aber das gleiche gilt für die älteren Entwicklungsplattformen.

Wenn Sie die Dynamics Extension-Version von Anveo EDI Connect verwenden, können Sie alternativ einen HTTP/HTTPs-Dienst in einer beliebigen Programmiersprache anbieten, ohne eine Dynamics Extension zu erstellen. Die API-Definition ist auf Anfrage bei unserem EDI-Supportteam erhältlich.

Verwendung eines benutzerdefinierten Kommunikationshandlers

Wenn Ihr System über einen benutzerdefinierten Kommunikationshandler verfügt, benötigen Sie dessen Codeunit, um den Kommunikationskanal einzurichten. Sie können es wie jeden anderen integrierten Kommunikationshandler einrichten, aber Sie müssen die Codeunit ID (Codeunit ID) von Hand eingeben. Die Suche erlaubt es Ihnen nicht, Ihren benutzerdefinierten Handler auszuwählen. Aktualisieren Sie anschließend die Seite und konfigurieren Sie den Kanal, gegebenenfalls durch Klicken auf Einrichten.

Grundlegende Anforderungen

Die benutzerdefinierte Codeunit erhält einen speziellen Datensatz „ANVEDI Format Control“ vom Modul, der an den OnRun-Trigger übergeben wird. Sie müssen die angeforderte Kommunikationsmaßnahme aus diesem Datensatz holen und Ihren Code entsprechend aufrufen.

Beispiel

codeunit 50000 "My Anveo File Handler"
{
    TableNo = "ANVEDI Format Control";

    trigger OnRun()
    var
        EDICommunicationChannel: Record "ANVEDI Communication Channel";
        EDITransmission: Record "ANVEDI Transmission";
        ProcessingQueue: Record "ANVEDI Processing Queue";
    begin
        ProcessingQueue.Get("Processing Queue Entry No.");

        ProcessingQueue.TestField("Communication Channel");
        EDICommunicationChannel.Get(ProcessingQueue."Communication Channel");

        if Action in [Action::Receive, Action::Send,="" Action::Archive,="" Action::Delete]=""] then begin
          EDITransmission.Get(ProcessingQueue."Transmission Entry No.");
        end;

        case Action of
          Action::Connect:
            // Call your code to establish a connection
            ;
          Action::Close:
            // Your code to close a connection
            ;
          Action::"Configure Comm.":
            // Show configuration options
            ;
          Action::"Receive/List":
            ListFiles(EDICommunicationChannel);
          Action::Receive:
            ReceiveFile(EDICommunicationChannel, EDITransmission);
          Action::Send:
            SendFile(EDICommunicationChannel, EDITransmission);
          Action::Archive:
            ArchiveFile(EDICommunicationChannel, EDITransmission);
          Action::Delete:
            DeleteFile(EDICommunicationChannel, EDITransmission);
          else
            Error(NotSupportedErr);
        end;
    end;

    var
        NotSupportedErr: Label 'Not supported by communication codeunit.';
        EDICommunicationMgmt: Codeunit "ANVEDI Communication Mgmt";

    local procedure ListFiles(EDICommunicationChannel: Record "ANVEDI Communication Channel")
    var
        Transmission: Record "ANVEDI Transmission";
    begin
        // Create one transmission per message you want to import. 
        // We recommend to check the transmission table for the same comm. channel with the same "Tag 1" and  "Tag 2" 
        // to prevent receiving the same message again, before inserting a new transmission

        Transmission.Init;
        Transmission."Entry No." := 0;

        Transmission.Validate(Direction, Transmission.Direction::Incoming);
        Transmission.Validate("Communication Channel Code", EDICommunicationChannel.Code);
        Transmission.Validate(Description, 'Example file');
        Transmission.Validate("Tag 1", 'Some data to identify');
        Transmission.Validate("Tag 2", 'More data');
        Transmission.Validate("Transmission Date/Time", CURRENTDATETIME);

        EDICommunicationMgmt.InsertTransmissionAndReceive(EDICommunicationChannel, Transmission);
          
    end;


    local procedure ReceiveFile(EDICommunicationChannel: Record "ANVEDI Communication Channel";EDITransmission: Record "ANVEDI Transmission")
    var
        EDIMessage: Record "ANVEDI Message";
        EDIProcessingQueue: Record "ANVEDI Processing Queue";
        MessageFile: File;
        InS: InStream;
        OutS: OutStream;
    begin
        EDIMessage.Init;
        EDIMessage.Validate("Transmission Entry No.", EDITransmission."Entry No.");
        
        EDIMessage.CreateOutStream(OutS);
       
        // Get the data and write it to OutS

        EDIMessage.Insert(true);

        // If you want to call archive afterwards:
        EDIProcessingQueue."Processing Type" := EDIProcessingQueue."Processing Type"::Archive;
        EDIProcessingQueue."Communication Channel" := EDICommunicationChannel.Code;
        EDIProcessingQueue."Transmission Entry No." := EDITransmission."Entry No.";
        EDIProcessingQueue.Insert(true);
           
        // If you want to call delete afterwards
        EDIProcessingQueue."Processing Type" := EDIProcessingQueue."Processing Type"::Delete;
        EDIProcessingQueue."Communication Channel" := EDICommunicationChannel.Code;
        EDIProcessingQueue."Transmission Entry No." := EDITransmission."Entry No.";
        EDIProcessingQueue.Insert(true);
        
        // Release the message
        EDIMessage.Release();
    end;

    local procedure DeleteFile(EDICommunicationChannel: Record "ANVEDI Communication Channel";EDITransmission: Record "ANVEDI Transmission")
    begin
        // Your code here
    end;

    local procedure ArchiveFile(EDICommunicationChannel: Record "ANVEDI Communication Channel";EDITransmission: Record "ANVEDI Transmission")
    begin
       // Your code here
    end;

    local procedure SendFile(EDICommunicationChannel: Record "ANVEDI Communication Channel";EDITransmission: Record "ANVEDI Transmission")
    var
        EDIMessage: Record "ANVEDI Message";
        InS: InStream;
    begin
        EDIMessage.SetRange(EDIMessage."Transmission Entry No.", EDITransmission."Entry No.");

        if EDIMessage.FindSet then begin
          repeat

            if EDIMessage.CREATEINSTREAM(InS) then begin
              // Send the data using the stream
            end;

            EDIMessage.CLOSE();
          until EDIMessage.Next = 0;
        end;
    end;
}

Abhängigkeiten

Wenn Sie einen benutzerdefinierten Kommunikationshandler in AL erstellen möchten, müssen Sie eine Abhängigkeit zum Anveo EDI Connect-Modul hinzufügen.

Die Werte für die OnPremise Extension sind:

{
      "appId": "25286BD2-B08A-49F9-B613-64122CCEE4E1",
      "name": "Anveo EDI Connect - OnPremise",
      "publisher": "conion media GmbH",
      "version": "5.x.y.z"
}

Bitte stellen Sie sicher, dass x, y, z durch die richtige Versionsnummer ersetzt werden.

Die Werte für die Business Central Online Extension sind:

{
      "appId": "FC195C4F-19BF-4167-BFE8-6D1FF7D266BC",
      "name": "Anveo EDI Connect",
      "publisher": "conion media GmbH",
      "version": "5.x.y.z"
}

Bitte stellen Sie sicher, dass x, y, z durch die richtige Versionsnummer ersetzt werden.