ANVEDI Integration
L’codeunit ANVEDI Integration contient tous les appels API publics au module EDI, que vous pourriez vouloir appeler à partir de votre code personnalisé. Toutes les fonctions de cette codeunit sont censées être utilisées si vous souhaitez lancer directement une action EDI par code.
Concepts généraux
Dans cette section, nous aborderons d’abord les concepts de base, que vous devez comprendre pour pouvoir lire les exemples de code.
Transactions des utilisateurs
Anvaigo EDI Connect dispose d’un concept appelé « transactions utilisateur », qui peut couvrir plusieurs transactions de base de données et collecter plusieurs erreurs. La plupart des actions d’Anvaigo EDI Connect nécessitent une transaction utilisateur ouverte pour être exécutées. Vous pouvez lancer une transaction utilisateur en appelant
// 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);
L’appel à END_USER_TRANSACTION permet soit d’afficher les erreurs, soit d’interrompre la transaction de base de données en cours, soit d’obtenir une valeur de retour indiquant s’il y a eu une erreur. Nous y reviendrons en détail plus tard.
BEGIN_USER_TRANSACTION
Démarre une nouvelle transaction d’utilisateur. Veuillez noter que vous n’intégrez les appels dans le module EDI qu’aux points où un COMMIT peut avoir lieu. Dans de nombreux cas, le module validera toutes les modifications apportées à la base de données avant d’exécuter la logique EDI. Vous pouvez également envisager de marquer les données et d’utiliser une tâche d’arrière-plan pour exécuter la logique EDI.
Le texte donné est affiché à l’utilisateur si une boîte de dialogue d’attente est ouverte, car le processus prend du temps.
BEGIN_USER_TRANSACTION(Text : Text[1024])
Vous devez toujours terminer un appel à BEGIN_USER_TRANSACTION par un appel à END_USER_TRANSACTION.
SHOWDIALOGS
Cette fonction peut être utilisée pour masquer toutes les boîtes de dialogue EDI.
SHOWDIALOGS(ShowDialogs : Boolean)
Ce paramètre indique si les boîtes de dialogue sont affichées ou non. L’appel à cette fonction doit se faire à l’intérieur d’une transaction utilisateur. Normalement, cette fonction est appelée directement après BEGIN_USER_TRANSACTION.
ISPROCESSING
Cette fonction indique si vous vous trouvez dans une exécution mapping. Vous pouvez vérifier cette valeur lors de la validation des déclencheurs, par exemple, pour obtenir un comportement différent lors du traitement des processus EDI. Vous pouvez également utiliser cette valeur pour afficher les boîtes de dialogue de saisie uniquement lorsque vous ne traitez pas d’EDI.
END_USER_TRANSACTION
Cette fonction met fin à la transaction d’un utilisateur.
END_USER_TRANSACTION(ShowErrorList : Boolean; BreakOnError : Boolean) Success : Boolean
Si des erreurs se sont produites au cours de la transaction, elles sont affichées dans une boîte de dialogue à l’intention de l’utilisateur final. Ce paramètre n’a aucun effet si GUIALLOWED est égal à False.
Indique si le module doit déclencher une erreur, interrompant ainsi le déroulement du processus en cours. Tout le code après cette ligne n’est pas exécuté s’il y a eu une erreur pendant la transaction. Si ce paramètre a la valeur True, un message d’erreur indiquant qu’une ou plusieurs erreurs se sont produites, le cas échéant, s’affichera. Dans ce cas, l’utilisateur ne peut pas voir la liste complète des erreurs.
Une valeur de retour, indiquant s’il y a eu une erreur ou non. Retourne True en cas de succès, c’est-à-dire il n’y a pas eu d’erreurs ; False sinon.
La valeur de retour était nommée différemment dans les anciennes versions du module, mais avait la même fonction. L’ancien nom de la valeur de retour était incorrect, la fonction renvoyait toujours True en cas de succès.
Travailler avec des transactions commerciales
RUN_BUSINESSTRANSACTION_JOB
Exécute le travail de collecte de données d’un type de transaction spécifié. Elle doit être appelée à l’intérieur d’une transaction utilisateur.
RUN_BUSINESSTRANSACTION_JOB(BusinessTransactionTypeCode : Code[20])
Code du type de transaction 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
Commence une nouvelle transaction commerciale pour le code et l’identifiant d’enregistrement donnés.
START_BT_WITH_REC(BusinessTransactionTypeCode : Code[20];RecID : RecordID)
RUN_BT_BATCH_JOB
Exécute le travail de collecte par lots portant le nom spécifié. Elle doit être appelée à l’intérieur d’une transaction utilisateur.
RUN_BT_BATCH_JOB(BatchCode : Code[20])
Si vous voulez la combiner avec RUN_BUSINESSTRANSACTION_JOB, vous devez encapsuler les deux fonctions dans des blocs BEGIN..END_USER_TRANSACTION séparés et ajouter ce qui suit entre les deux :
COMMIT;
SELECTLATESTVERSION();
Actions
Parfois, vous souhaitez créer un bouton sur une page pour lancer un processus EDI, ou vous voulez l’intégrer, par exemple, dans le processus de validation. Dans ce cas, vous pouvez exécuter presque toutes les actions du module à partir du code. N’oubliez pas que les processus EDI doivent généralement être automatisés et fonctionner en arrière-plan. Par conséquent, avant d’ajouter des actions dans le code, envisagez la possibilité d’un travail en arrière-plan comme alternative.
Exécuter un EDI Mapping
Pour exécuter un EDI Mapping, nous devons lancer une transaction utilisateur. Ensuite, nous pourrions vouloir transmettre des données au mapping. Nous pouvons ensuite exécuter le mapping et vérifier le résultat à la fin de la transaction de l’utilisateur. Vous trouverez la description détaillée des commandes après l’exemple de code.
// 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
Réinitialise toutes les vues de tables stockées existantes. Doit être appelé à l’intérieur d’une transaction utilisateur.
RESET_TABLEVIEWS()
SET_TABLEVIEW
Enregistre une vue de table sous un nom spécifié. Doit être appelé à l’intérieur d’une transaction utilisateur.
SET_TABLEVIEW(FilterName : Code[30];FilterText : Text[1024])
Un code représentant le nom du filtre. Vous devrez spécifier exactement le même nom dans le EDI Mapping pour récupérer le filtre.
Le texte du filtre se présente sous la forme d’un tableau Anvaigo EDI Connect. Vous devriez utiliser la fonction intégrée GETVIEW Microsoft Dynamics 365 Business Central, si possible, pour obtenir la chaîne correctement formatée.
GET_TABLEVIEW
Récupère un filtre stocké. Doit être appelé à l’intérieur d’une transaction utilisateur.
GET_TABLEVIEW(FilterName : Code[30]) : Text[1024]
RUN
Exécuter un ou plusieurs mappings EDI. Doit être appelé à l’intérieur d’une transaction utilisateur.
RUN(ProjectFilter : Text[250];FormatFilter : Text[250];CodeFilter : Text[250];MultipleAllowed : Boolean;ProcessFollowing : Boolean;ProcessingQueueView : Text[250])
Le code du projet ou une chaîne de filtre correspondant au code du projet.
Le code du format mapping ou une chaîne de filtre correspondant au code du format.
Le code du mapping ou un filtre correspondant aux codes mapping souhaités.
Indique si plusieurs mappages doivent être exécutés lorsqu’un filtre est spécifié. Il s’agit d’un dispositif de sécurité qui vous empêche d’exécuter plus d’un mapping.
Si le post-traitement doit être exécuté. En règle générale, il est préférable d’utiliser la valeur True.
Un filtre sur les post-traitements. On peut normalement vouloir passer une chaîne vide.
Autres actions
RECEIVE_ALL
Fonction obsolète. Vous devez éviter d’appeler la fonction générale et appeler l’une des fonctions plus spécifiques ci-dessous.
Il reçoit tous les canaux de communication. Cette fonction doit être appelée à l’intérieur d’une transaction utilisateur.
RECEIVE_ALL(ProcessFollowing : Boolean;ProcessingQueueView : Text[250])
RECEIVE_FOLDER
Reçoit les données du ou des dossiers de transmission spécifiés. Cette fonction doit être appelée à l’intérieur d’une transaction utilisateur.
RECEIVE_FOLDER(TransmissionFolderCodeFilter : Text[250];ProcessFollowing : Boolean;ProcessingQueueView : Text[250])
Le code du filtre de transmission ou une chaîne de filtrage dans le champ du code.
Si le post-traitement doit être exécuté. En règle générale, il est préférable d’utiliser la valeur True.
Un filtre sur les post-traitements. On peut normalement vouloir passer une chaîne vide.
RECEIVE_COMMUNICATIONCHANNEL
Reçoit des données du canal de communication spécifié. Cette fonction doit être appelée à l’intérieur d’une transaction utilisateur.
RECEIVE_COMMUNICATIONCHANNEL(CommunicationChannelCodeFilter : Text[250];ProcessFollowing : Boolean;ProcessingQueueView : Text[250])
Le code du canal de communication ou une chaîne de filtre sur le champ du code.
Si le post-traitement doit être exécuté. En règle générale, il est préférable d’utiliser la valeur True.
Un filtre sur les post-traitements. On peut normalement vouloir passer une chaîne vide.
SEND_ALL
Fonction obsolète. Vous devez éviter d’appeler la fonction générale et appeler l’une des fonctions plus spécifiques ci-dessous.
Envoie tous les canaux de communication. Cette fonction doit être appelée à l’intérieur d’une transaction utilisateur.
SEND_ALL(ProcessFollowing : Boolean;ProcessingQueueView : Text[250])
Si le post-traitement doit être exécuté. En règle générale, il est préférable d’utiliser la valeur True.
Un filtre sur les post-traitements. On peut normalement vouloir passer une chaîne vide.
SEND_FOLDER
Envoie les transmissions en cours du dossier de transmission spécifié. Cette fonction doit être appelée à l’intérieur d’une transaction utilisateur.
SEND_FOLDER(TransmissionFolderCodeFilter : Text[250];ProcessFollowing : Boolean;ProcessingQueueView : Text[250])
Le code du dossier de transmission ou une chaîne de filtrage sur le champ du code.
Si le post-traitement doit être exécuté. En règle générale, il est préférable d’utiliser la valeur True.
Un filtre sur les post-traitements. On peut normalement vouloir passer une chaîne vide.
SEND_COMMUNICATIONCHANNEL
Envoie des transmissions ouvertes du canal de communication spécifié. Cette fonction doit être appelée à l’intérieur d’une transaction utilisateur.
SEND_COMMUNICATIONCHANNEL(CommunicationChannelCodeFilter : Text[250];ProcessFollowing : Boolean;ProcessingQueueView : Text[250])
Le code du canal de communication ou une chaîne de filtrage sur le champ code.
Si le post-traitement doit être exécuté. En règle générale, il est préférable d’utiliser la valeur True.
Un filtre sur les post-traitements. On peut normalement vouloir passer une chaîne vide.
PROCESS
PROCESS(ProcessFollowing : Boolean;ProcessingQueueView : Text[250];UserTransactionFilter : Boolean)
Si le post-traitement doit être exécuté. En règle générale, il est préférable d’utiliser la valeur True.
Un filtre sur les post-traitements. On peut normalement vouloir passer une chaîne vide.
Indique si seuls les post-traitements de la transaction de l’utilisateur actuel doivent être traités.
Définition du destinataire / de l’expéditeur
SET_COMMUNICATION_CHANNEL
Définit le canal de communication pour l’appel mapping suivant à l’intérieur de la transaction utilisateur.
SET_COMMUNICATION_CHANNEL(ChannelCode : Code[20])
Le code du canal de communication.
SET_RECEIVER_PARTNER
Définit le partenaire récepteur pour l’appel mapping suivant à l’intérieur de la transaction utilisateur.
SET_RECEIVER_PARTNER(ReceiverPartner : Code[20])
Le code partenaire du récepteur.
SET_RECEIVER_IDENTIFICATION
Définit l’identification du récepteur pour l’appel mapping suivant à l’intérieur de la transaction utilisateur.
SET_RECEIVER_IDENTIFICATION(Identification : Text[64])
L’identification du récepteur. Il s’agit d’un texte libre, qui peut avoir une signification particulière sur des canaux de communication spécifiques.
SET_SENDER_PARTNER
Définit le partenaire émetteur pour l’appel mapping suivant à l’intérieur de la transaction utilisateur.
SET_SENDER_PARTNER(PartnerCode : Code[20])
Le code partenaire de l’expéditeur.
SET_SENDER_IDENTIFICATION
Définit l’identification de l’expéditeur pour l’appel mapping suivant à l’intérieur de la transaction utilisateur.
SET_SENDER_IDENTIFICATION(Identification : Text[64])
L’identification du récepteur. Il s’agit d’un texte libre, qui peut avoir une signification particulière sur des canaux de communication spécifiques.
Journalisation et gestion des erreurs
Les fonctions suivantes ne peuvent être appelées que lorsqu’un mapping est en cours d’exécution. Ces fonctions sont destinées à être utilisées pour des traitements d’erreurs personnalisés à partir du code.
LogError
Enregistre un message d’erreur.
LogError(ErrorMessage : Text[1024])
Le message d’erreur. L’exécution se poursuivra après cet appel. Pour interrompre le flux de contrôle, utilisez la fonction native ERROR.
LogWarning
Consigne un avertissement.
LogWarning(WarningMessage : Text[1024])
Le texte de l’avertissement.
LogInformation
Enregistre les informations.
LogInformation(InformationMessage : Text[1024])
Les informations à enregistrer.
LogDocumentError
Enregistre une erreur appartenant à un document EDI. Il existe une fonction plus universelle appelée LogRecIDErrorWithCode.
LogDocumentError(ErrorMessage : Text[1024];EDIDocument : Record "EDI Document")
Le message d’erreur.
Le document EDI auquel l’erreur appartient.
LogDocumentWarning
Enregistre un avertissement concernant un document EDI. Il existe une fonction plus universelle appelée LogRecIDWarningWithCode.
LogDocumentWarning(WarningMessage : Text[1024];EDIDocument : Record "EDI Document")
L’avertissement à consigner.
Le document EDI auquel l’erreur appartient.
LogDocumentInformation
Enregistre une information appartenant à un document EDI. Il existe une fonction plus universelle appelée LogRecIDInformationWithCode.
LogDocumentInformation(InformationMessage : Text[1024];EDIDocument : Record "EDI Document")
Les informations à enregistrer.
Le document EDI auquel l’erreur appartient.
LogDocumentLineError
Enregistre une erreur appartenant à une ligne de document EDI. Il existe une fonction plus générale appelée LogRecIDErrorWithCode.
LogDocumentLineError(ErrorMessage : Text[1024];EDIDocumentLine : Record "EDI Document Line")
Le message d’erreur à enregistrer.
La ligne de document EDI à laquelle l’erreur appartient.
LogDocumentLineWarning
Enregistre un avertissement appartenant à une ligne de document EDI. Il existe une fonction plus générale appelée LogRecIDWarningWithCode.
LogDocumentLineWarning(WarningMessage : Text[1024];EDIDocumentLine : Record "EDI Document Line")
L’avertissement qui doit être enregistré.
La ligne de document EDI à laquelle l’erreur appartient.
LogDocumentLineInformation
Enregistre une information appartenant à une ligne de document EDI. Il existe une fonction plus générale appelée LogRecIDInformationWithCode.
LogDocumentLineInformation(InformationMessage : Text[1024];EDIDocumentLine : Record "EDI Document Line")
Les informations à enregistrer.
La ligne de document EDI à laquelle l’erreur appartient.
LogErrorWithCode
Enregistre une erreur avec un code d’erreur supplémentaire.
LogErrorWithCode(ContinueExecution : Boolean;ErrorMessage : Text[1024];Code : Code[20])
Interrompre le flux de contrôle ou poursuivre l’exécution
Le message d’erreur à enregistrer.
Un code pour identifier l’erreur.
LogWarningWithCode
Enregistre un avertissement avec un code d’erreur supplémentaire.
LogWarningWithCode(WarningMessage : Text[1024];Code : Code[20])
L’avertissement qui doit être enregistré.
Un code pour identifier l’erreur.
LogInformationWithCode
Enregistre une information avec un code d’erreur supplémentaire.
LogInformationWithCode(InformationMessage : Text[1024];Code : Code[20])
Les informations qui doivent être enregistrées.
Un code pour identifier l’erreur.
LogRecIDErrorWithCode
Enregistre un message d’erreur qui devrait appartenir à un enregistrement spécifique.
LogRecIDErrorWithCode(ContinueExecution : Boolean;ErrorMessage : Text[1024];RecID : RecordID;Code : Code[20];IsUserAcceptable : Boolean)
Interrompre le flux de contrôle ou poursuivre l’exécution.
Le message d’erreur à enregistrer.
L’identifiant de l’enregistrement auquel appartient l’erreur.
Un code d’erreur pour identifier l’erreur.
Si l’erreur peut être acceptée par l’utilisateur final. Il faut pour cela que le code d’erreur ne soit pas vide.
LogRecIDWarningWithCode
Enregistre un avertissement qui devrait appartenir à un enregistrement.
LogRecIDWarningWithCode(WarningMessage : Text[1024];RecID : RecordID;Code : Code[20])
L’avertissement qui doit être enregistré.
L’identifiant de l’enregistrement auquel l’avertissement doit appartenir.
Un code pour identifier l’entrée du journal.
LogRecIDInformationWithCode
Enregistre une information qui devrait appartenir à un enregistrement.
LogRecIDInformationWithCode(InformationMessage : Text[1024];RecID : RecordID;Code : Code[20])
Les informations qui doivent être enregistrées.
L’identifiant de l’enregistrement auquel l’information doit appartenir.
Un code pour identifier l’entrée du journal.