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

ANVEDI Integration

La codeunit ANVEDI Integration contiene todas las llamadas a la API pública del módulo EDI, que es posible que desee llamar desde su código personalizado. Todas las funciones de esta codeunit deben utilizarse si se desea iniciar directamente una acción EDI mediante código.

Conceptos generales

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

Transacciones de los usuarios

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

// 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: Inicio de 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. Más adelante hablaremos de ello en detalle.

BEGIN_USER_TRANSACTION

Inicia una nueva transacción de usuario. Tenga en cuenta que sólo se integran llamadas en el módulo EDI en los puntos en los que puede tener lugar un COMMIT. En muchos casos, el módulo confirmará todos los cambios de la base de datos antes de ejecutar la lógica EDI. Considere también la posibilidad de limitarse a marcar los datos y utilizar una tarea en segundo plano para ejecutar la lógica EDI.

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

BEGIN_USER_TRANSACTION(Text : Text[1024])

Siempre debe 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 estar 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 se encuentra dentro de una ejecución mapping. Puede comprobar este valor al validar disparadores, por ejemplo, para conseguir un comportamiento diferente al procesar procesos EDI. También puede utilizar este valor para mostrar diálogos de entrada sólo cuando no esté procesando EDI.

END_USER_TRANSACTION

Esta función terminará una transacción de usuario.

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

Si se han producido errores durante la transacción, muéstrelos en un cuadro de 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 actual del proceso. Todo el código después de esta línea no se ejecuta, si hubo un error durante la transacción. Si se establece este parámetro a True, se mostrará un mensaje de error indicando que se han producido uno o más errores, si los hubiera. En este caso, el usuario no puede ver la lista completa de errores.

Success

Un valor de retorno, si hubo un error o no. Devuelve True en caso de éxito, es decir no hubo errores; False en caso contrario.

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

Trabajar con transacciones comerciales

RUN_BUSINESSTRANSACTION_JOB

Ejecuta el trabajo de recopilación de datos de un tipo de transacción empresarial especificado. Esto tiene que ser llamado desde dentro 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

Inicia una nueva transacción comercial para el código y el identificador de registro dados.

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

RUN_BT_BATCH_JOB

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

RUN_BT_BATCH_JOB(BatchCode : Code[20])

Si quieres combinarlo con RUN_BUSINESSTRANSACTION_JOB, necesitas encapsular ambas funciones en bloques separados BEGIN..END_USER_TRANSACTION y añadir lo siguiente entre medias:

COMMIT;
SELECTLATESTVERSION();

Acciones

A veces se desea crear un botón en una página para iniciar un proceso EDI, o se desea integrarlo, por ejemplo, en el proceso de liberación. Para estos casos se pueden ejecutar casi todas las acciones del módulo desde el código. Tenga en cuenta que, por lo general, los procesos EDI deben automatizarse y ejecutarse en segundo plano. Así que antes de añadir acciones en el código, considere la posibilidad de un trabajo en segundo plano como alternativa.

Ejecutar un EDI Mapping

Para ejecutar un EDI Mapping necesitaremos iniciar una transacción de usuario. Después puede que queramos pasar datos al mapping. A continuación, podemos ejecutar el mapping y comprobar el resultado al finalizar 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 tabla almacenadas existentes. Debe llamarse desde dentro de una transacción de usuario.

RESET_TABLEVIEWS()

SET_TABLEVIEW

Almacena una vista de tabla con un nombre especificado. Debe llamarse desde dentro de una transacción de usuario.

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

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

FilterText

El texto del filtro en forma de tabla Anvaigo EDI Connect. Debe utilizar la función GETVIEW de Microsoft Dynamics 365 Business Central, si es posible, para obtener la cadena con el formato correcto.

GET_TABLEVIEW

Recupera un filtro almacenado. Debe llamarse desde dentro de una transacción de usuario.

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

RUN

Ejecutar uno o varios mapeos EDI. Debe llamarse desde dentro 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 se deben ejecutar varias asignaciones en caso de que se especifique un filtro. Se trata de una función de seguridad, que le impide ejecutar más de un mapping.

ProcessFollowing

Si debe ejecutarse el postprocesamiento. Por lo general, es preferible que sea True.

ProcessingQueueView

Un filtro en los postprocesamientos. Normalmente puede querer pasar una cadena vacía.

Otras acciones

RECEIVE_ALL

Función obsoleta. Debe evitar llamar a la función general y llamar a una de las más específicas que aparecen a continuación.

Recibe todos los canales de comunicación. Esta función debe llamarse desde dentro de una transacción de usuario.

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

RECEIVE_FOLDER

Recibe los datos de la carpeta o carpetas de transmisión especificadas. Esta función debe llamarse desde dentro 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 debe ejecutarse el postprocesamiento. Por lo general, es preferible que sea True.

ProcessQueueView

Un filtro en los postprocesamientos. Normalmente puede querer pasar una cadena vacía.

RECEIVE_COMMUNICATIONCHANNEL

Recibe datos del canal de comunicación especificado. Esta función debe llamarse desde dentro 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 debe ejecutarse el postprocesamiento. Normalmente, es preferible establecerlo en True.

ProcessQueueView

Un filtro en los postprocesamientos. Normalmente puede querer pasar una cadena vacía.

SEND_ALL

Función obsoleta. Debe evitar llamar a la función general y llamar a una de las más específicas que aparecen a continuación.

Envía todos los canales de comunicación. Esta función debe llamarse desde dentro de una transacción de usuario.

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

Si debe ejecutarse el postprocesamiento. Por lo general, es preferible que sea True.

ProcessQueueView

Un filtro en los postprocesamientos. Normalmente puede querer pasar una cadena vacía.

SEND_FOLDER

Envía las transmisiones abiertas de la carpeta de transmisión especificada. Esta función debe llamarse desde dentro 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 debe ejecutarse el postprocesamiento. Por lo general, es preferible que sea True.

ProcessQueueView

Un filtro en los postprocesamientos. Normalmente puede querer pasar una cadena vacía.

SEND_COMMUNICATIONCHANNEL

Envía transmisiones abiertas del canal de comunicación especificado. Esta función debe llamarse desde dentro 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 debe ejecutarse el postprocesamiento. Por lo general, es preferible que sea True.

ProcessQueueView

Un filtro en los postprocesamientos. Normalmente puede querer pasar una cadena vacía.

PROCESS

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

Si debe ejecutarse el postprocesamiento. Por lo general, es preferible que sea True.

ProcessQueueView

Un filtro en los postprocesamientos. Normalmente puede querer pasar una cadena vacía.

UserTransactionFilter

Si sólo deben procesarse los postprocesos de la transacción actual del usuario.

Establecer el destinatario / remitente

SET_COMMUNICATION_CHANNEL

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

SET_COMMUNICATION_CHANNEL(ChannelCode : Code[20])
ChannelCode

El código del canal de comunicación.

SET_RECEIVER_PARTNER

Establece el interlocutor receptor para la siguiente llamada de mapping dentro de la transacción de usuario.

SET_RECEIVER_PARTNER(ReceiverPartner : Code[20])
ReceiverPartner

El código de socio receptor.

SET_RECEIVER_IDENTIFICATION

Establece la identificación del receptor para la siguiente llamada de mapping dentro de la transacción de 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 emisor para la siguiente llamada de mapping dentro de la transacción de usuario.

SET_SENDER_PARTNER(PartnerCode : Code[20])
PartnerCode

El código de socio emisor.

SET_SENDER_IDENTIFICATION

Establece la identificación del remitente para la siguiente llamada de mapping dentro de la transacción de 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 gestión de errores

Las siguientes funciones sólo pueden invocarse mientras se está ejecutando un mapping. Estas funciones están pensadas para ser utilizadas por los gestores de errores personalizados 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, utilice la función nativa 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 que debe registrarse.

LogDocumentError

Registra un error perteneciente a un Documento EDI. Existe 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 un aviso perteneciente a un Documento EDI. Existe una función más universal llamada LogRecIDWarningWithCode.

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

La advertencia que debe registrarse.

EDIDocument

El documento EDI al que pertenece el error.

LogDocumentInformation

Registra una información perteneciente a un Documento EDI. Existe una función más universal llamada LogRecIDInformationWithCode.

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

La información que debe registrarse.

EDIDocument

El documento EDI al que pertenece el error.

LogDocumentLineError

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

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

El mensaje de error que se registrará.

EDIDocumentLine

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

LogDocumentLineWarning

Registra un aviso perteneciente a una línea de documento EDI. Existe una función más general llamada LogRecIDWarningWithCode.

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

La advertencia que debe registrarse.

EDIDocumentLine

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

LogDocumentLineInformation

Registra una información perteneciente a una Línea de Documento EDI. Existe una función más general llamada LogRecIDInformationWithCode.

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

La información que debe registrarse.

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

Si se interrumpe el flujo de control o se continúa con la ejecución

ErrorMessage

El mensaje de error que se 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 registrarse.

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 registrarse.

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

Si se interrumpe el flujo de control o se continúa la ejecución.

ErrorMessage

El mensaje de error que se registrará.

RecID

ID 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 un aviso que debería pertenecer a un registro.

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

La advertencia que debe registrarse.

RecID

El identificador del registro al que debe pertenecer el aviso.

Code

Un código para identificar la entrada de registro.

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 registrarse.

RecID

El identificador de registro al que debe pertenecer la información.

Code

Un código para identificar la entrada de registro.