ANVEDI Events
Anveo EDI Connect offre un’unica codeunit per gli eventi di integrazione: Codeunit ANVEDI Events. È possibile reagire agli eventi di questa codeunit tramite la propria codeunit. Gli eventi sono supportati sia nella versione FOB che in quella Extension di Microsoft Dynamics.
Events
Gli Events disponibili sono:
- 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")
Questo evento viene richiamato quando il modulo cerca le funzioni personalizzate. È possibile definire le proprie funzioni utilizzando le funzionalità fornite dall’codeunit ANVEDI Function Register, che si trova sotto il nome di Register. L’codeunit fornisce due funzioni: RegisterFunction e AddParameter.
RegisterFunction si aspetta due parametri, il nome dell’oggetto e il nome della funzione della nuova funzione. I nomi possono essere scelti liberamente, ma non possono superare i 30 caratteri.
I primi 29 caratteri della combinazione di nome dell’oggetto e della funzione devono essere unici per poter specificare i parametri dalla mapping. Cercate di mantenere i nomi brevi.
Dopo aver registrato una funzione, è possibile richiamare AddParameter fino a 5 volte. AddParameter si aspetta un nome per il parametro della funzione. È possibile utilizzare più blocchi di RegisterFunction e AddParameter in un Event. Ma si consiglia di separare più funzioni da più ascoltatori di Event.
Register.RegisterFunction('CustomObj', 'MyFunction');
Register.AddParameter('Name');
Register.AddParameter('Value');
Dopo aver registrato la funzione, è necessario reagire alle chiamate di funzione. Ciò avviene tramite l’EventOnFunctionExecution descritto di seguito.
OnFunctionExecution
procedure OnFunctionExecution(FunctionCall: Codeunit "ANVEDI Function Call")
L’Event viene richiamato quando il modulo cerca un’implementazione di funzione personalizzata. A questo evento viene passata un’istanza dell’codeunit ANVEDI Function Call con il nome FunctionCall.
È necessario verificare se la FunctionCall corrisponde alla funzione personalizzata ed eseguire il codice solo se corrisponde. Ciò avviene chiamando la funzione Is() con gli stessi parametri con cui è stata chiamata RegisterFunction in OnFunctionRegistration. Se Is() restituisce true, è possibile accedere ai parametri, eseguire il codice personalizzato e restituire un valore.
if FunctionCall.Is(ObjectNameTok, FunctionNameTok) then begin
Name := FunctionCall.GetTextParameter(1);
Val := FunctionCall.GetIntegerParameter(2);
Message(Name + ': ' + Format(Val));
FunctionCall.SetResult(TRUE);
end;
L’codeunit ANVEDI Function Call fornisce le seguenti funzioni:
procedure Is(ObjectName: Text[30];FunctionName: Text[30]): Boolean
Restituisce se la chiamata di funzione corrisponde alla firma di funzione specificata.
procedure SetResult(Value: Variant)
È necessario chiamare questa funzione per mostrare al modulo che si è gestita la chiamata di funzione. È possibile passare il risultato di una funzione o utilizzare semplicemente true come risultato.
procedure GetTextParameter(ParNum: Integer): Text[1024]
Recupera un parametro con il numero dato come testo. L’indice inizia con 1.
procedure GetIntegerParameter(ParNum: Integer): Integer
Recupera un parametro con il numero dato come numero intero. L’indice inizia con 1.
procedure GetBooleanParameter(ParNum: Integer): Boolean
Recupera un parametro con il numero dato come booleano. L’indice inizia con 1.
procedure GetDecimalParameter(ParNum: Integer): Decimal
Recupera un parametro con il numero dato come decimale. L’indice inizia con 1.
procedure GetDateParameter(ParNum: Integer): Date
Recupera un parametro con il numero dato come data. L’indice inizia con 1.
procedure GetTimeParameter(ParNum: Integer): Time
Recupera un parametro con il numero dato come data e ora. L’indice inizia con 1.
procedure GetDateTimeParameter(ParNum: Integer): DateTime
Recupera un parametro con il numero dato come tempo. L’indice inizia con 1.
procedure GetParameter(ParNum: Integer;var EDIVariant: Codeunit "ANVEDI Variant"): Boolean
Recupera un parametro con il numero dato come EDIVariante. La funzione restituisce se il parametro può essere recuperato. L’indice inizia con 1.
OnJob
procedure OnJob(ParameterDictionary: Codeunit "ANVEDI Data Structures";EventArgs: Codeunit "ANVEDI Event Args")
È possibile utilizzare l’codeunit del modulo per definire lavori personalizzati. L’codeunit consente di supportare l’uso di più parametri. Per ulteriori informazioni, consultare la documentazione del gestore dei lavori.
Un dizionario contenente i parametri passati al lavoro.
Se è stato elaborato un lavoro, è necessario impostare l’Event su gestito. La descrizione della struttura ANVEDI Event Args si trova alla fine di questo capitolo.
OnAcceptTransmission
procedure OnAcceptTransmission(ANVEDITransmission: Record "ANVEDI Transmission";EventArgs: Codeunit "ANVEDI Event Args")
Questa funzione viene chiamata per determinare se un file o un messaggio deve essere accettato o ignorato dal modulo. Il modulo non memorizza se una trasmissione è stata ignorata e richiama questa funzione ogni volta che vede una trasmissione. Il file non è ancora stato letto, quindi è possibile decidere solo in base ai metadati disponibili.
La trasmissione per la quale sono stati recuperati i metadati. Si noti che in questo momento non sono stati ricevuti dati e che il record non è ancora stato inserito nel database.
Se l’Event è stato elaborato, è necessario impostarlo come gestito. Si dovrebbe anche restituire un valore che indichi se elaborare la trasmissione (impostare il valore di ritorno su true) o no (impostare su false). La descrizione della struttura ANVEDI Event Args si trova alla fine di questo capitolo.
OnBeforeList
procedure OnBeforeList(EDICommunicationChannel: Record "ANVEDI Communication Channel";EventArgs: Codeunit "ANVEDI Event Args")
Questo codice viene richiamato prima che il modulo cerchi nuovi dati. Questo può essere usato per inviare un comando o uno script esterno per ricevere i file, prima che il modulo cerchi nuovi dati.
Il canale di comunicazione che deve recuperare i dati.
Se l’Event è stato elaborato, è necessario impostarlo come gestito. La descrizione della struttura ANVEDI Event Args si trova alla fine di questo capitolo.
OnAfterList
procedure OnAfterList(EDICommunicationChannel: Record "ANVEDI Communication Channel";EventArgs: Codeunit "ANVEDI Event Args")
Il canale di comunicazione che deve recuperare i dati.
Se l’Event è stato elaborato, è necessario impostarlo come gestito. La descrizione della struttura ANVEDI Event Args si trova alla fine di questo capitolo.
Questo codice viene richiamato dopo che il modulo ha cercato nuovi dati.
OnBeforeReceive
procedure OnBeforeReceive(ANVEDITransmission: Record "ANVEDI Transmission";EventArgs: Codeunit "ANVEDI Event Args")
Questo Event viene richiamato prima che venga recuperata una trasmissione. Non è possibile interrompere l’elaborazione in questo momento. Se si vuole decidere se recuperare o meno un messaggio, utilizzare il metodo OnAcceptTransmission.
La trasmissione. I messaggi non sono ancora stati ricevuti.
Se l’Event è stato elaborato, è necessario impostarlo come gestito. La descrizione della struttura ANVEDI Event Args si trova alla fine di questo capitolo.
OnAfterReceive
procedure OnAfterReceive(ANVEDITransmission: Record "ANVEDI Transmission";EventArgs: Codeunit "ANVEDI Event Args")
Questo Event viene richiamato dopo la ricezione di una trasmissione.
La trasmissione dopo che è stata recuperata (è possibile accedere ai messaggi).
Se l’Event è stato elaborato, è necessario impostarlo come gestito. La descrizione della struttura ANVEDI Event Args si trova alla fine di questo capitolo.
OnBeforeArchive
procedure OnBeforeArchive(ANVEDITransmission: Record "ANVEDI Transmission";EventArgs: Codeunit "ANVEDI Event Args")
Questo Event viene richiamato prima dell’archiviazione di una trasmissione.
La trasmissione che verrà archiviata sulla postazione remota.
Se l’Event è stato elaborato, è necessario impostarlo come gestito. La descrizione della struttura ANVEDI Event Args si trova alla fine di questo capitolo.
OnAfterArchive
procedure OnAfterArchive(ANVEDITransmission: Record "ANVEDI Transmission";EventArgs: Codeunit "ANVEDI Event Args")
Questo Event viene richiamato dopo l’archiviazione di una trasmissione.
La trasmissione archiviata nella postazione remota.
Se l’Event è stato elaborato, è necessario impostarlo come gestito. La descrizione della struttura ANVEDI Event Args si trova alla fine di questo capitolo.
OnBeforeDelete
procedure OnBeforeDelete(ANVEDITransmission: Record "ANVEDI Transmission";EventArgs: Codeunit "ANVEDI Event Args")
Questo Event viene richiamato prima dell’eliminazione di una trasmissione.
La trasmissione che verrà cancellata sulla postazione remota.
Se l’Event è stato elaborato, è necessario impostarlo come gestito. La descrizione della struttura ANVEDI Event Args si trova alla fine di questo capitolo.
OnAfterDelete
procedure OnAfterDelete(ANVEDITransmission: Record "ANVEDI Transmission";EventArgs: Codeunit "ANVEDI Event Args")
Questo Event viene richiamato dopo l’eliminazione di una trasmissione.
La trasmissione che è stata cancellata dalla posizione remota.
Se l’Event è stato elaborato, è necessario impostarlo come gestito. La descrizione della struttura ANVEDI Event Args si trova alla fine di questo capitolo.
OnBeforeSend
procedure OnBeforeSend(ANVEDITransmission: Record "ANVEDI Transmission";EventArgs: Codeunit "ANVEDI Event Args")
Questo Event viene richiamato prima dell’invio di una trasmissione.
La trasmissione che verrà inviata.
Se l’Event è stato elaborato, è necessario impostarlo come gestito. La descrizione della struttura ANVEDI Event Args si trova alla fine di questo capitolo.
OnComposeMessage
procedure OnComposeMessage(ANVEDITransmission: Record "ANVEDI Transmission";EventArgs: Codeunit "ANVEDI Event Args")
Questo Event viene richiamato quando viene composta una trasmissione.
La trasmissione che viene composta.
Se l’Event è stato elaborato, è necessario impostarlo come gestito. La descrizione della struttura ANVEDI Event Args si trova alla fine di questo capitolo.
OnAfterSend
procedure OnAfterSend(ANVEDITransmission: Record "ANVEDI Transmission";EventArgs: Codeunit "ANVEDI Event Args")
Questo Event viene richiamato dopo l’invio di una trasmissione.
La trasmissione inviata.
Se l’Event è stato elaborato, è necessario impostarlo come gestito. La descrizione della struttura ANVEDI Event Args si trova alla fine di questo capitolo.
OnReplacePlaceholder
procedure OnReplacePlaceholder(Placeholder: Text[50];var ANVEDILinkedDocument: Record "ANVEDI Linked Document";EventArgs: Codeunit "ANVEDI Event Args")
Questa funzione viene richiamata quando viene valutata una stringa che può contenere variabili definite dall’utente, come il nome di un file.
Il nome del segnaposto. Il modulo sta cercando un valore per sostituire questo segnaposto specifico. Se si vuole fornire un valore, occorre specificare il risultato e impostare l’evento da gestire nell’EventArgs.
Un record pre-filtrato dei documenti collegati. È possibile, ad esempio, utilizzare questa tabella per ottenere i documenti buffer contenuti nel file.
Se l’Event è stato elaborato, è necessario impostarlo come gestito. Dovete anche fornire un valore. La descrizione della struttura ANVEDI Event Args si trova alla fine di questo capitolo.
L’esempio seguente mostra come si possono restituire i dati dal documento collegato:
[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")
Questo Event viene richiamato quando si verifica un errore nella coda di elaborazione.
Se l’Event è stato elaborato, è necessario impostarlo come gestito. La descrizione della struttura ANVEDI Event Args si trova alla fine di questo capitolo.
OnAfterProcess
procedure OnAfterProcess(ANVEDIProcessingQueue: Record "ANVEDI Processing Queue";EventArgs: Codeunit "ANVEDI Event Args")
Questo Event viene richiamato dopo l’elaborazione di una voce nella tabella EDI Processing Queue. È necessario controllare lo stato della voce passata e reagire di conseguenza.
Se l’Event è stato elaborato, è necessario impostarlo come gestito. La descrizione della struttura ANVEDI Event Args si trova alla fine di questo capitolo.
ANVEDI Event Args
Alcuni Events utilizzano una struttura chiamata ANVEDI Event Args. Questa struttura consente di restituire valori e di comunicare al modulo se l’evento è stato gestito.
Le seguenti funzioni sono disponibili sugli ANVEDI Event Args dell’ANVEDI Event Args passati all’Event:
SetHandled(Value: Boolean)
Se l’Event è stato gestito dal codice dell’utente.
SetResult(Value: Variant)
Il valore di ritorno, se l’Event prevede un valore di ritorno.
Esempio
L’esempio seguente mostra come aggiungere la propria funzione personalizzata “MYOBJECT.MYFUNC”, che mostra un messaggio contenente il nome fornito seguito da ‘: ‘ e il valore. È possibile aggiungere tutte le funzioni di tutte le estensioni necessarie.
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;
}
Dipendenze
Se si vuole reagire all’Event tramite AL, è necessario aggiungere una dipendenza al modulo Anveo EDI Connect.
I valori per l’Extension OnPremise sono:
{
"id": "25286BD2-B08A-49F9-B613-64122CCEE4E1",
"name": "Anveo EDI Connect - OnPremise",
"publisher": "conion media GmbH",
"version": "5.x.y.z"
}
Assicurarsi di sostituire x, y, z con il numero di versione corretto.
I valori per Business Central Online e Universal Code Extension sono:
{
"id": "FC195C4F-19BF-4167-BFE8-6D1FF7D266BC",
"name": "Anveo EDI Connect",
"publisher": "conion media GmbH",
"version": "5.x.y.z"
}
Assicurarsi di sostituire x, y, z con il numero di versione corretto. Le versioni precedenti di BC chiamavano “id” “appId”.