Anveo EDI Connect / Config / Desarrollo / Integración / Manipulador de comunicación personalizada
This is an automatic translation. The original post is available in Inglés.

Manipulador de comunicación personalizada

En Anveo EDI Connect puedes usar codeunits personalizadas para manejar el intercambio de datos. Puede optar por implementar sólo los métodos que necesite y permitir, por ejemplo, sólo el envío de archivos.

Las codeunits de código de comunicación personalizadas están soportadas en todas las versiones de nuestro módulo. Lo ilustraremos basándonos en una Extensión de la Dinámica escrita en AL, pero lo mismo se aplica a las plataformas de desarrollo más antiguas.

Si está usando la versión de Dynamics Extension de Anveo EDI Connect, puede proporcionar alternativamente un servicio HTTP/HTTPs en cualquier lenguaje de programación sin crear ninguna Dynamics Extension. La definición de la API está disponible a petición de nuestro equipo de soporte EDI.

Usando un manejador de comunicación personalizado

Si su sistema tiene un controlador de comunicación personalizado, necesitará su codeunit de identificación para configurar el canal de comunicación. Puedes configurarlo como cualquier manejador de comunicación integrado, pero tendrás que introducir el Codeunit ID de código a mano. La búsqueda no le permitirá seleccionar su manejador personalizado. Después refresca la página y configura el canal, si es necesario haciendo clic en Configure.

Requisitos básicos

La codeunit de código de comunicación personalizada obtendrá un registro especial «Control de Formato ANVEDI» del módulo pasado al disparador OnRun. Tendrá que obtener la acción de comunicación solicitada de ese registro y llamar a su código en consecuencia.

Ejemplo

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

Dependencias

Si quieres crear un manejador de comunicación personalizado en AL, necesitas añadir una dependencia al módulo Anveo EDI Connect.

Los valores de la Extensión en el lugar son:

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

Por favor, asegúrate de reemplazar x, y, z con el número de versión correcto.

Los valores de la Extensión Online de Business Central son:

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

Por favor, asegúrate de reemplazar x, y, z con el número de versión correcto.