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

ANVEDI Integration

La unidad de codeunit de ANVEDI Integration contiene todas las llamadas públicas de la API al módulo EDI, puede que quieras llamar desde tu código personalizado. Se supone que todas las funciones de esta unidad de codeunit deben ser usadas, si quieres iniciar directamente una acción EDI por código.

Conceptos generales

En esta sección discutiremos primero los conceptos básicos, que deben entender para poder leer los ejemplos de código.

Transacciones del usuario

Anveo EDI Connect tiene un concepto denominado «transacciones de usuario», que puede abarcar múltiples transacciones de la base de datos y recoger múltiples errores. La mayoría de las acciones en Anveo EDI Connect requerirán una transacción de usuario abierta para ejecutarlas. Puede iniciar una transacción de usuario llamando:

// Start a new user transaction with the description given by TextDescription
ANVEDIIntegration.BEGIN_USER_TRANSACTION(TextDescription);

// Your EDI code

// End the user transaction and show an error list, if there were any
ANVEDIIntegration.END_USER_TRANSACTION(TRUE, FALSE);
Ejemplo: Iniciar una transacción de usuario

La llamada a END_USER_TRANSACTION permite mostrar errores, romper la transacción actual de la base de datos u obtener un valor de retorno, si hubo un error. Lo discutiremos en detalle más tarde.

BEGIN_USER_TRANSACTION

Inicia una nueva transacción de usuario. Tenga en cuenta que sólo se integran las llamadas en el módulo EDI en los puntos en los que puede tener lugar un COMITÉ. En muchos casos, el módulo confirmará todos los cambios de la base de datos antes de ejecutar la lógica del EDI. También considere simplemente marcar los datos y usar un trabajo de fondo para ejecutar la lógica del EDI.

Si se abre un diálogo de espera, se muestra al usuario el texto dado, porque el proceso lleva tiempo.

BEGIN_USER_TRANSACTION(Text : Text[1024])

Siempre debes terminar una llamada a BEGIN_USER_TRANSACTION con una llamada a END_USER_TRANSACTION.

SHOWDIALOGS

Esta función puede utilizarse para ocultar cualquier diálogo EDI.

SHOWDIALOGS(ShowDialogs : Boolean)

El parámetro especifica si los diálogos se muestran o no. Una llamada a esta función tiene que ser dentro de una transacción de usuario. Normalmente llamará a esta función directamente después de BEGIN_USER_TRANSACTION.

ISPROCESSING

Esta función devuelve si está dentro de una ejecución mapping. Puede verificar este valor al validar los disparadores, por ejemplo, para lograr un comportamiento diferente al procesar procesos EDI. También puede utilizar este valor para visualizar los diálogos de entrada sólo cuando no esté procesando EDI.

END_USER_TRANSACTION

Esta función pondrá fin a una transacción de usuario.

END_USER_TRANSACTION(ShowErrorList : Boolean; BreakOnError : Boolean) Success : Boolean
ShowErrorList

Si se produjeron errores durante la transacción, mostrarlos en un diálogo al usuario final. Este parámetro no tiene ningún efecto, si GUIALLOWED es False.

BreakOnError

Si el módulo debe lanzar un error, rompiendo el flujo de proceso actual. Todo el código después de esta línea no se ejecuta, si hubo un error durante la transacción. Si se ajusta este parámetro a True, se mostrará un mensaje de error que indica que se han producido uno o más errores, si es que los ha habido. En este caso el usuario no puede ver la lista completa de errores.

Success

Un valor de retorno, haya habido o no un error. Retorna True en el éxito, es decir no hubo errores; False de otra manera.

El valor de retorno se denominaba de forma diferente en las versiones antiguas del módulo, pero tenía la misma función. El antiguo nombre del valor de retorno era incorrecto, la función siempre retornaba True en el éxito.

Trabajar con transacciones comerciales

RUN_BUSINESSTRANSACTION_JOB

Ejecuta el trabajo de recolección de datos de un tipo de transacción comercial específico. Esto tiene que ser llamado desde el interior de una transacción de usuario.

RUN_BUSINESSTRANSACTION_JOB(BusinessTransactionTypeCode : Code[20])
BusinessTransactionTypeCode

Código del tipo de transacción comercial.

// Start a new user transaction with the description given by TextDescription
ANVEDIIntegration.BEGIN_USER_TRANSACTION(TextDescription);

// Collects the data of the Business Transaction Type "INVOICE_OUT" and processes the mappings
ANVEDIIntegration.RUN_BUSINESSTRANSACTION_JOB('INVOICE_OUT');

// End the user transaction and show an error list, if there were any
ANVEDIIntegration.END_USER_TRANSACTION(TRUE, FALSE);
Ejemplo: Ejecutar el trabajo de recopilación de datos de transacciones comerciales

START_BT_WITH_REC

Comienza una nueva transacción comercial para el código y la identificación de registro dados.

START_BT_WITH_REC(BusinessTransactionTypeCode : Code[20];RecID : RecordID)

RUN_BT_BATCH_JOB

Ejecuta el trabajo de recolección de lotes con el nombre especificado. Esto tiene que ser llamado desde el interior de una transacción de usuario.

RUN_BT_BATCH_JOB(BatchCode : Code[20])

Acciones

A veces se quiere crear un botón en una página para iniciar un proceso de EDI, o se quiere integrar, por ejemplo, en el proceso de liberación. En este caso se pueden ejecutar casi todas las acciones del módulo desde el código. Por favor, tenga en cuenta que los procesos de EDI normalmente deben ser automatizados y ejecutados en segundo plano. Así que antes de añadir acciones en código, considere la posibilidad de un trabajo de fondo como una alternativa.

Ejecutar un Mapping EDI

Para ejecutar un Mapping EDI necesitaremos iniciar una transacción de usuario. Después podríamos querer pasar los datos al mapping. Podemos entonces ejecutar el mapping y comprobar el resultado cuando terminemos la transacción del usuario. Encontrará la descripción detallada de los comandos después del ejemplo de código.

// Start a new user transaction with the description given by TextDescription
ANVEDIIntegration.BEGIN_USER_TRANSACTION(TextDescription);

// Reset any existing table views
ANVEDIIntegration.RESET_TABLEVIEWS();

// Copy sales invoice header from Rec to a local variable
SalesInvoiceHeader := Rec;
// Filter the local variable to the current record
SalesInvoiceHeader.SETRECFILTER;
// Store the filter to the record under the name INVOICE
ANVEDIIntegration.SET_TABLEVIEW('INVOICE', SalesInvoiceHeader.GETVIEW(FALSE));

// Run the mapping EXAMPLE, NAV, INVOICE. You can access the invoice header, by adding the table and setting the filter to a named table view and enter INVOICE as the name. In general, you can pass as many filters as you need to the mapping.
ANVEDIIntegration.RUN('EXAMPLE', 'NAV', 'INVOICE', FALSE, TRUE, '');

// End the user transaction and show an error list, if there were any
ANVEDIIntegration.END_USER_TRANSACTION(TRUE, FALSE);
Ejemplo de código: Ejecutar un mapping para exportar una factura

RESET_TABLEVIEWS

Restablece todas las vistas de tablas almacenadas existentes. Tiene que ser llamado desde el interior de una transacción de usuario.

RESET_TABLEVIEWS()

SET_TABLEVIEW

Almacena una vista de tabla con un nombre específico. Tiene que ser llamado desde el interior de una transacción de usuario.

SET_TABLEVIEW(FilterName : Code[30];FilterText : Text[1024])
FilterName

Un código que representa el nombre del filtro. Tendrá que especificar exactamente el mismo nombre en el EDI Mapping para recuperar el filtro.

FilterText

El texto del filtro en forma de una vista de tabla de Anveo EDI Connect. Deberías usar la función incorporada de Microsoft Dynamics NAV 2018 GETVIEW, si es posible, para obtener la cadena correctamente formateada.

GET_TABLEVIEW

Recupera un filtro almacenado. Tiene que ser llamado desde el interior de una transacción de usuario.

GET_TABLEVIEW(FilterName : Code[30]) : Text[1024]

RUN

Ejecute uno o más mapeos EDI. Tiene que ser llamado desde el interior de una transacción de usuario.

RUN(ProjectFilter : Text[250];FormatFilter : Text[250];CodeFilter : Text[250];MultipleAllowed : Boolean;ProcessFollowing : Boolean;ProcessingQueueView : Text[250])
ProjectFilter

El código del proyecto o una cadena de filtro que coincida con el código del proyecto.

FormatFilter

El código del formato mapping o una cadena de filtro que coincida con el código del formato.

CodeFilter

El código del mapping o un filtro que coincida con los códigos de mapping deseados.

MultipleAllowed

Si deben ejecutarse múltiples mapeos en caso de que se especifique un filtro. Esta es una característica de seguridad, que impide que se ejecute más de un mapping.

ProcessFollowing

Si el post-procesamiento debe ser ejecutado. Normalmente quieres poner esto en True.

ProcessingQueueView

Un filtro en los post-procesos. Normalmente puedes querer pasar en una cuerda vacía.

Otras acciones

RECEIVE_ALL

Función desaprobada. Debes evitar llamar a la función general y llamar a una de las más específicas a continuación.

Recibe todos los canales de comunicación. Esta función tiene que ser llamada desde el interior de una transacción de usuario.

RECEIVE_ALL(ProcessFollowing : Boolean;ProcessingQueueView : Text[250])

RECEIVE_FOLDER

Recibe los datos de la carpeta de transmisión especificada o de las carpetas. Esta función debe ser llamada desde el interior de una transacción de usuario.

RECEIVE_FOLDER(TransmissionFolderCodeFilter : Text[250];ProcessFollowing : Boolean;ProcessingQueueView : Text[250])
TransmissionFolderCodeFilter

El código del filtro de transmisión o una cadena de filtro en el campo de código.

ProcessFollowing

Si el post-procesamiento debe ser ejecutado. Normalmente quieres poner esto en True.

ProcessQueueView

Un filtro en los post-procesos. Normalmente puedes querer pasar en una cuerda vacía.

RECEIVE_COMMUNICATIONCHANNEL

Recibe datos del canal de comunicación especificado. Esta función tiene que ser llamada desde el interior de una transacción de usuario.

RECEIVE_COMMUNICATIONCHANNEL(CommunicationChannelCodeFilter : Text[250];ProcessFollowing : Boolean;ProcessingQueueView : Text[250])
CommunicationChannelCodeFilter

El código del canal de comunicación o una cadena de filtro en el campo de código.

ProcessFollowing

Si el post-procesamiento debe ser ejecutado. Normalmente quieres poner esto en True.

ProcessQueueView

Un filtro en los post-procesos. Normalmente puedes querer pasar en una cuerda vacía.

SEND_ALL

Función desaprobada. Debes evitar llamar a la función general y llamar a una de las más específicas a continuación.

Envía todos los canales de comunicación. Esta función tiene que ser llamada desde el interior de una transacción de usuario.

SEND_ALL(ProcessFollowing : Boolean;ProcessingQueueView : Text[250])
ProcessFollowing

Si el post-procesamiento debe ser ejecutado. Normalmente quieres poner esto en True.

ProcessQueueView

Un filtro en los post-procesos. Normalmente puedes querer pasar en una cuerda vacía.

SEND_FOLDER

Envía transmisiones abiertas de la carpeta de transmisión especificada. Esta función tiene que ser llamada desde el interior de una transacción de usuario.

SEND_FOLDER(TransmissionFolderCodeFilter : Text[250];ProcessFollowing : Boolean;ProcessingQueueView : Text[250])
TransmissionFolderCodeFilter

El código de la carpeta de transmisión o una cadena de filtro en el campo de código.

ProcessFollowing

Si el post-procesamiento debe ser ejecutado. Normalmente quieres poner esto en True.

ProcessQueueView

Un filtro en los post-procesos. Normalmente puedes querer pasar en una cuerda vacía.

SEND_COMMUNICATIONCHANNEL

Envía transmisiones abiertas del canal de comunicación especificado. Esta función tiene que ser llamada desde el interior de una transacción de usuario.

SEND_COMMUNICATIONCHANNEL(CommunicationChannelCodeFilter : Text[250];ProcessFollowing : Boolean;ProcessingQueueView : Text[250])
CommunicationChannelCodeFilter

El código del canal de comunicación o una cadena de filtro en el campo de código.

ProcessFollowing

Si el post-procesamiento debe ser ejecutado. Normalmente quieres poner esto en True.

ProcessQueueView

Un filtro en los post-procesos. Normalmente puedes querer pasar en una cuerda vacía.

PROCESS

PROCESS(ProcessFollowing : Boolean;ProcessingQueueView : Text[250];UserTransactionFilter : Boolean)
ProcessFollowing

Si el post-procesamiento debe ser ejecutado. Normalmente quieres poner esto en True.

ProcessQueueView

Un filtro en los post-procesos. Normalmente puedes querer pasar en una cuerda vacía.

UserTransactionFilter

Si sólo se deben procesar los post-tratamientos de la transacción del usuario actual.

Establecer el receptor / remitente

SET_COMMUNICATION_CHANNEL

Establece el canal de comunicación para la siguiente llamada de mapping dentro de la transacción del usuario.

SET_COMMUNICATION_CHANNEL(ChannelCode : Code[20])
ChannelCode

El código del canal de comunicación.

SET_RECEIVER_PARTNER

Establece el compañero receptor para la siguiente llamada de mapping dentro de la transacción de usuario.

SET_RECEIVER_PARTNER(ReceiverPartner : Code[20])
ReceiverPartner

El código del compañero receptor.

SET_RECEIVER_IDENTIFICATION

Establece la identificación del receptor para la siguiente llamada de mapping dentro de la transacción del usuario.

SET_RECEIVER_IDENTIFICATION(Identification : Text[64])
Identification

La identificación del receptor. Se trata de un texto libre, que puede tener un significado especial en canales de comunicación específicos.

SET_SENDER_PARTNER

Establece el socio remitente para la siguiente llamada de mapping dentro de la transacción del usuario.

SET_SENDER_PARTNER(PartnerCode : Code[20])
PartnerCode

El código de socio remitente.

SET_SENDER_IDENTIFICATION

Establece la identificación del remitente para la siguiente llamada de mapping dentro de la transacción del usuario.

SET_SENDER_IDENTIFICATION(Identification : Text[64])
Identification

La identificación del receptor. Se trata de un texto libre, que puede tener un significado especial en canales de comunicación específicos.

Registro y manejo de errores

Las siguientes funciones sólo pueden ser llamadas mientras se ejecuta un mapping. Estas funciones están pensadas para ser utilizadas por los gestores de errores personalizados a partir del código.

LogError

Registra un mensaje de error.

LogError(ErrorMessage : Text[1024])
ErrorMessage

El mensaje de error. La ejecución continuará después de esta llamada. Para interrumpir el flujo de control, use la función nativa de ERROR.

LogWarning

Registra una advertencia.

LogWarning(WarningMessage : Text[1024])
WarningMessage

El texto de la advertencia.

LogInformation

Registra la información.

LogInformation(InformationMessage : Text[1024])
InformationMessage

La información a registrar.

LogDocumentError

Registra un error perteneciente a un documento EDI. Hay una función más universal llamada LogRecIDErrorWithCode.

LogDocumentError(ErrorMessage : Text[1024];EDIDocument : Record "EDI Document")
ErrorMessage

El mensaje de error.

EDIDocument

El documento EDI al que pertenece el error.

LogDocumentWarning

Registra una advertencia perteneciente a un documento EDI. Hay una función más universal llamada LogRecIDWarningWithCode.

LogDocumentWarning(WarningMessage : Text[1024];EDIDocument : Record "EDI Document")
WarningMessage

La advertencia debe ser registrada.

EDIDocument

El documento EDI al que pertenece el error.

LogDocumentInformation

Registra una información que pertenece a un documento EDI. Hay una función más universal llamada LogRecIDInformationWithCode.

LogDocumentInformation(InformationMessage : Text[1024];EDIDocument : Record "EDI Document")
InformationMessage

La información a registrar.

EDIDocument

El documento EDI al que pertenece el error.

LogDocumentLineError

Registra un error perteneciente a una línea de documentos EDI. Hay una función más general llamada LogRecIDErrorWithCode.

LogDocumentLineError(ErrorMessage : Text[1024];EDIDocumentLine : Record "EDI Document Line")
ErrorMessage

El mensaje de error a registrar.

EDIDocumentLine

La línea de documento EDI a la que pertenece el error.

LogDocumentLineWarning

Registra una advertencia perteneciente a una línea de documentos EDI. Hay una función más general llamada LogRecIDWarningWithCode.

LogDocumentLineWarning(WarningMessage : Text[1024];EDIDocumentLine : Record "EDI Document Line")
WarningMessage

La advertencia que debe ser registrada.

EDIDocumentLine

La línea de documento EDI a la que pertenece el error.

LogDocumentLineInformation

Registra una información que pertenece a una línea de documentos EDI. Hay una función más general llamada LogRecIDInformationWithCode.

LogDocumentLineInformation(InformationMessage : Text[1024];EDIDocumentLine : Record "EDI Document Line")
InformationMessage

La información a registrar.

EDIDocumentLine

La línea de documento EDI a la que pertenece el error.

LogErrorWithCode

Registra un error con un código de error adicional.

LogErrorWithCode(ContinueExecution : Boolean;ErrorMessage : Text[1024];Code : Code[20])
ContinueExecution

Ya sea para romper el flujo de control o para continuar con la ejecución

ErrorMessage

El mensaje de error a registrar.

Code

Un código para identificar el error.

LogWarningWithCode

Registra una advertencia con un código de error adicional.

LogWarningWithCode(WarningMessage : Text[1024];Code : Code[20])
WarningMessage

La advertencia que debe ser registrada.

Code

Un código para identificar el error.

LogInformationWithCode

Registra una información con un código de error adicional.

LogInformationWithCode(InformationMessage : Text[1024];Code : Code[20])
InformationMessage

La información que debe ser registrada.

Code

Un código para identificar el error.

LogRecIDErrorWithCode

Registra un mensaje de error que debería pertenecer a un registro específico.

LogRecIDErrorWithCode(ContinueExecution : Boolean;ErrorMessage : Text[1024];RecID : RecordID;Code : Code[20];IsUserAcceptable : Boolean)
ContinueExecution

Ya sea para romper el flujo de control o continuar la ejecución.

ErrorMessage

El mensaje de error a registrar.

RecID

La identificación del registro al que pertenece el error.

Code

Un código de error para identificar el error.

IsUserAcceptable

Si el error puede ser aceptado por el usuario final. Esto requerirá un código de error no vacío.

LogRecIDWarningWithCode

Registra una advertencia que debería pertenecer a un registro.

LogRecIDWarningWithCode(WarningMessage : Text[1024];RecID : RecordID;Code : Code[20])
WarningMessage

La advertencia que debe ser registrada.

RecID

La identificación del registro al que debe pertenecer la advertencia.

Code

Un código para identificar la entrada de la bitácora.

LogRecIDInformationWithCode

Registra una información que debería pertenecer a un registro.

LogRecIDInformationWithCode(InformationMessage : Text[1024];RecID : RecordID;Code : Code[20])
InformationMessage

La información que debe ser registrada.

RecID

La identificación de registro a la que la información debe pertenecer.

Code

Un código para identificar la entrada de la bitácora.