Jest to tłumaczenie automatyczne. Pierwotne stanowisko jest dostępne w angielski.

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);
Przykład: Rozpoczęcie transakcji użytkownika

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
ShowErrorList

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.

BreakOnError

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.

Success

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])
BusinessTransactionTypeCode

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);
Przykład: Uruchamianie zadania zbierania danych transakcji biznesowych

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);
Przykład kodu: Uruchom mapping, aby wyeksportować fakturę

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])
FilterName

Kod reprezentujący nazwę filtra. Będziesz musiał podać dokładnie tę samą nazwę w EDI Mapping, aby pobrać filtr.

FilterText

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])
ProjectFilter

Kod projektu lub ciąg filtra pasujący do kodu projektu.

FormatFilter

Kod formatu mapping lub ciąg filtru pasujący do kodu formatu.

CodeFilter

Kod mapping lub filtr pasujący do żądanych kodów mapping.

MultipleAllowed

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.

ProcessFollowing

Czy należy wykonać przetwarzanie końcowe. Zazwyczaj należy ustawić wartość True.

ProcessingQueueView

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])
TransmissionFolderCodeFilter

Kod filtra transmisji lub ciąg filtra w polu kodu.

ProcessFollowing

Czy należy wykonać przetwarzanie końcowe. Zazwyczaj należy ustawić wartość True.

ProcessQueueView

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])
CommunicationChannelCodeFilter

Kod kanału komunikacyjnego lub ciąg filtrujący w polu kodu.

ProcessFollowing

Czy należy wykonać przetwarzanie końcowe. Zazwyczaj należy ustawić wartość True.

ProcessQueueView

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])
ProcessFollowing

Czy należy wykonać przetwarzanie końcowe. Zazwyczaj należy ustawić wartość True.

ProcessQueueView

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])
TransmissionFolderCodeFilter

Kod folderu transmisji lub ciąg filtra w polu kodu.

ProcessFollowing

Czy należy wykonać przetwarzanie końcowe. Zazwyczaj należy ustawić wartość True.

ProcessQueueView

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])
CommunicationChannelCodeFilter

Kod kanału komunikacyjnego lub ciąg filtrujący w polu kodu.

ProcessFollowing

Czy należy wykonać przetwarzanie końcowe. Zazwyczaj należy ustawić wartość True.

ProcessQueueView

Filtr przetwarzania końcowego. Zwykle można przekazać pusty ciąg znaków.

PROCESS

PROCESS(ProcessFollowing : Boolean;ProcessingQueueView : Text[250];UserTransactionFilter : Boolean)
ProcessFollowing

Czy należy wykonać przetwarzanie końcowe. Zazwyczaj należy ustawić wartość True.

ProcessQueueView

Filtr przetwarzania końcowego. Zwykle można przekazać pusty ciąg znaków.

UserTransactionFilter

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])
ChannelCode

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])
ReceiverPartner

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])
Identification

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])
PartnerCode

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])
Identification

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])
ErrorMessage

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])
WarningMessage

Tekst ostrzeżenia.

LogInformation

Informacje o dziennikach.

LogInformation(InformationMessage : Text[1024])
InformationMessage

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")
ErrorMessage

Komunikat o błędzie.

EDIDocument

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")
WarningMessage

Ostrzeżenie do zarejestrowania.

EDIDocument

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")
InformationMessage

Informacje, które mają być rejestrowane.

EDIDocument

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")
ErrorMessage

Komunikat o błędzie do zarejestrowania.

EDIDocumentLine

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")
WarningMessage

Ostrzeżenie, które powinno zostać zarejestrowane.

EDIDocumentLine

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")
InformationMessage

Informacje, które mają być rejestrowane.

EDIDocumentLine

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])
ContinueExecution

Czy przerwać przepływ sterowania, czy kontynuować wykonywanie

ErrorMessage

Komunikat o błędzie do zarejestrowania.

Code

Kod identyfikujący błąd.

LogWarningWithCode

Rejestruje ostrzeżenie z dodatkowym kodem błędu.

LogWarningWithCode(WarningMessage : Text[1024];Code : Code[20])
WarningMessage

Ostrzeżenie, które powinno zostać zarejestrowane.

Code

Kod identyfikujący błąd.

LogInformationWithCode

Rejestruje informację z dodatkowym kodem błędu.

LogInformationWithCode(InformationMessage : Text[1024];Code : Code[20])
InformationMessage

Informacje, które powinny być rejestrowane.

Code

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)
ContinueExecution

Czy przerwać przepływ sterowania, czy kontynuować wykonywanie.

ErrorMessage

Komunikat o błędzie do zarejestrowania.

RecID

Identyfikator rekordu, do którego należy błąd.

Code

Kod błędu identyfikujący błąd.

IsUserAcceptable

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])
WarningMessage

Ostrzeżenie, które powinno zostać zarejestrowane.

RecID

Identyfikator rekordu, do którego powinno należeć ostrzeżenie.

Code

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])
InformationMessage

Informacje, które powinny być rejestrowane.

RecID

Identyfikator rekordu, do którego powinny należeć informacje.

Code

Kod identyfikujący wpis w dzienniku.