ANVEDI Integration
L’codeunit ANVEDI Integration contiene tutte le chiamate API pubbliche al modulo EDI, che potreste voler chiamare dal vostro codice personalizzato. Tutte le funzioni di questa codeunit devono essere utilizzate se si desidera avviare direttamente un’azione EDI tramite codice.
Concetti generali
In questa sezione discuteremo innanzitutto i concetti fondamentali, che è bene comprendere per poter leggere gli esempi di codice.
Transazioni degli utenti
Anvaigo EDI Connect ha un concetto chiamato “transazioni utente”, che può abbracciare più transazioni del database e raccogliere più errori. La maggior parte delle azioni di Anvaigo EDI Connect richiede una transazione utente aperta per essere eseguita. È possibile avviare una transazione utente chiamando:
// 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);
La chiamata a END_USER_TRANSACTION consente di mostrare gli errori, di interrompere la transazione corrente del database o di ottenere un valore di ritorno, se c’è stato un errore. Ne parleremo in dettaglio più avanti.
BEGIN_USER_TRANSACTION
Avvia una nuova transazione utente. Si noti che è possibile integrare le chiamate nel modulo EDI solo nei punti in cui può avvenire un COMMIT. In molti casi, il modulo esegue il commit di tutte le modifiche al database prima di eseguire la logica EDI. Considerate anche la possibilità di contrassegnare i dati e di utilizzare un lavoro in background per eseguire la logica EDI.
Il testo dato viene mostrato all’utente, se viene aperta una finestra di dialogo di attesa, perché il processo richiede tempo.
BEGIN_USER_TRANSACTION(Text : Text[1024])
Una chiamata a BEGIN_USER_TRANSACTION deve sempre terminare con una chiamata a END_USER_TRANSACTION.
SHOWDIALOGS
Questa funzione può essere utilizzata per nascondere le finestre di dialogo EDI.
SHOWDIALOGS(ShowDialogs : Boolean)
Il parametro specifica se le finestre di dialogo vengono mostrate o meno. La chiamata a questa funzione deve avvenire all’interno di una transazione utente. Di solito si chiama questa funzione direttamente dopo BEGIN_USER_TRANSACTION.
ISPROCESSING
Questa funzione restituisce se ci si trova all’interno di un’esecuzione di mapping. È possibile controllare questo valore durante la convalida dei trigger, ad esempio per ottenere un comportamento diverso durante l’elaborazione dei processi EDI. Questo valore può essere utilizzato anche per visualizzare le finestre di dialogo di input solo quando non si sta elaborando EDI.
END_USER_TRANSACTION
Questa funzione termina una transazione utente.
END_USER_TRANSACTION(ShowErrorList : Boolean; BreakOnError : Boolean) Success : Boolean
Se ci sono stati errori durante la transazione, mostrarli all’utente finale in una finestra di dialogo. Questo parametro non ha alcun effetto se GUIALLOWED è False.
Se il modulo deve lanciare un errore, interrompendo il flusso del processo in corso. Tutto il codice dopo questa riga non viene eseguito, se si è verificato un errore durante la transazione. Impostando questo parametro su True, viene visualizzato un messaggio di errore che segnala la presenza di uno o più errori. In questo caso l’utente non può vedere l’elenco completo degli errori.
Un valore di ritorno, se c’è stato un errore o meno. Restituisce True in caso di successo, ovvero non ci sono stati errori; altrimenti False.
Il valore di ritorno aveva un nome diverso nelle versioni precedenti del modulo, ma aveva la stessa funzione. Il vecchio nome del valore di ritorno non era corretto, la funzione restituiva sempre True in caso di successo.
Lavorare con le transazioni commerciali
RUN_BUSINESSTRANSACTION_JOB
Esegue il lavoro di raccolta dati di un tipo di transazione aziendale specificato. Questo deve essere chiamato dall’interno di una transazione utente.
RUN_BUSINESSTRANSACTION_JOB(BusinessTransactionTypeCode : Code[20])
Codice del tipo di transazione commerciale.
// 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);
START_BT_WITH_REC
Avvia una nuova transazione commerciale per il codice e l’id del record indicati.
START_BT_WITH_REC(BusinessTransactionTypeCode : Code[20];RecID : RecordID)
RUN_BT_BATCH_JOB
Esegue il lavoro di raccolta batch con il nome specificato. Deve essere richiamato dall’interno di una transazione utente.
RUN_BT_BATCH_JOB(BatchCode : Code[20])
Se si desidera combinarla con RUN_BUSINESSTRANSACTION_JOB, è necessario incapsulare entrambe le funzioni in blocchi BEGIN..END_USER_TRANSACTION separati e aggiungere quanto segue nel mezzo:
COMMIT;
SELECTLATESTVERSION();
Azioni
A volte si vuole creare un pulsante su una pagina per avviare un processo EDI, oppure lo si vuole integrare, ad esempio, nel processo di rilascio. In questi casi è possibile eseguire quasi tutte le azioni del modulo dal codice. Tenete presente che i processi EDI devono essere generalmente automatizzati ed eseguiti in background. Quindi, prima di aggiungere azioni nel codice, considerate la possibilità di un lavoro in background come alternativa.
Eseguire una Mapping EDI
Per eseguire una Mapping EDI è necessario avviare una transazione utente. In seguito, potremmo voler passare i dati alla mapping. Possiamo quindi eseguire la mapping e verificare il risultato al termine della transazione utente. La descrizione dettagliata dei comandi si trova dopo l’esempio di codice.
// 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);
RESET_TABLEVIEWS
Azzera tutte le viste delle tabelle memorizzate esistenti. Deve essere richiamato dall’interno di una transazione utente.
RESET_TABLEVIEWS()
SET_TABLEVIEW
Memorizza una vista tabella con un nome specificato. Deve essere richiamato dall’interno di una transazione utente.
SET_TABLEVIEW(FilterName : Code[30];FilterText : Text[1024])
Un codice che rappresenta il nome del filtro. È necessario specificare esattamente lo stesso nome nella EDI Mapping per recuperare il filtro.
Il testo del filtro sotto forma di tabella Anvaigo EDI Connect. Per ottenere una stringa formattata correttamente, è necessario utilizzare la funzione GETVIEW di Microsoft Dynamics 365 Business Central, se possibile.
GET_TABLEVIEW
Recupera un filtro memorizzato. Deve essere richiamato dall’interno di una transazione utente.
GET_TABLEVIEW(FilterName : Code[30]) : Text[1024]
RUN
Eseguire una o più mappature EDI. Deve essere richiamato dall’interno di una transazione utente.
RUN(ProjectFilter : Text[250];FormatFilter : Text[250];CodeFilter : Text[250];MultipleAllowed : Boolean;ProcessFollowing : Boolean;ProcessingQueueView : Text[250])
Il codice del progetto o una stringa di filtro che corrisponde al codice del progetto.
Il codice del formato mapping o una stringa di filtro che corrisponde al codice del formato.
Il codice della mapping o un filtro che corrisponde ai codici mapping desiderati.
Se devono essere eseguite più mappature nel caso in cui sia specificato un filtro. Si tratta di una funzione di sicurezza che impedisce di eseguire più di una mapping.
Se la post-elaborazione deve essere eseguita. In genere si consiglia di impostare questo valore su True.
Un filtro sulle post-elaborazioni. Di norma, è possibile passare una stringa vuota.
Altre azioni
RECEIVE_ALL
Funzione deprecata. Si dovrebbe evitare di chiamare la funzione generale e chiamare una delle funzioni più specifiche riportate di seguito.
Riceve tutti i canali di comunicazione. Questa funzione deve essere richiamata dall’interno di una transazione utente.
RECEIVE_ALL(ProcessFollowing : Boolean;ProcessingQueueView : Text[250])
RECEIVE_FOLDER
Riceve i dati dalla cartella o dalle cartelle di trasmissione specificate. Questa funzione deve essere richiamata dall’interno di una transazione utente.
RECEIVE_FOLDER(TransmissionFolderCodeFilter : Text[250];ProcessFollowing : Boolean;ProcessingQueueView : Text[250])
Il codice del filtro di trasmissione o una stringa di filtro sul campo codice.
Se la post-elaborazione deve essere eseguita. In genere si consiglia di impostare questo valore su True.
Un filtro sulle post-elaborazioni. Di norma, è possibile passare una stringa vuota.
RECEIVE_COMMUNICATIONCHANNEL
Riceve i dati dal canale di comunicazione specificato. Questa funzione deve essere richiamata dall’interno di una transazione utente.
RECEIVE_COMMUNICATIONCHANNEL(CommunicationChannelCodeFilter : Text[250];ProcessFollowing : Boolean;ProcessingQueueView : Text[250])
Il codice del canale di comunicazione o una stringa di filtro sul campo del codice.
Se la post-elaborazione deve essere eseguita. In genere si consiglia di impostare questo valore su True.
Un filtro sulle post-elaborazioni. Di norma, è possibile passare una stringa vuota.
SEND_ALL
Funzione deprecata. Si dovrebbe evitare di chiamare la funzione generale e chiamare una delle funzioni più specifiche riportate di seguito.
Invia tutti i canali di comunicazione. Questa funzione deve essere richiamata dall’interno di una transazione utente.
SEND_ALL(ProcessFollowing : Boolean;ProcessingQueueView : Text[250])
Se la post-elaborazione deve essere eseguita. In genere si consiglia di impostare questo valore su True.
Un filtro sulle post-elaborazioni. Di norma, è possibile passare una stringa vuota.
SEND_FOLDER
Invia le trasmissioni aperte della cartella di trasmissione specificata. Questa funzione deve essere richiamata dall’interno di una transazione utente.
SEND_FOLDER(TransmissionFolderCodeFilter : Text[250];ProcessFollowing : Boolean;ProcessingQueueView : Text[250])
Il codice della cartella di trasmissione o una stringa di filtro sul campo del codice.
Se la post-elaborazione deve essere eseguita. In genere si consiglia di impostare questo valore su True.
Un filtro sulle post-elaborazioni. Di norma, è possibile passare una stringa vuota.
SEND_COMMUNICATIONCHANNEL
Invia le trasmissioni aperte del canale di comunicazione specificato. Questa funzione deve essere richiamata dall’interno di una transazione utente.
SEND_COMMUNICATIONCHANNEL(CommunicationChannelCodeFilter : Text[250];ProcessFollowing : Boolean;ProcessingQueueView : Text[250])
Il codice del canale di comunicazione o una stringa di filtro sul campo del codice.
Se la post-elaborazione deve essere eseguita. In genere si consiglia di impostare questo valore su True.
Un filtro sulle post-elaborazioni. Di norma, è possibile passare una stringa vuota.
PROCESS
PROCESS(ProcessFollowing : Boolean;ProcessingQueueView : Text[250];UserTransactionFilter : Boolean)
Se la post-elaborazione deve essere eseguita. In genere si consiglia di impostare questo valore su True.
Un filtro sulle post-elaborazioni. Di norma, è possibile passare una stringa vuota.
Se devono essere elaborate solo le post-elaborazioni della transazione utente corrente.
Impostazione del destinatario / mittente
SET_COMMUNICATION_CHANNEL
Imposta il canale di comunicazione per la successiva chiamata di mapping all’interno della transazione utente.
SET_COMMUNICATION_CHANNEL(ChannelCode : Code[20])
Il codice del canale di comunicazione.
SET_RECEIVER_PARTNER
Imposta il partner ricevente per la successiva chiamata di mapping all’interno della transazione utente.
SET_RECEIVER_PARTNER(ReceiverPartner : Code[20])
Il codice del partner del ricevitore.
SET_RECEIVER_IDENTIFICATION
Imposta l’identificazione del destinatario per la successiva chiamata di mapping all’interno della transazione utente.
SET_RECEIVER_IDENTIFICATION(Identification : Text[64])
L’identificazione del ricevitore. Si tratta di un testo libero, che potrebbe avere un significato particolare su canali di comunicazione specifici.
SET_SENDER_PARTNER
Imposta il partner mittente per la seguente chiamata di mapping all’interno della transazione utente.
SET_SENDER_PARTNER(PartnerCode : Code[20])
Il codice partner del mittente.
SET_SENDER_IDENTIFICATION
Imposta l’identificazione del mittente per la successiva chiamata di mapping all’interno della transazione utente.
SET_SENDER_IDENTIFICATION(Identification : Text[64])
L’identificazione del ricevitore. Si tratta di un testo libero, che potrebbe avere un significato particolare su canali di comunicazione specifici.
Registrazione e gestione degli errori
Le seguenti funzioni possono essere richiamate solo durante l’esecuzione di una mapping. Queste funzioni devono essere utilizzate per gestire gli errori in modo personalizzato dal codice.
LogError
Registra un messaggio di errore.
LogError(ErrorMessage : Text[1024])
Il messaggio di errore. L’esecuzione continuerà dopo questa chiamata. Per interrompere il flusso di controllo, utilizzare la funzione nativa ERROR.
LogWarning
Registra un avviso.
LogWarning(WarningMessage : Text[1024])
Il testo dell’avviso.
LogInformation
Informazioni sui registri.
LogInformation(InformationMessage : Text[1024])
Le informazioni da registrare.
LogDocumentError
Registra un errore appartenente a un documento EDI. Esiste una funzione più universale chiamata LogRecIDErrorWithCode.
LogDocumentError(ErrorMessage : Text[1024];EDIDocument : Record "EDI Document")
Il messaggio di errore.
Il documento EDI a cui appartiene l’errore.
LogDocumentWarning
Registra un avviso appartenente a un documento EDI. Esiste una funzione più universale chiamata LogRecIDWarningWithCode.
LogDocumentWarning(WarningMessage : Text[1024];EDIDocument : Record "EDI Document")
L’avviso da registrare.
Il documento EDI a cui appartiene l’errore.
LogDocumentInformation
Registra un’informazione appartenente a un documento EDI. Esiste una funzione più universale chiamata LogRecIDInformationWithCode.
LogDocumentInformation(InformationMessage : Text[1024];EDIDocument : Record "EDI Document")
Le informazioni da registrare.
Il documento EDI a cui appartiene l’errore.
LogDocumentLineError
Registra un errore appartenente a una riga di documento EDI. Esiste una funzione più generale chiamata LogRecIDErrorWithCode.
LogDocumentLineError(ErrorMessage : Text[1024];EDIDocumentLine : Record "EDI Document Line")
Il messaggio di errore da registrare.
La riga del documento EDI a cui appartiene l’errore.
LogDocumentLineWarning
Registra un avviso appartenente a una riga di documento EDI. Esiste una funzione più generale chiamata LogRecIDWarningWithCode.
LogDocumentLineWarning(WarningMessage : Text[1024];EDIDocumentLine : Record "EDI Document Line")
L’avviso che deve essere registrato.
La riga del documento EDI a cui appartiene l’errore.
LogDocumentLineInformation
Registra un’informazione appartenente a una linea di documenti EDI. Esiste una funzione più generale chiamata LogRecIDInformationWithCode.
LogDocumentLineInformation(InformationMessage : Text[1024];EDIDocumentLine : Record "EDI Document Line")
Le informazioni da registrare.
La riga del documento EDI a cui appartiene l’errore.
LogErrorWithCode
Registra un errore con un codice di errore aggiuntivo.
LogErrorWithCode(ContinueExecution : Boolean;ErrorMessage : Text[1024];Code : Code[20])
Se interrompere il flusso di controllo o proseguire con l’esecuzione
Il messaggio di errore da registrare.
Un codice per identificare l’errore.
LogWarningWithCode
Registra un avviso con un codice di errore aggiuntivo.
LogWarningWithCode(WarningMessage : Text[1024];Code : Code[20])
L’avviso che deve essere registrato.
Un codice per identificare l’errore.
LogInformationWithCode
Registra un’informazione con un codice di errore aggiuntivo.
LogInformationWithCode(InformationMessage : Text[1024];Code : Code[20])
Le informazioni che devono essere registrate.
Un codice per identificare l’errore.
LogRecIDErrorWithCode
Registra un messaggio di errore che dovrebbe appartenere a un record specifico.
LogRecIDErrorWithCode(ContinueExecution : Boolean;ErrorMessage : Text[1024];RecID : RecordID;Code : Code[20];IsUserAcceptable : Boolean)
Se interrompere il flusso di controllo o continuare l’esecuzione.
Il messaggio di errore da registrare.
L’ID del record a cui appartiene l’errore.
Un codice di errore per identificare l’errore.
Se l’errore può essere accettato dall’utente finale. Questo richiede un codice di errore non vuoto.
LogRecIDWarningWithCode
Registra un avviso che dovrebbe appartenere a un record.
LogRecIDWarningWithCode(WarningMessage : Text[1024];RecID : RecordID;Code : Code[20])
L’avviso che deve essere registrato.
L’id del record a cui dovrebbe appartenere l’avviso.
Un codice per identificare la voce di registro.
LogRecIDInformationWithCode
Registra un’informazione che dovrebbe appartenere a un record.
LogRecIDInformationWithCode(InformationMessage : Text[1024];RecID : RecordID;Code : Code[20])
Le informazioni che devono essere registrate.
L’id del record a cui le informazioni devono appartenere.
Un codice per identificare la voce di registro.