Esta es una traducción automática. El mensaje original está disponible en Inglés.

ANVEDI Callback

La información de esta página es para instalaciones en el lugar de trabajo usando sólo los archivos FOB.

Si utiliza Microsoft Dynamics NAV 2017 o más reciente y Anveo EDI Connect 5.00 ofrece una nueva lógica de personalización basada en eventos. Recomendamos encarecidamente pasar a los nuevos eventos de integración, si es posible, para facilitar las actualizaciones a las nuevas versiones.

La Codeunit ANVEDI Callback con el ID 5327310 es el punto central si quieres cambiar el comportamiento de Anveo EDI Connect. Mantenemos la API de esta Codeunit constante, para que no tengas que sobrescribir este objeto cuando actualices nuestro módulo. Hay varias funciones que pueden ser modificadas por usted y algunas funciones de ayuda que no deben ser modificadas. Si ha actualizado el módulo y se pierde una función de ayuda que podría haber sido añadida en una versión más reciente, hay un segundo objeto llamado EDI Callback - Template con ID 5327313 donde encontrará la nueva funcionalidad.

OnFunction

El módulo le permite definir su propia funcionalidad, que puede ser llamada desde los mapas EDI. Puedes definir tantas funciones como necesites. Debe utilizar el caso predefinido y añadir llamadas a las funciones incorporadas FunctionName..FunctionName5.

No se debe poner ningún código fuera de la estructura de casos predefinida, ya que esta función puede ser llamada con bastante frecuencia y cualquier código adicional puede tener impactos negativos en el rendimiento.

CASE TRUE OF
  // ... other functions

  FunctionName('EXAMPLE', 'HelloWorld'):
    BEGIN
      FunctionResult('Hello World!');
      EXIT;
    END;
END;
Ejemplo: La función «Hola Mundo» en OnFunction

El número al final de la función de ayuda local FunctionName define el recuento de parámetros. Puede definir funciones con hasta cinco parámetros. Puede acceder al contenido de los parámetros llamando a las funciones GetTextParameter(ParNumber) y a las funciones similares para otros tipos de datos. El número del parámetro se cuenta de «1» a «5».

Cada función tiene que devolver un valor llamando a la función local con el nombre FunctionResult.

Debe llamar a la función FunctionResult sólo una vez. Es una buena práctica añadir una declaración de SALIDA directamente después de ella para evitar llamar a la función varias veces.

Puede elegir los nombres de los objetos y las funciones como desee.

Los primeros 29 caracteres de la combinación del nombre del objeto y de la función deben ser únicos para poder especificar los parámetros del mapping. Deberías tratar de mantener los nombres cortos.

Aquí una lista completa de las funciones disponibles para usar en la declaración CASE. A partir de Anveo EDI Connect 4.00:

  • FunctionName(ObjectName: Text; FunctionName: Text)
  • FunctionName1(ObjectName: Text; FunctionName: Text; ParamName1: Text)
  • FunctionName2(ObjectName: Text; FunctionName: Text; ParamName1: Text; ParamName2: Text)
  • FunctionName3(ObjectName: Text; FunctionName: Text; ParamName1: Text; ParamName2: Text; ParamName3: Text)
  • FunctionName4(ObjectName: Text; FunctionName: Text; ParamName1: Text; ParamName2: Text; ParamName3: Text; ParamName4: Text)
  • FunctionName5(ObjectName: Text; FunctionName: Text; ParamName1: Text; ParamName2: Text; ParamName3: Text; ParamName4: Text; ParamName5: Text)

Aquí una lista de la función que puede utilizar para acceder a los parámetros:

  • GetTextParameter(ParNum : Integer) : Text
    • Obtiene el parámetro e intenta lanzarlo a un tipo de texto de datos.
  • GetIntegerParameter(ParNum : Integer) : Integer
    • Obtiene el parámetro e intenta lanzarlo a un tipo de datos entero.
  • GetBooleanParameter(ParNum : Integer) : Boolean
    • Toma el parámetro e intenta lanzarlo a un tipo de datos booleanos.
  • GetDecimalParameter(ParNum : Integer) : Decimal
    • Toma el parámetro y trata de lanzarlo a un tipo de datos decimal.
  • GetDateParameter(ParNum : Integer) : Date
    • Obtiene el parámetro e intenta lanzarlo a la fecha de tipo de datos.
  • GetTimeParameter(ParNum : Integer) : Time
    • Obtiene el parámetro e intenta lanzarlo al tipo de datos de tiempo.
  • GetDateTimeParameter(ParNum : Integer) : DateTime
    • Toma el parámetro e intenta lanzarlo al tipo de datos fecha/hora.
  • GetParameter(ParNum : Integer;VAR EDIVariant : Codeunit
    • Obtiene el parámetro como una instancia de la unidad de Codeunit de la variante ANVEDI Variant.

CallbackRegistration

Esta función se llama cada vez que algo sucede en el módulo, a lo que puedes reaccionar. La función contiene una estructura de casos, donde se puede comprobar en el parámetro pasado CallbackSupport lo que pasó.

No se debe poner ningún código fuera de la estructura de casos predefinida, ya que esta función puede ser llamada con bastante frecuencia y cualquier código adicional puede tener impactos negativos en el rendimiento.

Esta estructura puede parecer inusual para los desarrolladores de C/AL, pero podemos de esta manera añadir funcionalidad, sin necesidad de actualizar la unidad de Codeunit de devolución de ANVEDI Callback.

Los eventos disponibles son definidos por el Soporte ANVEDI Callback Support la Unidad de Codeunit. En las siguientes secciones discutiremos los eventos disponibles.

OnJobCallback

Puedes usar la unidad de codeunit de trabajo del módulo para definir trabajos personalizados. La codeunit de código permite soportar el uso de múltiples parámetros. Puede encontrar más información en la documentación del encargado del trabajo.

OnAcceptTransmission

Esta función se llama para determinar si un archivo o mensaje debe ser aceptado o ignorado por el módulo. El módulo no almacena si una transmisión fue ignorada y llamará a esta función cada vez que vea una transmisión. El archivo aún no se ha leído, así que sólo puede decidir en base a los metadatos disponibles.

Parámetros:

EDITransmission

Un registro de la tabla de EDI Transmission con los datos que se conocen hasta ahora. El registro aún no está escrito.

Si reacciona a este evento, debe llamar a la siguiente función:

HandleAcceptTransmission(Result : Boolean;VAR EDITransmission : Record "ANVEDI Transmission")

Parámetros:

Result

Si recibir la transmisión o no. El valor True significa que quieres recibir los datos, el valor False que quieres ignorar la transmisión.

EDITransmission

Deberías pasar el registro de la llamada de la OnAcceptTransmission a este parámetro.

CASE TRUE OF
  // ...
  CallbackSupport.OnAcceptTransmission(ANVEDITransmission):
    BEGIN
      // Ignore files with the name "FileList.txt"
      // Usually you also want to check the communication channel etc. to only run this for specific channels
      IF ANVEDITransmission."Tag 2" = 'FileList.txt' THEN BEGIN
        CallbackSupport.AcceptTransmission(FALSE. ANVEDITransmission);
      END ELSE BEGIN
        CallbackSupport.AcceptTransmission(TRUE. ANVEDITransmission);
      END;
    END;
  END;
END;
Ejemplo: OnAcceptTransmission

OnBeforeList

Este código se llama antes de que el módulo busque nuevos datos. Esto puede ser usado para emitir un comando o script externo para recibir los archivos, antes de que el módulo busque nuevos datos.

Parámetros:

EDICommunicationChannel

Especifica un registro de datos de la tabla de EDI Communication Channel en el que se buscarán los nuevos mensajes.

Este evento no requiere una llamada a otra función ya que no soporta ningún valor de retorno.

OnAfterList

Este código se llama después de que el módulo haya buscado nuevos datos.

Parámetros:

EDICommunicationChannel

Especifica un registro de datos de la tabla de EDI Communication Channel.

Este evento no requiere una llamada a otra función ya que no soporta ningún valor de retorno.

OnBeforeReceive

Este evento se llama antes de que se recupere una transmisión.

Parámetros:

EDITransmission

Especifica un registro de datos de la tabla de EDI Transmission.

Este evento no requiere una llamada a otra función ya que no soporta ningún valor de retorno.

OnAfterReceive

Este evento se llama después de recibir una transmisión.

Parámetros:

EDITransmission

Especifica un registro de datos de la tabla de EDI Transmission.

Este evento no requiere una llamada a otra función ya que no soporta ningún valor de retorno.

OnBeforeArchive

Este evento es llamado antes de que se archive una transmisión.

Parámetros:

EDITransmission

Especifica un registro de datos de la tabla de EDI Transmission.

Este evento no requiere una llamada a otra función ya que no soporta ningún valor de retorno.

OnAfterArchive

Este evento es llamado después de que una transmisión es archivada.

Parámetros:

EDITransmission

Especifica un registro de datos de la tabla de EDI Transmission.

Este evento no requiere una llamada a otra función ya que no soporta ningún valor de retorno.

OnBeforeDelete

Este evento se llama antes de que se borre una transmisión.

Parámetros:

EDITransmission

Especifica un registro de datos de la tabla de EDI Transmission.

Este evento no requiere una llamada a otra función ya que no soporta ningún valor de retorno.

OnAfterDelete

Este evento se llama después de que se borra una transmisión.

Parámetros:

EDITransmission

Especifica un registro de datos de la tabla de EDI Transmission.

Este evento no requiere una llamada a otra función ya que no soporta ningún valor de retorno.

OnBeforeSend

Este evento es llamado antes de que se envíe una transmisión.

Parámetros:

EDITransmission

Especifica un registro de datos de la tabla de EDI Transmission.

Cuando se reacciona a este evento hay que llamar a la función:

HandleBeforeSendTransmission(Result, EDITransmission)
Result

Si enviar o no la transmisión. El valor True significa que la transmisión debe ser enviada.

EDITransmission

La transmisión que recibiste con la llamada del evento.

OnComposeMessage

Este evento se llama cuando se compone una transmisión.

Parámetros:

EDITransmission

Especifica un registro de datos de la tabla de EDI Transmission.

Este evento no requiere una llamada a otra función ya que no soporta ningún valor de retorno.

OnAfterSend

Este evento se llama después de que se envía una transmisión.

Parámetros:

EDITransmission

Especifica un registro de datos de la tabla de EDI Transmission.

Cuando se reacciona a este evento hay que llamar a la función:

HandleAfterSendTransmission(Result, EDITransmission)
Result

El resultado es actualmente ignorado.

EDITransmission

La transmisión que recibiste con la llamada del evento.

OnReplacePlaceholder

Esta función se llama cuando se evalúa una cadena que puede contener variables definidas por el usuario, como un nombre de archivo.

Puede encontrar un ejemplo a continuación:

If Placeholder = 'MyNumber' THEN BEGIN
    IF EDILinkedDocument.FINDSET THEN REPEAT
      RecID := EDILinkedDocument."Record ID";
      IF (RecID.TABLENO = DATABASE::"EDI Document") THEN BEGIN
        RecRef.GET(EDILinkedDocument."Record ID");
        RecRef.SETTABLE(EDIDocument);
        CallbackSupport.HandleReplacePlaceholder(TRUE, EDIDocument."System Document No.");
        EXIT;
      END;
    UNTIL EDILinkedDocument.NEXT = 0;
  
    CallbackSupport.HandleReplacePlaceholder(FALSE, '');
  END ELSE BEGIN
    CallbackSupport.HandleReplacePlaceholder(FALSE, '');
  END;
Ejemplo de código: OnReplacePlaceholder

Parámetros:

Placeholder

El nombre de la variable entre los corchetes para la que se busca un valor.

Al reaccionar a este evento, deberías llamar a la función:

CallbackSupport.HandleReplacePlaceholder(Result,Value)

Parámetros:

Result

Si quieres devolver un valor. Si devuelve True debe especificar un valor para la variable. Puedes anular las variables del sistema.

Value

El valor que debe utilizarse.

OnError

Este evento se llama cuando se produce un error en la cola de procesamiento.

Parámetros:

EDIProcessingQueue

Una instancia de la tabla Cola de Procesamiento EDI Processing Queue cuyo procesamiento falló.

AfterProcess

Este evento se llama después del procesamiento de una entrada en la tabla Cola de Procesamiento EDI Processing Queue. Deberías comprobar el estado de la entrada aprobada y reaccionar en consecuencia.

Parámetros:

EDIProcessingQueue

Una instancia de la tabla Cola de Procesamiento EDI Processing Queue que fue procesada.

LookupLinkedDocument

Esta función se llama desde la lista de documentos vinculados, si el usuario desea abrir la página de la tarjeta. Hay algunas páginas predefinidas en el módulo e intentamos volver a la página de búsqueda por defecto, en caso de que esta función devuelva False.

LookupLinkedDocument(RecRef: RecordRef) : Boolean
RecRef

El registro para el cual el usuario quiere abrir la página.

Valor de retorno

Un valor booleano. Devuelve el valor True, si la página fue abierta por esta función; False en caso contrario.

     CASE RecRef.NUMBER OF
       DATABASE::"Sales Header":
          BEGIN
            RecRef.SETTABLE(SalesHeader);
            PAGE.RUN(PAGE::"Sales Order", SalesHeader);
            EXIT(TRUE);
          END;
      END;
Ejemplo de código: Abrir la página de la tarjeta para el pedido de venta

BeforeConvert

Esta función se llama antes de que se inicie un mapping. La llamada está dentro de la transacción de la base de datos del mapping. Puedes cancelar la ejecución del mapping, antes de que el mapping haya empezado, devolviendo el valor True. En general, no recomendamos utilizar esta función. Si desea llamar a un código personalizado, por favor, utilice el nuevo CallbackRegistration o la funcionalidad OnFunction.

AfterConvert

Esta función se llama después de que un mapping haya terminado con éxito. La llamada está dentro de la transacción de la base de datos del mapping. En general, no recomendamos utilizar esta función. Si desea llamar a un código personalizado, por favor, utilice el nuevo CallbackRegistration o la funcionalidad OnFunction.

En Anveo EDI Connect 4.00 agregamos a los eventos la función CallbackRegistration llamada OnError y AfterProcess. Por favor, use la nueva funcionalidad, si es posible.

Referencias cruzadas

Puedes definir tu propia lógica de referencias cruzadas. Esta funcionalidad se llama, cuando el tipo de referencia cruzada está configurado para llamar callback vuelta. A menudo recomendamos usar mapeos en lugar de código de devolución de llamada personalizado para facilitar la lectura de los mapeos. El código de referencia cruzada personalizado es, desde nuestro punto de vista, más difícil de mantener.

ValidateCrossReferenceNumber

Comprueba si un número de referencia externa es válido.

esta función está desaprobada y no debe utilizarse.

GetInternalNo

Devuelve un número interno de uno externo.

GetInternalNo(TableID: Integer; FieldNo: Integer; RelationTableID: Integer; RelationFieldNo: Integer; RelationTableView: Text[1024]; RelationTableViewPar1: Variant; VAR InternalNo: Code[20]; EDICrossReferenceType: Record 5327361; ExternalNo: Text[64]; EDIProject: Code[20]) : Boolean

GetExternalNo

Devuelve un número externo de uno interno.

GetExternalNo(TableID: Integer; FieldNo: Integer; RelationTableID: Integer; RelationFieldNo: Integer; RelationTableView: Text[1024]; RelationTableViewPar1: Variant; InternalNo: Code[20]; EDICrossReferenceType: Record 5327361; VAR ExternalNo: Text[64]; EDIProject: Code[20]) : Boolean

UpdateCrossReference

Se llama si el usuario intenta actualizar una referencia cruzada.

UpdateCrossReference(TableID : Integer; FieldNo: Integer; RelationTableID: Integer; RelationFieldNo: Integer; RelationTableView: Text[1024]; RelationTableViewPar1: Variant; InternalNo: Code[20]; EDICrossReferenceType: Record 5327361; CrossReference: Text[64]; EDIProject : Code[20])

Funciones desaprobadas

La funcionalidad que figura a continuación sólo está parcialmente implementada y, por lo tanto, no es segura. Recomendamos usar los filtros de seguridad predeterminados de Microsoft Dynamics 365 Business Central y dejar las dos funciones vacías.

ApplyUserFilter

Permite filtrar los datos pasados de manera que el usuario pueda cambiar el filtro más adelante. Ya no se recomienda el uso de esta función. La función podría ser eliminada en versiones más recientes.

ApplySecurityFilter

Permite filtrar los datos de manera que el filtro no pueda ser cambiado por el usuario. Esta función no se llama en todos los casos. Ya no se recomienda el uso de esta función. La función podría ser eliminada en versiones más recientes.