ANVEDI Events
Anveo EDI Connect ofrece una única unidad de codeunit para los eventos de integración: Codeunit ANVEDI Events. Puede reaccionar a los eventos de esta codeunit de código a través de su propia codeunit. Los eventos están soportados tanto en la versión FOB como en la versión Extension de Microsoft Dynamics.
Events
Los Events disponibles son:
- OnFunctionRegistration
- OnFunctionExecution
- OnJob
- OnAcceptTransmission
- OnBeforeList
- OnAfterList
- OnBeforeReceive
- OnAfterReceive
- OnBeforeArchive
- OnAfterArchive
- OnBeforeDelete
- OnAfterDelete
- OnBeforeSend
- OnComposeMessage
- OnAfterSend
- OnReplacePlaceholder
- OnError
- OnAfterProcess
OnFunctionRegistration
procedure OnFunctionRegistration(Register: Codeunit "ANVEDI Function Register")
Este evento es llamado cuando el módulo busca funciones personalizadas. Puede definir sus propias funciones utilizando la funcionalidad proporcionada por la codeunit ANVEDI Function Register que se proporciona con el nombre Register. La codeunit proporciona dos funciones: RegisterFunction y AddParameter.
RegisterFunction espera dos parámetros, el nombre del objeto y el nombre de la función de su nueva función. Estos nombres pueden elegirse libremente, pero no pueden superar los 30 caracteres.
Los primeros 29 caracteres de la combinación de objeto y nombre de función deben ser únicos para poder especificar los parámetros desde el mapping. Intente que los nombres sean cortos.
Después de registrar una función, puede llamar a AddParameter hasta 5 veces. AddParameter espera un nombre para el parámetro de su función. Puede utilizar múltiples bloques de RegisterFunction y AddParameter en un Event. Pero recomendamos separar múltiples funciones a múltiples Event listeners.
Register.RegisterFunction('CustomObj', 'MyFunction');
Register.AddParameter('Name');
Register.AddParameter('Value');
Después de registrar la función, hay que reaccionar a las llamadas de función. Esto se hace mediante el OnFunctionExecution que se describe a continuación.
OnFunctionExecution
procedure OnFunctionExecution(FunctionCall: Codeunit "ANVEDI Function Call")
El Event se activa cuando el módulo busca la implementación de una función personalizada. A este evento se le pasa una instancia de la codeunit ANVEDI Function Call con el nombre FunctionCall.
Debe comprobar si el FunctionCall coincide con su función personalizada y sólo ejecutar cualquier código, si lo hace. Esto se hace llamando a la función Is() con los mismos parámetros con los que ha llamado a RegisterFunction en el OnFunctionRegistration. Si Is() devuelve true puede acceder a los parámetros, ejecutar su código personalizado y devolver un valor.
if FunctionCall.Is(ObjectNameTok, FunctionNameTok) then begin
Name := FunctionCall.GetTextParameter(1);
Val := FunctionCall.GetIntegerParameter(2);
Message(Name + ': ' + Format(Val));
FunctionCall.SetResult(TRUE);
end;
La codeunit ANVEDI Function Call proporciona las siguientes funciones:
procedure Is(ObjectName: Text[30];FunctionName: Text[30]): Boolean
Devuelve si la llamada a la función coincide con la firma de función especificada.
procedure SetResult(Value: Variant)
Tienes que llamar a esta función para mostrar al módulo que has manejado la llamada a la función. Puede pasar el resultado de una función, o simplemente utilizar true como resultado.
procedure GetTextParameter(ParNum: Integer): Text[1024]
Recupera un parámetro con el número dado como texto. El índice empieza por 1.
procedure GetIntegerParameter(ParNum: Integer): Integer
Recupera un parámetro con el número dado como entero. El índice empieza por 1.
procedure GetBooleanParameter(ParNum: Integer): Boolean
Recupera un parámetro con el número dado como booleano. El índice empieza por 1.
procedure GetDecimalParameter(ParNum: Integer): Decimal
Recupera un parámetro con el número dado como decimal. El índice empieza por 1.
procedure GetDateParameter(ParNum: Integer): Date
Recupera un parámetro con el número dado como fecha. El índice empieza por 1.
procedure GetTimeParameter(ParNum: Integer): Time
Recupera un parámetro con el número dado como fecha y hora. El índice empieza por 1.
procedure GetDateTimeParameter(ParNum: Integer): DateTime
Recupera un parámetro con el número dado como tiempo. El índice empieza por 1.
procedure GetParameter(ParNum: Integer;var EDIVariant: Codeunit "ANVEDI Variant"): Boolean
Recupera un parámetro con el número dado como EDIVariante. La función devuelve si se ha podido recuperar el parámetro. El índice empieza por 1.
OnJob
procedure OnJob(ParameterDictionary: Codeunit "ANVEDI Data Structures";EventArgs: Codeunit "ANVEDI Event Args")
Puede utilizar la codeunit de trabajos del módulo para definir trabajos personalizados. La codeunit permite el uso de múltiples parámetros. Puede encontrar más información en la documentación del gestor de tareas.
Un diccionario que contiene los parámetros pasados a la tarea.
Debe establecer el Event como gestionado, si ha procesado un trabajo. La descripción de la estructura ANVEDI Event Args se encuentra al final de este capítulo.
OnAcceptTransmission
procedure OnAcceptTransmission(ANVEDITransmission: Record "ANVEDI Transmission";EventArgs: Codeunit "ANVEDI Event Args")
Esta función es llamada 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, por lo que sólo se puede decidir en función de los metadatos disponibles.
La transmisión para la que se recuperaron los metadatos. Tenga en cuenta que en este momento no se ha recibido ningún dato y que el registro aún no se ha insertado en la base de datos.
Debe establecer el Event como manejado, si procesó el Event. También debe devolver un valor si procesar la transmisión (establecer el valor de retorno en true); o no (establecerlo en false). La descripción de la estructura ANVEDI Event Args se encuentra al final de este capítulo.
OnBeforeList
procedure OnBeforeList(EDICommunicationChannel: Record "ANVEDI Communication Channel";EventArgs: Codeunit "ANVEDI Event Args")
Este código se ejecuta antes de que el módulo busque nuevos datos. Esto se puede utilizar para emitir un comando externo o script para recibir los archivos, antes de que el módulo busque nuevos datos.
El canal de comunicación que debe recuperar los datos.
Debe establecer el Event como manejado, si procesó el evento. La descripción de la estructura ANVEDI Event Args se encuentra al final de este capítulo.
OnAfterList
procedure OnAfterList(EDICommunicationChannel: Record "ANVEDI Communication Channel";EventArgs: Codeunit "ANVEDI Event Args")
El canal de comunicación que debe recuperar los datos.
Debe establecer el Event como manejado, si procesó el Event. La descripción de la estructura ANVEDI Event Args se encuentra al final de este capítulo.
Este código se ejecuta después de que el módulo haya buscado nuevos datos.
OnBeforeReceive
procedure OnBeforeReceive(ANVEDITransmission: Record "ANVEDI Transmission";EventArgs: Codeunit "ANVEDI Event Args")
Este Event se activa antes de recuperar una transmisión. Tenga en cuenta que no puede cancelar el proceso en este momento. Si desea decidir si recuperar o no un mensaje, utilice la función OnAcceptTransmission.
La transmisión. Los mensajes aún no se han recibido.
Debe establecer el Event como manejado, si procesó el Event. La descripción de la estructura ANVEDI Event Args se encuentra al final de este capítulo.
OnAfterReceive
procedure OnAfterReceive(ANVEDITransmission: Record "ANVEDI Transmission";EventArgs: Codeunit "ANVEDI Event Args")
Este Event se activa después de recibir una transmisión.
La transmisión después de ser recuperada (puedes acceder a los mensajes).
Debe establecer el Event como manejado, si procesó el Event. La descripción de la estructura ANVEDI Event Args se encuentra al final de este capítulo.
OnBeforeArchive
procedure OnBeforeArchive(ANVEDITransmission: Record "ANVEDI Transmission";EventArgs: Codeunit "ANVEDI Event Args")
Este Event se ejecuta antes de archivar una transmisión.
La transmisión que se va a archivar en la ubicación remota.
Debe establecer el Event como manejado, si procesó el Event. La descripción de la estructura ANVEDI Event Args se encuentra al final de este capítulo.
OnAfterArchive
procedure OnAfterArchive(ANVEDITransmission: Record "ANVEDI Transmission";EventArgs: Codeunit "ANVEDI Event Args")
Este Event se activa después de archivar una transmisión.
La transmisión que se archivó en la ubicación remota.
Debe establecer el Event como manejado, si procesó el Event. La descripción de la estructura ANVEDI Event Args se encuentra al final de este capítulo.
OnBeforeDelete
procedure OnBeforeDelete(ANVEDITransmission: Record "ANVEDI Transmission";EventArgs: Codeunit "ANVEDI Event Args")
Este Event se ejecuta antes de borrar una transmisión.
La transmisión que se va a borrar en la ubicación remota.
Debe establecer el Event como manejado, si procesó el Event. La descripción de la estructura ANVEDI Event Args se encuentra al final de este capítulo.
OnAfterDelete
procedure OnAfterDelete(ANVEDITransmission: Record "ANVEDI Transmission";EventArgs: Codeunit "ANVEDI Event Args")
Este Event se llama después de borrar una transmisión.
La transmisión que se borró de la ubicación remota.
Debe establecer el Event como manejado, si procesó el Event. La descripción de la estructura ANVEDI Event Args se encuentra al final de este capítulo.
OnBeforeSend
procedure OnBeforeSend(ANVEDITransmission: Record "ANVEDI Transmission";EventArgs: Codeunit "ANVEDI Event Args")
Este Event se activa antes de que se envíe una transmisión.
La transmisión que se va a enviar.
Debe establecer el Event como manejado, si procesó el Event. La descripción de la estructura ANVEDI Event Args se encuentra al final de este capítulo.
OnComposeMessage
procedure OnComposeMessage(ANVEDITransmission: Record "ANVEDI Transmission";EventArgs: Codeunit "ANVEDI Event Args")
Este Event se activa cuando se compone una transmisión.
La transmisión que se compone.
Debe establecer el Event como manejado, si procesó el Event. La descripción de la estructura ANVEDI Event Args se encuentra al final de este capítulo.
OnAfterSend
procedure OnAfterSend(ANVEDITransmission: Record "ANVEDI Transmission";EventArgs: Codeunit "ANVEDI Event Args")
Este Event es llamado después de que una transmisión es enviada.
La transmisión que se envió.
Debe establecer el Event como manejado, si procesó el evento. La descripción de la estructura ANVEDI Event Args se encuentra al final de este capítulo.
OnReplacePlaceholder
procedure OnReplacePlaceholder(Placeholder: Text[50];var ANVEDILinkedDocument: Record "ANVEDI Linked Document";EventArgs: Codeunit "ANVEDI Event Args")
Esta función se llama cuando se evalúa una cadena que puede contener variables definidas por el usuario, como el nombre de un archivo.
El nombre del marcador de posición. El módulo está buscando actualmente un valor para reemplazar este marcador de posición específico. Si desea proporcionar un valor, debe especificar el resultado y establecer el evento a manejar en el EventArgs.
Un registro prefiltrado de los documentos vinculados. Puede, por ejemplo, utilizar esta tabla para obtener los documentos del buffer que contiene el fichero.
Debe establecer el Event como manejado, si procesó el Event. También hay que aportar un valor. La descripción de la estructura ANVEDI Event Args se encuentra al final de este capítulo.
El siguiente ejemplo muestra cómo podría devolver datos del documento vinculado:
[EventSubscriber(ObjectType::Codeunit, Codeunit::="" Events="" TRUE,="" TRUE)]=""]
local procedure OnReplacePlaceholderExternalDocumentNo(Placeholder: Text[50];var ANVEDILinkedDocument: Record "ANVEDI Linked Document";EventArgs: Codeunit "ANVEDI Event Args")
var
recID: RecordID;
ediDocument: Record "ANVEDI Document";
begin
if Placeholder = 'ExternalDocumentNo' then begin
if ANVEDILinkedDocument.FindSet() then
repeat
recID := ANVEDILinkedDocument.RecordId;
if recID.TableNo = Database::"ANVEDI Document" then begin
ediDocument.get(recID);
EventArgs.SetResult(ediDocument."External Document No.");
EventArgs.SetHandled(true);
exit;
end;
until ANVEDILinkedDocument.Next() = 0;
end;
end;
OnError
procedure OnError(ANVEDIProcessingQueue: Record "ANVEDI Processing Queue";EventArgs: Codeunit "ANVEDI Event Args")
Este Event se activa cuando se produce un error en la cola de procesamiento.
Debe establecer el Event como manejado, si procesó el Event. La descripción de la estructura ANVEDI Event Args se encuentra al final de este capítulo.
OnAfterProcess
procedure OnAfterProcess(ANVEDIProcessingQueue: Record "ANVEDI Processing Queue";EventArgs: Codeunit "ANVEDI Event Args")
Este Event es llamado después del procesamiento de una entrada en la tabla EDI Processing Queue. Debe comprobar el estado de la entrada aprobada y reaccionar en consecuencia.
Debe establecer el Event como manejado, si procesó el Event. La descripción de la estructura ANVEDI Event Args se encuentra al final de este capítulo.
ANVEDI Event Args
Algunos de los Events utilizan una estructura llamada ANVEDI Event Args. Esta estructura permite devolver valores e indicar al módulo si ha gestionado el evento.
Las siguientes funciones están disponibles en el ANVEDI Event Args pasado al Event:
SetHandled(Value: Boolean)
Si el Event fue manejado por tu código.
SetResult(Value: Variant)
El valor de retorno, si el Event espera un valor de retorno.
Ejemplo
El siguiente ejemplo muestra cómo puede añadir su propia función personalizada «MYOBJECT.MYFUNC», que muestra un mensaje que contiene el nombre proporcionado seguido de ‘: ‘ y el valor. Puedes añadir tantas funciones de tantas extensiones como necesites.
codeunit 50100 MyAnveoFunctions
{
var
ObjectNameTok: label 'MYOBJECT';
FunctionNameTok: label 'MYFUNC';
[EventSubscriber(ObjectType::Codeunit, Codeunit::="" Events="" TRUE,="" TRUE)]=""]
local procedure OnRegisterFunctions(Register: Codeunit "ANVEDI Function Register")
begin
Register.RegisterFunction(ObjectNameTok, FunctionNameTok);
Register.AddParameter('Name');
Register.AddParameter('Value');
end;
[EventSubscriber(ObjectType::Codeunit, Codeunit::="" Events="" TRUE,="" TRUE)]=""]
local procedure OnFunction(FunctionCall: Codeunit "ANVEDI Function Call")
var
Name: Text;
Val: Integer;
begin
if FunctionCall.Is(ObjectNameTok, FunctionNameTok) then begin
Name := FunctionCall.GetTextParameter(1);
Val := FunctionCall.GetIntegerParameter(2);
Message(Name + ': ' + Format(Val));
FunctionCall.SetResult(TRUE);
end;
end;
}
Dependencias
Si quieres reaccionar al Event vía AL, necesitas añadir una dependencia al módulo Anveo EDI Connect.
Los valores para la Extension OnPremise son:
{
"id": "25286BD2-B08A-49F9-B613-64122CCEE4E1",
"name": "Anveo EDI Connect - OnPremise",
"publisher": "conion media GmbH",
"version": "5.x.y.z"
}
Asegúrese de sustituir x, y, z por el número de versión correcto.
Los valores para Business Central Online y Universal Code Extension son:
{
"id": "FC195C4F-19BF-4167-BFE8-6D1FF7D266BC",
"name": "Anveo EDI Connect",
"publisher": "conion media GmbH",
"version": "5.x.y.z"
}
Asegúrese de sustituir x, y, z por el número de versión correcto. Las versiones anteriores de BC llamaban «id» a «appId».