Anveo EDI Connect / Config / Développement / Intégration / Gestionnaire de communication personnalisé
This is an automatic translation. The original post is available in Anglais.

Gestionnaire de communication personnalisé

Dans Anveo EDI Connect, vous pouvez utiliser des codeunits personnalisées pour gérer l’échange de données. Vous pouvez choisir de ne mettre en œuvre que les méthodes dont vous avez besoin et de n’autoriser, par exemple, que l’envoi de fichiers.

Les codeunits de communication personnalisées sont prises en charge dans toutes les versions de notre module. Nous l’illustrerons en nous basant sur une extension dynamique écrite en AL, mais il en va de même pour les anciennes plateformes de développement.

Si vous utilisez la version Dynamics Extension d’Anveo EDI Connect, vous pouvez également fournir un service HTTP/HTTPs dans n’importe quel langage de programmation sans créer de Dynamics Extension. La définition de l’API est disponible sur demande auprès de notre équipe de soutien EDI.

Utilisation d’un gestionnaire de communication personnalisé

Si votre système dispose d’un gestionnaire de communication personnalisé, vous aurez besoin de son codeunit pour configurer le canal de communication. Vous pouvez le configurer comme n’importe quel gestionnaire de communication intégré, mais vous devrez entrer le Codeunit ID à la main. La recherche ne vous permettra pas de sélectionner votre gestionnaire personnalisé. Ensuite, rafraîchissez la page et configurez la chaîne, si nécessaire en cliquant sur Configure.

Exigences de base

L’codeunit de communication personnalisée recevra un enregistrement spécial « ANVEDI Format Control » du module transmis au déclencheur OnRun. Vous devrez obtenir l’action de communication demandée à partir de cet enregistrement et appeler votre code en conséquence.

Exemple

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;
}

Dépendances

Si vous souhaitez créer un gestionnaire de communication personnalisé dans AL, vous devez ajouter une dépendance au module Anveo EDI Connect.

Les valeurs pour l’extension sur site sont les suivantes

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

Veillez à remplacer x, y, z par le numéro de version correct.

Les valeurs pour l’extension en ligne du Business Central sont les suivantes

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

Veillez à remplacer x, y, z par le numéro de version correct.