ANVEDI Integration
Die Codeunit enthält alle öffentlichen API-Aufrufe zum EDI-Modul, die Sie möglicherweise von Ihrem benutzerdefinierten Code aus aufrufen möchten. Alle Funktionen in dieser Codeunit sollen verwendet werden, wenn Sie direkt per Code eine EDI-Aktion starten wollen.
Allgemeine Konzepte
In diesem Abschnitt werden wir zunächst die grundlegenden Konzepte besprechen, die Sie verstehen sollten, um die Codebeispiele lesen zu können.
Benutzer-Transaktionen
Anvaigo EDI Connect verfügt über ein Konzept namens „Benutzertransaktionen“, das mehrere Datenbanktransaktionen umfassen und mehrere Fehler sammeln kann. Die meisten Aktionen in Anvaigo EDI Connect erfordern eine offene Benutzertransaktion, um sie auszuführen. Sie können eine Benutzertransaktion durch Aufruf starten:
// 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);
Mit dem Aufruf von END_USER_TRANSACTION können Sie entweder Fehler anzeigen, die aktuelle Datenbanktransaktion abbrechen oder einen Rückgabewert erhalten, ob ein Fehler aufgetreten ist. Wir werden dies später im Detail besprechen.
BEGIN_USER_TRANSACTION
Startet eine neue Benutzertransaktion. Bitte beachten Sie, daß Sie Aufrufe im EDI-Modul nur an Stellen integrieren, an denen ein COMMIT stattfinden kann. In vielen Fällen wird das Modul alle Datenbankänderungen festschreiben, bevor es die EDI-Logik ausführt. Ziehen Sie auch in Erwägung, die Daten lediglich zu markieren und die EDI-Logik über einen Hintergrundjob auszuführen.
Der angegebene Text wird dem Benutzer angezeigt, wenn ein Wartedialog geöffnet ist, da der Vorgang Zeit benötigt.
BEGIN_USER_TRANSACTION(Text : Text[1024])
Sie sollten einen Aufruf von BEGIN_USER_TRANSACTION immer mit einem Aufruf von END_USER_TRANSACTION abschließen.
SHOWDIALOGS
Mit dieser Funktion können Sie alle EDI-Dialoge ausblenden.
SHOWDIALOGS(ShowDialogs : Boolean)
Der Parameter gibt an, ob die Dialoge angezeigt werden oder nicht. Ein Aufruf dieser Funktion muss innerhalb einer Benutzertransaktion erfolgen. Diese Funktion wird normalerweise direkt nach BEGIN_USER_TRANSACTION aufgerufen.
ISPROCESSING
Diese Funktion gibt zurück, ob Sie sich innerhalb einer Mapping befinden. Sie können diesen Wert bei der Validierung von Triggern überprüfen, um beispielsweise ein anderes Verhalten bei der Verarbeitung von EDI-Prozessen zu erreichen. Sie können diesen Wert auch verwenden, um Eingabedialoge nur dann anzuzeigen, wenn Sie kein EDI verarbeiten.
END_USER_TRANSACTION
Mit dieser Funktion wird eine Benutzertransaktion abgebrochen.
END_USER_TRANSACTION(ShowErrorList : Boolean; BreakOnError : Boolean) Success : Boolean
Wenn während der Transaktion Fehler aufgetreten sind, werden diese dem Endbenutzer in einem Dialog angezeigt. Dieser Parameter hat keine Auswirkung, wenn GUIALLOWED auf False steht.
Ob das Modul einen Fehler auslösen soll, der den aktuellen Prozessablauf unterbricht. Der gesamte Code nach dieser Zeile wird nicht ausgeführt, wenn während der Transaktion ein Fehler auftrat. Wenn dieser Parameter auf True gesetzt wird, wird eine Fehlermeldung angezeigt, dass ein oder mehrere Fehler aufgetreten sind, falls es welche gab. In diesem Fall kann der Benutzer die vollständige Liste der Fehler nicht sehen.
Ein Rückgabewert, ob ein Fehler aufgetreten ist oder nicht. Gibt bei Erfolg True zurück, d.h. keine Fehler aufgetreten sind; ansonsten False.
Der Rückgabewert war in älteren Versionen des Moduls anders benannt, hatte aber die gleiche Funktion. Der alte Name des Rückgabewerts war falsch, die Funktion gab bei Erfolg immer True zurück.
Arbeiten mit Business-Transaktionen
RUN_BUSINESSTRANSACTION_JOB
Führt den Datenerfassungsauftrag für eine bestimmte Geschäftsvorgangsart aus. Dieser muss innerhalb einer Benutzertransaktion aufgerufen werden.
RUN_BUSINESSTRANSACTION_JOB(BusinessTransactionTypeCode : Code[20])
Code der Geschäftsvorgangsart.
// 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
Startet einen neuen Geschäftsvorgang für den angegebenen Code und die Datensatz-ID.
START_BT_WITH_REC(BusinessTransactionTypeCode : Code[20];RecID : RecordID)
RUN_BT_BATCH_JOB
Führt den Batch-Sammelauftrag mit dem angegebenen Namen aus. Dieser muss innerhalb einer Benutzertransaktion aufgerufen werden.
RUN_BT_BATCH_JOB(BatchCode : Code[20])
Wenn Sie die Funktion mit RUN_BUSINESSTRANSACTION_JOB kombinieren wollen, müssen Sie beide Funktionen in separaten BEGIN..END_USER_TRANSACTION-Blöcken kapseln und folgendes dazwischen einfügen:
COMMIT;
SELECTLATESTVERSION();
Aktionen
Manchmal möchten Sie eine Schaltfläche auf einer Seite erstellen, um einen EDI-Prozess zu starten, oder Sie möchten ihn z. B. in den Freigabeprozess integrieren. In diesen Fällen können Sie fast alle Aktionen des Moduls über den Code ausführen. Bitte beachten Sie, dass EDI-Prozesse in der Regel automatisiert und im Hintergrund ablaufen sollten. Bevor Sie also Aktionen in den Code einfügen, sollten Sie die Möglichkeit eines Hintergrundauftrags als Alternative in Betracht ziehen.
Führen Sie ein EDI Mapping durch
Um ein EDI Mapping durchzuführen, müssen wir eine Benutzertransaktion starten. Danach wollen wir vielleicht Daten an die Mapping übergeben. Wir können dann das Mapping ausführen und das Ergebnis prüfen, wenn wir die Benutzertransaktion beenden. Die detaillierte Beschreibung der Befehle finden Sie nach dem Codebeispiel.
// 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
Setzt alle vorhandenen gespeicherten Tabellenansichten zurück. Muss innerhalb einer Benutzertransaktion aufgerufen werden.
RESET_TABLEVIEWS()
SET_TABLEVIEW
Speichert einen Tabellenview unter einem bestimmten Namen. Muss innerhalb einer Benutzertransaktion aufgerufen werden.
SET_TABLEVIEW(FilterName : Code[30];FilterText : Text[1024])
Ein Code, der den Namen des Filters darstellt. Sie müssen genau denselben Namen in der EDI Mapping angeben, um den Filter abzurufen.
Der Filtertext in Form einer Anvaigo EDI Connect-Tabellenansicht. Wenn möglich, sollten Sie die in Microsoft Dynamics 365 Business Central eingebaute Funktion GETVIEW verwenden, um die korrekt formatierte Zeichenfolge zu erhalten.
GET_TABLEVIEW
Ruft einen gespeicherten Filter ab. Muss innerhalb einer Benutzertransaktion aufgerufen werden.
GET_TABLEVIEW(FilterName : Code[30]) : Text[1024]
RUN
Führen Sie ein oder mehrere EDI-Mappings aus. Muss innerhalb einer Benutzertransaktion aufgerufen werden.
RUN(ProjectFilter : Text[250];FormatFilter : Text[250];CodeFilter : Text[250];MultipleAllowed : Boolean;ProcessFollowing : Boolean;ProcessingQueueView : Text[250])
Der Code des Projekts oder eine dem Projektcode entsprechende Filterzeichenfolge.
Der Code des Mapping oder eine dem Formatcode entsprechende Filterzeichenfolge.
Der Code des Mapping oder ein Filter, der den gewünschten Mapping entspricht.
Ob mehrere Zuordnungen ausgeführt werden sollen, wenn ein Filter angegeben ist. Dies ist eine Sicherheitsfunktion, die verhindert, dass Sie mehr als einen Mapping ausführen.
Ob die Nachbearbeitung durchgeführt werden soll. Normalerweise sollten Sie diesen Wert auf True setzen.
Ein Filter für die Nachbearbeitungen. Sie können normalerweise eine leere Zeichenkette eingeben.
Andere Aktionen
RECEIVE_ALL
Veraltete Funktion. Sie sollten es vermeiden, die allgemeine Funktion aufzurufen, und stattdessen eine der spezifischeren Funktionen unten aufrufen.
Empfängt alle Kommunikationskanäle. Diese Funktion muss innerhalb einer Benutzertransaktion aufgerufen werden.
RECEIVE_ALL(ProcessFollowing : Boolean;ProcessingQueueView : Text[250])
RECEIVE_FOLDER
Empfängt die Daten aus dem angegebenen Übertragungsordner oder den Ordnern. Diese Funktion muss innerhalb einer Benutzertransaktion aufgerufen werden.
RECEIVE_FOLDER(TransmissionFolderCodeFilter : Text[250];ProcessFollowing : Boolean;ProcessingQueueView : Text[250])
Der Code des Übertragungsfilters oder eine Filterzeichenfolge im Codefeld.
Ob die Nachbearbeitung durchgeführt werden soll. Normalerweise sollten Sie diesen Wert auf True setzen.
Ein Filter für die Nachbearbeitungen. Sie können normalerweise eine leere Zeichenkette eingeben.
RECEIVE_COMMUNICATIONCHANNEL
Empfängt Daten über den angegebenen Kommunikationskanal. Diese Funktion muss innerhalb einer Benutzertransaktion aufgerufen werden.
RECEIVE_COMMUNICATIONCHANNEL(CommunicationChannelCodeFilter : Text[250];ProcessFollowing : Boolean;ProcessingQueueView : Text[250])
Der Code des Kommunikationskanals oder eine Filterzeichenfolge für das Codefeld.
Ob die Nachbearbeitung durchgeführt werden soll. Normalerweise sollten Sie diesen Wert auf True setzen.
Ein Filter für die Nachbearbeitungen. Sie können normalerweise eine leere Zeichenkette eingeben.
SEND_ALL
Veraltete Funktion. Sie sollten es vermeiden, die allgemeine Funktion aufzurufen, und stattdessen eine der spezifischeren Funktionen unten aufrufen.
Sendet alle Kommunikationskanäle. Diese Funktion muss innerhalb einer Benutzertransaktion aufgerufen werden.
SEND_ALL(ProcessFollowing : Boolean;ProcessingQueueView : Text[250])
Ob die Nachbearbeitung durchgeführt werden soll. Normalerweise sollten Sie diesen Wert auf True setzen.
Ein Filter für die Nachbearbeitungen. Sie können normalerweise eine leere Zeichenkette eingeben.
SEND_FOLDER
Sendet offene Übertragungen aus dem angegebenen Übertragungsordner. Diese Funktion muss innerhalb einer Benutzertransaktion aufgerufen werden.
SEND_FOLDER(TransmissionFolderCodeFilter : Text[250];ProcessFollowing : Boolean;ProcessingQueueView : Text[250])
Der Code des Übertragungsordners oder eine Filterzeichenfolge für das Codefeld.
Ob die Nachbearbeitung durchgeführt werden soll. Normalerweise sollten Sie diesen Wert auf True setzen.
Ein Filter für die Nachbearbeitungen. Sie können normalerweise eine leere Zeichenkette eingeben.
SEND_COMMUNICATIONCHANNEL
Sendet offene Übertragungen auf dem angegebenen Kommunikationskanal. Diese Funktion muss innerhalb einer Benutzertransaktion aufgerufen werden.
SEND_COMMUNICATIONCHANNEL(CommunicationChannelCodeFilter : Text[250];ProcessFollowing : Boolean;ProcessingQueueView : Text[250])
Der Code des Kommunikationskanals oder eine Filterzeichenfolge für das Codefeld.
Ob die Nachbearbeitung durchgeführt werden soll. Normalerweise sollten Sie diesen Wert auf True setzen.
Ein Filter für die Nachbearbeitungen. Sie können normalerweise eine leere Zeichenkette eingeben.
PROCESS
PROCESS(ProcessFollowing : Boolean;ProcessingQueueView : Text[250];UserTransactionFilter : Boolean)
Ob die Nachbearbeitung durchgeführt werden soll. Normalerweise sollten Sie diesen Wert auf True setzen.
Ein Filter für die Nachbearbeitungen. Sie können normalerweise eine leere Zeichenkette eingeben.
Ob nur Nachbearbeitungen aus der aktuellen Benutzertransaktion verarbeitet werden sollen.
Einstellung des Empfängers/Absenders
SET_COMMUNICATION_CHANNEL
Setzt den Kommunikationskanal für den folgenden Mapping innerhalb der Benutzertransaktion.
SET_COMMUNICATION_CHANNEL(ChannelCode : Code[20])
Der Code des Kommunikationskanals.
SET_RECEIVER_PARTNER
Setzt den Empfängerpartner für den folgenden Mapping innerhalb der Benutzertransaktion.
SET_RECEIVER_PARTNER(ReceiverPartner : Code[20])
Der Partnercode des Empfängers.
SET_RECEIVER_IDENTIFICATION
Setzt die Empfängeridentifikation für den folgenden Mapping innerhalb der Benutzertransaktion.
SET_RECEIVER_IDENTIFICATION(Identification : Text[64])
Die Identifizierung des Empfängers. Dies ist ein Freitext, der auf bestimmten Kommunikationskanälen eine besondere Bedeutung haben kann.
SET_SENDER_PARTNER
Setzt den Absenderpartner für den folgenden Mapping innerhalb der Benutzertransaktion.
SET_SENDER_PARTNER(PartnerCode : Code[20])
Der Partnercode des Absenders.
SET_SENDER_IDENTIFICATION
Legt die Absenderkennung für den folgenden Mapping innerhalb der Benutzertransaktion fest.
SET_SENDER_IDENTIFICATION(Identification : Text[64])
Die Identifizierung des Empfängers. Dies ist ein Freitext, der auf bestimmten Kommunikationskanälen eine besondere Bedeutung haben kann.
Protokollierung und Fehlerbehandlung
Die folgenden Funktionen können nur aufgerufen werden, während ein Mapping läuft. Diese Funktionen sind für benutzerdefinierte Fehlerbehandlungen im Code gedacht.
LogError
Protokolliert eine Fehlermeldung.
LogError(ErrorMessage : Text[1024])
Die Fehlermeldung. Die Ausführung wird nach diesem Aufruf fortgesetzt. Um den Kontrollfluss zu unterbrechen, verwenden Sie die native Funktion ERROR.
LogWarning
Protokolliert eine Warnung.
LogWarning(WarningMessage : Text[1024])
Der Text der Warnung.
LogInformation
Protokolliert Informationen.
LogInformation(InformationMessage : Text[1024])
Die zu protokollierenden Informationen.
LogDocumentError
Protokolliert einen Fehler, der zu einem EDI-Dokument gehört. Es gibt eine universellere Funktion namens LogRecIDErrorWithCode.
LogDocumentError(ErrorMessage : Text[1024];EDIDocument : Record "EDI Document")
Die Fehlermeldung.
Das EDI-Dokument, zu dem der Fehler gehört.
LogDocumentWarning
Protokolliert eine Warnung, die zu einem EDI-Dokument gehört. Es gibt eine universellere Funktion namens LogRecIDWarningWithCode.
LogDocumentWarning(WarningMessage : Text[1024];EDIDocument : Record "EDI Document")
Die zu protokollierende Warnung.
Das EDI-Dokument, zu dem der Fehler gehört.
LogDocumentInformation
Protokolliert eine Information, die zu einem EDI-Dokument gehört. Es gibt eine universellere Funktion namens LogRecIDInformationWithCode.
LogDocumentInformation(InformationMessage : Text[1024];EDIDocument : Record "EDI Document")
Die zu protokollierenden Informationen.
Das EDI-Dokument, zu dem der Fehler gehört.
LogDocumentLineError
Protokolliert einen Fehler, der zu einer EDI-Belegzeile gehört. Es gibt eine allgemeinere Funktion namens LogRecIDErrorWithCode.
LogDocumentLineError(ErrorMessage : Text[1024];EDIDocumentLine : Record "EDI Document Line")
Die zu protokollierende Fehlermeldung.
Die EDI-Dokumentzeile, zu der der Fehler gehört.
LogDocumentLineWarning
Protokolliert eine Warnung, die zu einer EDI-Belegzeile gehört. Es gibt eine allgemeinere Funktion namens LogRecIDWarningWithCode.
LogDocumentLineWarning(WarningMessage : Text[1024];EDIDocumentLine : Record "EDI Document Line")
Die Warnung, die protokolliert werden soll.
Die EDI-Dokumentzeile, zu der der Fehler gehört.
LogDocumentLineInformation
Protokolliert eine Information, die zu einer EDI-Dokumentzeile gehört. Es gibt eine allgemeinere Funktion namens LogRecIDInformationWithCode.
LogDocumentLineInformation(InformationMessage : Text[1024];EDIDocumentLine : Record "EDI Document Line")
Die zu protokollierenden Informationen.
Die EDI-Dokumentzeile, zu der der Fehler gehört.
LogErrorWithCode
Protokolliert einen Fehler mit einem zusätzlichen Fehlercode.
LogErrorWithCode(ContinueExecution : Boolean;ErrorMessage : Text[1024];Code : Code[20])
ob der Kontrollfluss unterbrochen oder die Ausführung fortgesetzt werden soll
Die zu protokollierende Fehlermeldung.
Ein Code zur Identifizierung des Fehlers.
LogWarningWithCode
Protokolliert eine Warnung mit einem zusätzlichen Fehlercode.
LogWarningWithCode(WarningMessage : Text[1024];Code : Code[20])
Die Warnung, die protokolliert werden soll.
Ein Code zur Identifizierung des Fehlers.
LogInformationWithCode
Protokolliert eine Information mit einem zusätzlichen Fehlercode.
LogInformationWithCode(InformationMessage : Text[1024];Code : Code[20])
Die Informationen, die protokolliert werden sollen.
Ein Code zur Identifizierung des Fehlers.
LogRecIDErrorWithCode
Protokolliert eine Fehlermeldung, die zu einem bestimmten Datensatz gehören sollte.
LogRecIDErrorWithCode(ContinueExecution : Boolean;ErrorMessage : Text[1024];RecID : RecordID;Code : Code[20];IsUserAcceptable : Boolean)
Ob der Kontrollfluss unterbrochen oder die Ausführung fortgesetzt werden soll.
Die zu protokollierende Fehlermeldung.
Die Datensatz-ID, zu der der Fehler gehört.
Ein Fehlercode zur Identifizierung des Fehlers.
ob der Fehler vom Endbenutzer akzeptiert werden kann. Dazu ist ein nicht leerer Fehlercode erforderlich.
LogRecIDWarningWithCode
Protokolliert eine Warnung, die zu einem Datensatz gehören sollte.
LogRecIDWarningWithCode(WarningMessage : Text[1024];RecID : RecordID;Code : Code[20])
Die Warnung, die protokolliert werden soll.
Die Datensatz-ID, zu der die Warnung gehören soll.
Ein Code zur Identifizierung des Protokolleintrags.
LogRecIDInformationWithCode
Protokolliert eine Information, die zu einem Datensatz gehören soll.
LogRecIDInformationWithCode(InformationMessage : Text[1024];RecID : RecordID;Code : Code[20])
Die Informationen, die protokolliert werden sollen.
Die Datensatz-ID, zu der die Informationen gehören sollen.
Ein Code zur Identifizierung des Protokolleintrags.