ANVEDI Integration
codeunit ANVEDI Integration zawiera wszystkie publiczne wywołania API do modułu EDI, które można wywołać z własnego kodu. Wszystkie funkcje w tej codeunit powinny być używane, jeśli bezpośrednio chcesz rozpocząć akcję EDI za pomocą kodu.
Pojęcia ogólne
W tej sekcji omówimy najpierw podstawowe pojęcia, które powinieneś zrozumieć, aby móc czytać przykłady kodu.
Transakcje użytkownika
Anvaigo EDI Connect ma koncepcję zwaną „transakcjami użytkownika”, która może obejmować wiele transakcji bazy danych i gromadzić wiele błędów. Większość działań w Anvaigo EDI Connect wymaga otwartej transakcji użytkownika do ich uruchomienia. Transakcję użytkownika można rozpocząć przez wywołanie:
// 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);
Wywołanie END_USER_TRANSACTION umożliwia wyświetlenie błędów, przerwanie bieżącej transakcji bazy danych lub uzyskanie wartości zwrotnej, niezależnie od tego, czy wystąpił błąd. Omówimy to szczegółowo później.
BEGIN_USER_TRANSACTION
Rozpoczyna nową transakcję użytkownika. Należy pamiętać, że połączenia w module EDI można integrować tylko w punktach, w których może mieć miejsce COMMIT. W wielu przypadkach moduł zatwierdzi wszystkie zmiany w bazie danych przed wykonaniem logiki EDI. Warto również rozważyć oznaczenie danych i użycie zadania w tle do wykonania logiki EDI.
Podany tekst jest wyświetlany użytkownikowi, jeśli otwarte jest oczekujące okno dialogowe, ponieważ proces ten wymaga czasu.
BEGIN_USER_TRANSACTION(Text : Text[1024])
Wywołanie END_USER_TRANSACTION należy zawsze zakończyć wywołaniem END_USER_TRANSACTION.
SHOWDIALOGS
Ta funkcja może być używana do ukrywania okien dialogowych EDI.
SHOWDIALOGS(ShowDialogs : Boolean)
Parametr określa, czy okna dialogowe są wyświetlane, czy nie. Wywołanie tej funkcji musi znajdować się wewnątrz transakcji użytkownika. Zwykle wywołuje się tę funkcję bezpośrednio po BEGIN_USER_TRANSACTION.
ISPROCESSING
Ta funkcja zwraca, czy użytkownik znajduje się w obrębie wykonania mapping. Wartość tę można sprawdzić podczas walidacji wyzwalaczy, na przykład w celu uzyskania innego zachowania podczas przetwarzania procesów EDI. Możesz również użyć tej wartości, aby wyświetlać okna dialogowe wprowadzania danych tylko wtedy, gdy nie przetwarzasz EDI.
END_USER_TRANSACTION
Ta funkcja zakończy transakcję użytkownika.
END_USER_TRANSACTION(ShowErrorList : Boolean; BreakOnError : Boolean) Success : Boolean
Jeśli podczas transakcji wystąpiły błędy, wyświetl je w oknie dialogowym dla użytkownika końcowego. Ten parametr nie ma żadnego wpływu, jeśli GUIALLOWED ma wartość False.
Czy moduł powinien zgłosić błąd, przerywając bieżący przepływ procesu. Cały kod po tej linii nie jest wykonywany, jeśli wystąpił błąd podczas transakcji. Ustawienie tego parametru na True spowoduje wyświetlenie komunikatu o błędzie, jeśli wystąpił jeden lub więcej błędów. W takim przypadku użytkownik nie może zobaczyć pełnej listy błędów.
Wartość zwracana, niezależnie od tego, czy wystąpił błąd, czy nie. Zwraca True w przypadku powodzenia, tj. nie wystąpiły błędy; False w przeciwnym razie.
Zwracana wartość miała inną nazwę w starszych wersjach modułu, ale pełniła tę samą funkcję. Stara nazwa wartości zwracanej była nieprawidłowa, funkcja zawsze zwracała True po powodzeniu.
Praca z transakcjami biznesowymi
RUN_BUSINESSTRANSACTION_JOB
Uruchamia zadanie gromadzenia danych określonego typu transakcji biznesowej. Musi ona zostać wywołana z poziomu transakcji użytkownika.
RUN_BUSINESSTRANSACTION_JOB(BusinessTransactionTypeCode : Code[20])
Kod typu transakcji biznesowej.
// 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
Rozpoczyna nową transakcję biznesową dla podanego kodu i identyfikatora rekordu.
START_BT_WITH_REC(BusinessTransactionTypeCode : Code[20];RecID : RecordID)
RUN_BT_BATCH_JOB
Uruchamia zadanie zbierania wsadowego o podanej nazwie. Musi ona zostać wywołana z poziomu transakcji użytkownika.
RUN_BT_BATCH_JOB(BatchCode : Code[20])
Jeśli chcesz połączyć ją z RUN_BUSINESSTRANSACTION_JOB, musisz zawrzeć obie funkcje w oddzielnych blokach BEGIN..END_USER_TRANSACTION i dodać następujące elementy pomiędzy nimi:
COMMIT;
SELECTLATESTVERSION();
Działania
Czasami chcesz utworzyć przycisk na stronie, aby rozpocząć proces EDI, lub chcesz zintegrować go, na przykład, z procesem wydania. W tym przypadku można uruchomić prawie wszystkie akcje modułu z poziomu kodu. Należy pamiętać, że procesy EDI powinny być zazwyczaj zautomatyzowane i działać w tle. Dlatego przed dodaniem akcji w kodzie należy rozważyć możliwość zastosowania zadania w tle jako alternatywy.
Uruchom EDI Mapping
Aby uruchomić EDI Mapping, będziemy musieli uruchomić transakcję użytkownika. Następnie możemy chcieć przekazać dane do mapping. Następnie możemy uruchomić mapping i sprawdzić wynik po zakończeniu transakcji użytkownika. Szczegółowy opis poleceń znajduje się po przykładzie kodu.
// 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
Resetuje wszystkie istniejące widoki tabeli. Musi zostać wywołana z poziomu transakcji użytkownika.
RESET_TABLEVIEWS()
SET_TABLEVIEW
Zapisuje widok tabeli pod określoną nazwą. Musi zostać wywołana z poziomu transakcji użytkownika.
SET_TABLEVIEW(FilterName : Code[30];FilterText : Text[1024])
Kod reprezentujący nazwę filtra. Będziesz musiał podać dokładnie tę samą nazwę w EDI Mapping, aby pobrać filtr.
Tekst filtra w formie widoku tabeli Anvaigo EDI Connect. Jeśli to możliwe, należy użyć wbudowanej funkcji Microsoft Dynamics 365 Business Central GETVIEW, aby uzyskać poprawnie sformatowany ciąg znaków.
GET_TABLEVIEW
Pobiera zapisany filtr. Musi zostać wywołana z poziomu transakcji użytkownika.
GET_TABLEVIEW(FilterName : Code[30]) : Text[1024]
RUN
Uruchom jedno lub więcej mapowań EDI. Musi zostać wywołana z poziomu transakcji użytkownika.
RUN(ProjectFilter : Text[250];FormatFilter : Text[250];CodeFilter : Text[250];MultipleAllowed : Boolean;ProcessFollowing : Boolean;ProcessingQueueView : Text[250])
Kod projektu lub ciąg filtra pasujący do kodu projektu.
Kod formatu mapping lub ciąg filtru pasujący do kodu formatu.
Kod mapping lub filtr pasujący do żądanych kodów mapping.
Określa, czy należy wykonać wiele mapowań w przypadku określenia filtra. Jest to funkcja bezpieczeństwa, uniemożliwiająca uruchomienie więcej niż jednego mapping.
Czy należy wykonać przetwarzanie końcowe. Zazwyczaj należy ustawić wartość True.
Filtr przetwarzania końcowego. Zwykle można przekazać pusty ciąg znaków.
Inne działania
RECEIVE_ALL
Funkcja przestarzała. Należy unikać wywoływania funkcji ogólnej i wywołać jedną z bardziej szczegółowych funkcji poniżej.
Odbiera wszystkie kanały komunikacji. Funkcja ta musi być wywoływana z poziomu transakcji użytkownika.
RECEIVE_ALL(ProcessFollowing : Boolean;ProcessingQueueView : Text[250])
RECEIVE_FOLDER
Odbiera dane z określonego folderu lub folderów transmisji. Funkcja ta musi być wywoływana z poziomu transakcji użytkownika.
RECEIVE_FOLDER(TransmissionFolderCodeFilter : Text[250];ProcessFollowing : Boolean;ProcessingQueueView : Text[250])
Kod filtra transmisji lub ciąg filtra w polu kodu.
Czy należy wykonać przetwarzanie końcowe. Zazwyczaj należy ustawić wartość True.
Filtr przetwarzania końcowego. Zwykle można przekazać pusty ciąg znaków.
RECEIVE_COMMUNICATIONCHANNEL
Odbiera dane z określonego kanału komunikacyjnego. Funkcja ta musi być wywoływana z poziomu transakcji użytkownika.
RECEIVE_COMMUNICATIONCHANNEL(CommunicationChannelCodeFilter : Text[250];ProcessFollowing : Boolean;ProcessingQueueView : Text[250])
Kod kanału komunikacyjnego lub ciąg filtrujący w polu kodu.
Czy należy wykonać przetwarzanie końcowe. Zazwyczaj należy ustawić wartość True.
Filtr przetwarzania końcowego. Zwykle można przekazać pusty ciąg znaków.
SEND_ALL
Funkcja przestarzała. Należy unikać wywoływania funkcji ogólnej i wywołać jedną z bardziej szczegółowych funkcji poniżej.
Wysyła wszystkie kanały komunikacji. Funkcja ta musi być wywoływana z poziomu transakcji użytkownika.
SEND_ALL(ProcessFollowing : Boolean;ProcessingQueueView : Text[250])
Czy należy wykonać przetwarzanie końcowe. Zazwyczaj należy ustawić wartość True.
Filtr przetwarzania końcowego. Zwykle można przekazać pusty ciąg znaków.
SEND_FOLDER
Wysyła otwarte transmisje z określonego folderu transmisji. Funkcja ta musi być wywoływana z poziomu transakcji użytkownika.
SEND_FOLDER(TransmissionFolderCodeFilter : Text[250];ProcessFollowing : Boolean;ProcessingQueueView : Text[250])
Kod folderu transmisji lub ciąg filtra w polu kodu.
Czy należy wykonać przetwarzanie końcowe. Zazwyczaj należy ustawić wartość True.
Filtr przetwarzania końcowego. Zwykle można przekazać pusty ciąg znaków.
SEND_COMMUNICATIONCHANNEL
Wysyła otwarte transmisje określonego kanału komunikacyjnego. Funkcja ta musi być wywoływana z poziomu transakcji użytkownika.
SEND_COMMUNICATIONCHANNEL(CommunicationChannelCodeFilter : Text[250];ProcessFollowing : Boolean;ProcessingQueueView : Text[250])
Kod kanału komunikacyjnego lub ciąg filtrujący w polu kodu.
Czy należy wykonać przetwarzanie końcowe. Zazwyczaj należy ustawić wartość True.
Filtr przetwarzania końcowego. Zwykle można przekazać pusty ciąg znaków.
PROCESS
PROCESS(ProcessFollowing : Boolean;ProcessingQueueView : Text[250];UserTransactionFilter : Boolean)
Czy należy wykonać przetwarzanie końcowe. Zazwyczaj należy ustawić wartość True.
Filtr przetwarzania końcowego. Zwykle można przekazać pusty ciąg znaków.
Określa, czy mają być przetwarzane tylko post-processingi z bieżącej transakcji użytkownika.
Ustawianie odbiorcy / nadawcy
SET_COMMUNICATION_CHANNEL
Ustawia kanał komunikacji dla następującego wywołania mapping wewnątrz transakcji użytkownika.
SET_COMMUNICATION_CHANNEL(ChannelCode : Code[20])
Kod kanału komunikacyjnego.
SET_RECEIVER_PARTNER
Ustawia partnera odbiornika dla następującego wywołania mapping wewnątrz transakcji użytkownika.
SET_RECEIVER_PARTNER(ReceiverPartner : Code[20])
Kod partnera odbiornika.
SET_RECEIVER_IDENTIFICATION
Ustawia identyfikację odbiornika dla następującego wywołania mapping wewnątrz transakcji użytkownika.
SET_RECEIVER_IDENTIFICATION(Identification : Text[64])
Identyfikacja odbiornika. Jest to wolny tekst, który może mieć specjalne znaczenie w określonych kanałach komunikacji.
SET_SENDER_PARTNER
Ustawia partnera nadawcy dla następującego wywołania mapping wewnątrz transakcji użytkownika.
SET_SENDER_PARTNER(PartnerCode : Code[20])
Kod partnera nadawcy.
SET_SENDER_IDENTIFICATION
Ustawia identyfikator nadawcy dla następującego wywołania mapping wewnątrz transakcji użytkownika.
SET_SENDER_IDENTIFICATION(Identification : Text[64])
Identyfikacja odbiornika. Jest to wolny tekst, który może mieć specjalne znaczenie w określonych kanałach komunikacji.
Rejestrowanie i obsługa błędów
Poniższe funkcje mogą być wywoływane tylko podczas działania mapping. Funkcje te są przeznaczone do niestandardowej obsługi błędów z poziomu kodu.
LogError
Rejestruje komunikat o błędzie.
LogError(ErrorMessage : Text[1024])
Komunikat o błędzie. Wykonanie będzie kontynuowane po tym wywołaniu. Aby przerwać przepływ sterowania, należy użyć natywnej funkcji ERROR.
LogWarning
Rejestruje ostrzeżenie.
LogWarning(WarningMessage : Text[1024])
Tekst ostrzeżenia.
LogInformation
Informacje o dziennikach.
LogInformation(InformationMessage : Text[1024])
Informacje, które mają być rejestrowane.
LogDocumentError
Rejestruje błąd należący do dokumentu EDI. Istnieje bardziej uniwersalna funkcja o nazwie LogRecIDErrorWithCode.
LogDocumentError(ErrorMessage : Text[1024];EDIDocument : Record "EDI Document")
Komunikat o błędzie.
Dokument EDI, do którego należy błąd.
LogDocumentWarning
Rejestruje ostrzeżenie należące do dokumentu EDI. Istnieje bardziej uniwersalna funkcja o nazwie LogRecIDWarningWithCode.
LogDocumentWarning(WarningMessage : Text[1024];EDIDocument : Record "EDI Document")
Ostrzeżenie do zarejestrowania.
Dokument EDI, do którego należy błąd.
LogDocumentInformation
Rejestruje informacje należące do dokumentu EDI. Istnieje bardziej uniwersalna funkcja o nazwie LogRecIDInformationWithCode.
LogDocumentInformation(InformationMessage : Text[1024];EDIDocument : Record "EDI Document")
Informacje, które mają być rejestrowane.
Dokument EDI, do którego należy błąd.
LogDocumentLineError
Rejestruje błąd należący do EDI Document Line. Istnieje bardziej ogólna funkcja o nazwie LogRecIDErrorWithCode.
LogDocumentLineError(ErrorMessage : Text[1024];EDIDocumentLine : Record "EDI Document Line")
Komunikat o błędzie do zarejestrowania.
Linia dokumentu EDI, do której należy błąd.
LogDocumentLineWarning
Rejestruje ostrzeżenie należące do EDI Document Line. Istnieje bardziej ogólna funkcja o nazwie LogRecIDWarningWithCode.
LogDocumentLineWarning(WarningMessage : Text[1024];EDIDocumentLine : Record "EDI Document Line")
Ostrzeżenie, które powinno zostać zarejestrowane.
Linia dokumentu EDI, do której należy błąd.
LogDocumentLineInformation
Rejestruje informacje należące do EDI Document Line. Istnieje bardziej ogólna funkcja o nazwie LogRecIDInformationWithCode.
LogDocumentLineInformation(InformationMessage : Text[1024];EDIDocumentLine : Record "EDI Document Line")
Informacje, które mają być rejestrowane.
Linia dokumentu EDI, do której należy błąd.
LogErrorWithCode
Rejestruje błąd z dodatkowym kodem błędu.
LogErrorWithCode(ContinueExecution : Boolean;ErrorMessage : Text[1024];Code : Code[20])
Czy przerwać przepływ sterowania, czy kontynuować wykonywanie
Komunikat o błędzie do zarejestrowania.
Kod identyfikujący błąd.
LogWarningWithCode
Rejestruje ostrzeżenie z dodatkowym kodem błędu.
LogWarningWithCode(WarningMessage : Text[1024];Code : Code[20])
Ostrzeżenie, które powinno zostać zarejestrowane.
Kod identyfikujący błąd.
LogInformationWithCode
Rejestruje informację z dodatkowym kodem błędu.
LogInformationWithCode(InformationMessage : Text[1024];Code : Code[20])
Informacje, które powinny być rejestrowane.
Kod identyfikujący błąd.
LogRecIDErrorWithCode
Rejestruje komunikat o błędzie, który powinien należeć do określonego rekordu.
LogRecIDErrorWithCode(ContinueExecution : Boolean;ErrorMessage : Text[1024];RecID : RecordID;Code : Code[20];IsUserAcceptable : Boolean)
Czy przerwać przepływ sterowania, czy kontynuować wykonywanie.
Komunikat o błędzie do zarejestrowania.
Identyfikator rekordu, do którego należy błąd.
Kod błędu identyfikujący błąd.
Czy błąd może zostać zaakceptowany przez użytkownika końcowego. Będzie to wymagało niepustego kodu błędu.
LogRecIDWarningWithCode
Rejestruje ostrzeżenie, które powinno należeć do rekordu.
LogRecIDWarningWithCode(WarningMessage : Text[1024];RecID : RecordID;Code : Code[20])
Ostrzeżenie, które powinno zostać zarejestrowane.
Identyfikator rekordu, do którego powinno należeć ostrzeżenie.
Kod identyfikujący wpis w dzienniku.
LogRecIDInformationWithCode
Rejestruje informacje, które powinny należeć do rekordu.
LogRecIDInformationWithCode(InformationMessage : Text[1024];RecID : RecordID;Code : Code[20])
Informacje, które powinny być rejestrowane.
Identyfikator rekordu, do którego powinny należeć informacje.
Kod identyfikujący wpis w dzienniku.