ANVEDI Events
Anveo EDI Connect oferuje jedną codeunit dla zdarzeń integracyjnych: Codeunit ANVEDI Events. Możesz reagować na zdarzenia w tej codeunit owej za pośrednictwem własnej codeunit. Zdarzenia są obsługiwane zarówno w wersji FOB, jak i Extension systemu Microsoft Dynamics.
Events
Dostępne Events to:
- OnFunctionRegistration
- OnFunctionExecution
- OnJob
- OnAcceptTransmission
- OnBeforeList
- OnAfterList
- OnBeforeReceive
- OnAfterReceive
- OnBeforeArchive
- OnAfterArchive
- OnBeforeDelete
- OnAfterDelete
- OnBeforeSend
- OnComposeMessage
- OnAfterSend
- OnReplacePlaceholder
- OnError
- OnAfterProcess
OnFunctionRegistration
procedure OnFunctionRegistration(Register: Codeunit "ANVEDI Function Register")
To zdarzenie jest wywoływane, gdy moduł wyszukuje funkcje niestandardowe. Można definiować własne funkcje, korzystając z funkcji zapewnianych przez codeunit ANVEDI Function Register, która jest dostępna pod nazwą Register. codeunit udostępnia dwie funkcje: RegisterFunction i AddParameter.
RegisterFunction oczekuje dwóch parametrów, nazwy obiektu i nazwy funkcji nowej funkcji. Nazwy te mogą być dowolne, ale nie mogą przekraczać 30 znaków.
Pierwsze 29 znaków kombinacji nazwy obiektu i funkcji musi być unikalne, aby można było określić parametry z mapping. Nazwy powinny być krótkie.
Po zarejestrowaniu funkcji można wywołać AddParameter do 5 razy. AddParameter oczekuje nazwy parametru funkcji. W jednym Event można użyć wielu bloków RegisterFunction i AddParameter. Zalecamy jednak rozdzielenie wielu funkcji do wielu detektorów Event.
Register.RegisterFunction('CustomObj', 'MyFunction');
Register.AddParameter('Name');
Register.AddParameter('Value');
Po zarejestrowaniu funkcji należy reagować na jej wywołania. Odbywa się to za pomocą OnFunctionExecution opisanego poniżej.
OnFunctionExecution
procedure OnFunctionExecution(FunctionCall: Codeunit "ANVEDI Function Call")
Event jest wywoływane, gdy moduł szuka niestandardowej implementacji funkcji. Instancja codeunit ANVEDI Function Call jest przekazywana do tego zdarzenia pod nazwą FunctionCall.
Powinieneś sprawdzić, czy FunctionCall pasuje do Twojej niestandardowej funkcji i wykonać dowolny kod tylko wtedy, gdy tak jest. Odbywa się to poprzez wywołanie funkcji Is() z tymi samymi parametrami, z którymi wywołano RegisterFunction w OnFunctionRegistration. Jeśli funkcja Is() zwróci wartość true, można uzyskać dostęp do parametrów, wykonać niestandardowy kod i zwrócić wartość.
if FunctionCall.Is(ObjectNameTok, FunctionNameTok) then begin
Name := FunctionCall.GetTextParameter(1);
Val := FunctionCall.GetIntegerParameter(2);
Message(Name + ': ' + Format(Val));
FunctionCall.SetResult(TRUE);
end;
codeunit ANVEDI Function Call udostępnia następujące funkcje:
procedure Is(ObjectName: Text[30];FunctionName: Text[30]): Boolean
Zwraca, czy wywołanie funkcji jest zgodne z określoną sygnaturą funkcji.
procedure SetResult(Value: Variant)
Musisz wywołać tę funkcję, aby pokazać modułowi, że obsłużyłeś wywołanie funkcji. Możesz przekazać wynik funkcji lub po prostu użyć wartości true jako wyniku.
procedure GetTextParameter(ParNum: Integer): Text[1024]
Pobiera parametr z podaną liczbą jako tekst. Indeks zaczyna się od 1.
procedure GetIntegerParameter(ParNum: Integer): Integer
Pobiera parametr z podaną liczbą całkowitą. Indeks zaczyna się od 1.
procedure GetBooleanParameter(ParNum: Integer): Boolean
Pobiera parametr z podaną liczbą jako wartość logiczną. Indeks zaczyna się od 1.
procedure GetDecimalParameter(ParNum: Integer): Decimal
Pobiera parametr z podaną liczbą dziesiętną. Indeks zaczyna się od 1.
procedure GetDateParameter(ParNum: Integer): Date
Pobiera parametr z podaną liczbą jako datą. Indeks zaczyna się od 1.
procedure GetTimeParameter(ParNum: Integer): Time
Pobiera parametr z podaną liczbą jako datą i godziną. Indeks zaczyna się od 1.
procedure GetDateTimeParameter(ParNum: Integer): DateTime
Pobiera parametr z podaną liczbą jako czasem. Indeks zaczyna się od 1.
procedure GetParameter(ParNum: Integer;var EDIVariant: Codeunit "ANVEDI Variant"): Boolean
Pobiera parametr o podanym numerze jako EDIVariant. Funkcja zwraca, czy parametr mógł zostać pobrany. Indeks zaczyna się od 1.
OnJob
procedure OnJob(ParameterDictionary: Codeunit "ANVEDI Data Structures";EventArgs: Codeunit "ANVEDI Event Args")
Do definiowania niestandardowych zadań można użyć codeunit zadania z modułu. codeunit umożliwia obsługę wielu parametrów. Więcej informacji można znaleźć w dokumentacji obsługi zadań.
Słownik zawierający parametry przekazane do zadania.
Należy ustawić Event na obsłużone, jeśli zadanie zostało przetworzone. Opis struktury ANVEDI Event Args znajduje się na końcu tego rozdziału.
OnAcceptTransmission
procedure OnAcceptTransmission(ANVEDITransmission: Record "ANVEDI Transmission";EventArgs: Codeunit "ANVEDI Event Args")
Funkcja ta jest wywoływana w celu określenia, czy plik lub wiadomość powinny zostać zaakceptowane lub zignorowane przez moduł. Moduł nie przechowuje informacji o tym, czy transmisja została zignorowana i wywołuje tę funkcję za każdym razem, gdy widzi transmisję. Plik nie został jeszcze odczytany, więc decyzję można podjąć jedynie na podstawie dostępnych metadanych.
Transmisja, dla której pobrano metadane. Należy pamiętać, że w tym momencie nie otrzymano żadnych danych i rekord nie został jeszcze wprowadzony do bazy danych.
Jeśli Event zostało przetworzone, należy ustawić je jako obsłużone. Powinieneś również zwrócić wartość, czy przetworzyć transmisję (ustaw wartość zwracaną na true); lub nie (ustaw ją na false). Opis struktury ANVEDI Event Args znajduje się na końcu tego rozdziału.
OnBeforeList
procedure OnBeforeList(EDICommunicationChannel: Record "ANVEDI Communication Channel";EventArgs: Codeunit "ANVEDI Event Args")
Kod ten jest wywoływany zanim moduł zacznie szukać nowych danych. Można tego użyć do wydania zewnętrznego polecenia lub skryptu w celu odebrania plików, zanim moduł wyszuka nowe dane.
Kanał komunikacyjny, który powinien pobierać dane.
Jeśli zdarzenie zostało przetworzone, należy ustawić Event na handled. Opis struktury ANVEDI Event Args znajduje się na końcu tego rozdziału.
OnAfterList
procedure OnAfterList(EDICommunicationChannel: Record "ANVEDI Communication Channel";EventArgs: Codeunit "ANVEDI Event Args")
Kanał komunikacyjny, który powinien pobierać dane.
Jeśli Event zostało przetworzone, należy ustawić je jako obsłużone. Opis struktury ANVEDI Event Args znajduje się na końcu tego rozdziału.
Kod ten jest wywoływany po wyszukaniu nowych danych przez moduł.
OnBeforeReceive
procedure OnBeforeReceive(ANVEDITransmission: Record "ANVEDI Transmission";EventArgs: Codeunit "ANVEDI Event Args")
To Event jest wywoływane przed pobraniem transmisji. Należy pamiętać, że w tym momencie nie można przerwać przetwarzania. Jeśli chcesz zdecydować, czy pobrać wiadomość, czy nie, użyj OnAcceptTransmission.
Transmisja. Wiadomości nie zostały jeszcze odebrane.
Jeśli Event zostało przetworzone, należy ustawić je jako obsłużone. Opis struktury ANVEDI Event Args znajduje się na końcu tego rozdziału.
OnAfterReceive
procedure OnAfterReceive(ANVEDITransmission: Record "ANVEDI Transmission";EventArgs: Codeunit "ANVEDI Event Args")
To Event jest wywoływane po odebraniu transmisji.
Transmisja po odzyskaniu (można uzyskać dostęp do wiadomości).
Jeśli Event zostało przetworzone, należy ustawić je jako obsłużone. Opis struktury ANVEDI Event Args znajduje się na końcu tego rozdziału.
OnBeforeArchive
procedure OnBeforeArchive(ANVEDITransmission: Record "ANVEDI Transmission";EventArgs: Codeunit "ANVEDI Event Args")
To Event jest wywoływane przed zarchiwizowaniem transmisji.
Transmisja, która zostanie zarchiwizowana w zdalnej lokalizacji.
Jeśli Event zostało przetworzone, należy ustawić je jako obsłużone. Opis struktury ANVEDI Event Args znajduje się na końcu tego rozdziału.
OnAfterArchive
procedure OnAfterArchive(ANVEDITransmission: Record "ANVEDI Transmission";EventArgs: Codeunit "ANVEDI Event Args")
To Event jest wywoływane po zarchiwizowaniu transmisji.
Transmisja, która została zarchiwizowana w zdalnej lokalizacji.
Jeśli Event zostało przetworzone, należy ustawić je jako obsłużone. Opis struktury ANVEDI Event Args znajduje się na końcu tego rozdziału.
OnBeforeDelete
procedure OnBeforeDelete(ANVEDITransmission: Record "ANVEDI Transmission";EventArgs: Codeunit "ANVEDI Event Args")
To Event jest wywoływane przed usunięciem transmisji.
Transmisja, która zostanie usunięta w zdalnej lokalizacji.
Jeśli Event zostało przetworzone, należy ustawić je jako obsłużone. Opis struktury ANVEDI Event Args znajduje się na końcu tego rozdziału.
OnAfterDelete
procedure OnAfterDelete(ANVEDITransmission: Record "ANVEDI Transmission";EventArgs: Codeunit "ANVEDI Event Args")
To Event jest wywoływane po usunięciu transmisji.
Transmisja, która została usunięta z lokalizacji zdalnej.
Jeśli Event zostało przetworzone, należy ustawić je jako obsłużone. Opis struktury ANVEDI Event Args znajduje się na końcu tego rozdziału.
OnBeforeSend
procedure OnBeforeSend(ANVEDITransmission: Record "ANVEDI Transmission";EventArgs: Codeunit "ANVEDI Event Args")
To Event jest wywoływane przed wysłaniem transmisji.
Transmisja, która zostanie wysłana.
Jeśli Event zostało przetworzone, należy ustawić je jako obsłużone. Opis struktury ANVEDI Event Args znajduje się na końcu tego rozdziału.
OnComposeMessage
procedure OnComposeMessage(ANVEDITransmission: Record "ANVEDI Transmission";EventArgs: Codeunit "ANVEDI Event Args")
To Event jest wywoływane po utworzeniu transmisji.
Transmisja, która jest skomponowana.
Jeśli Event zostało przetworzone, należy ustawić je jako obsłużone. Opis struktury ANVEDI Event Args znajduje się na końcu tego rozdziału.
OnAfterSend
procedure OnAfterSend(ANVEDITransmission: Record "ANVEDI Transmission";EventArgs: Codeunit "ANVEDI Event Args")
To Event jest wywoływane po wysłaniu transmisji.
Transmisja, która została wysłana.
Jeśli zdarzenie zostało przetworzone, należy ustawić Event na handled. Opis struktury ANVEDI Event Args znajduje się na końcu tego rozdziału.
OnReplacePlaceholder
procedure OnReplacePlaceholder(Placeholder: Text[50];var ANVEDILinkedDocument: Record "ANVEDI Linked Document";EventArgs: Codeunit "ANVEDI Event Args")
Ta funkcja jest wywoływana, gdy oceniany jest ciąg znaków, który może zawierać zmienne zdefiniowane przez użytkownika, takie jak nazwa pliku.
Nazwa symbolu zastępczego. Moduł szuka obecnie wartości, która zastąpi ten konkretny symbol zastępczy. Jeśli chcesz podać wartość, musisz określić wynik i ustawić zdarzenie jako obsługiwane w EventArgs.
Wstępnie przefiltrowany zapis połączonych dokumentów. Można na przykład użyć tej tabeli, aby uzyskać dokumenty buforowe zawarte w pliku.
Jeśli Event zostało przetworzone, należy ustawić je jako obsłużone. Musisz także zapewnić wartość. Opis struktury ANVEDI Event Args znajduje się na końcu tego rozdziału.
Poniższy przykład pokazuje, jak można zwrócić dane z połączonego dokumentu:
[EventSubscriber(ObjectType::Codeunit, Codeunit::="" Events="" TRUE,="" TRUE)]=""]
local procedure OnReplacePlaceholderExternalDocumentNo(Placeholder: Text[50];var ANVEDILinkedDocument: Record "ANVEDI Linked Document";EventArgs: Codeunit "ANVEDI Event Args")
var
recID: RecordID;
ediDocument: Record "ANVEDI Document";
begin
if Placeholder = 'ExternalDocumentNo' then begin
if ANVEDILinkedDocument.FindSet() then
repeat
recID := ANVEDILinkedDocument.RecordId;
if recID.TableNo = Database::"ANVEDI Document" then begin
ediDocument.get(recID);
EventArgs.SetResult(ediDocument."External Document No.");
EventArgs.SetHandled(true);
exit;
end;
until ANVEDILinkedDocument.Next() = 0;
end;
end;
OnError
procedure OnError(ANVEDIProcessingQueue: Record "ANVEDI Processing Queue";EventArgs: Codeunit "ANVEDI Event Args")
To Event jest wywoływane, gdy w kolejce przetwarzania wystąpi błąd.
Jeśli Event zostało przetworzone, należy ustawić je jako obsłużone. Opis struktury ANVEDI Event Args znajduje się na końcu tego rozdziału.
OnAfterProcess
procedure OnAfterProcess(ANVEDIProcessingQueue: Record "ANVEDI Processing Queue";EventArgs: Codeunit "ANVEDI Event Args")
To Event jest wywoływane po przetworzeniu wpisu w tabeli EDI Processing Queue. Należy sprawdzić status przekazanego wpisu i odpowiednio zareagować.
Jeśli Event zostało przetworzone, należy ustawić je jako obsłużone. Opis struktury ANVEDI Event Args znajduje się na końcu tego rozdziału.
ANVEDI Event Args
Niektóre Events wykorzystują strukturę o nazwie ANVEDI Event Args. Struktura ta umożliwia zwracanie wartości i informowanie modułu, czy zdarzenie zostało obsłużone.
Następujące funkcje są dostępne dla ANVEDI Event Args przekazywanych do Event:
SetHandled(Value: Boolean)
Czy Event zostało obsłużone przez kod użytkownika.
SetResult(Value: Variant)
Wartość zwrotna, jeśli Event oczekuje wartości zwrotnej.
Przykład
Poniższy przykład pokazuje, jak można dodać własną funkcję niestandardową „MYOBJECT.MYFUNC”, która wyświetla komunikat zawierający podaną nazwę, po której następuje „: ” i wartość. Możesz dodać tyle funkcji z tylu rozszerzeń, ile potrzebujesz.
codeunit 50100 MyAnveoFunctions
{
var
ObjectNameTok: label 'MYOBJECT';
FunctionNameTok: label 'MYFUNC';
[EventSubscriber(ObjectType::Codeunit, Codeunit::="" Events="" TRUE,="" TRUE)]=""]
local procedure OnRegisterFunctions(Register: Codeunit "ANVEDI Function Register")
begin
Register.RegisterFunction(ObjectNameTok, FunctionNameTok);
Register.AddParameter('Name');
Register.AddParameter('Value');
end;
[EventSubscriber(ObjectType::Codeunit, Codeunit::="" Events="" TRUE,="" TRUE)]=""]
local procedure OnFunction(FunctionCall: Codeunit "ANVEDI Function Call")
var
Name: Text;
Val: Integer;
begin
if FunctionCall.Is(ObjectNameTok, FunctionNameTok) then begin
Name := FunctionCall.GetTextParameter(1);
Val := FunctionCall.GetIntegerParameter(2);
Message(Name + ': ' + Format(Val));
FunctionCall.SetResult(TRUE);
end;
end;
}
Zależności
Jeśli chcesz reagować na Event poprzez AL, musisz dodać zależność do modułu Anveo EDI Connect.
Wartości dla Extension OnPremise są następujące:
{
"id": "25286BD2-B08A-49F9-B613-64122CCEE4E1",
"name": "Anveo EDI Connect - OnPremise",
"publisher": "conion media GmbH",
"version": "5.x.y.z"
}
Upewnij się, że zastąpiłeś x, y, z poprawnym numerem wersji.
Wartości dla Business Central Online i Universal Code Extension są następujące:
{
"id": "FC195C4F-19BF-4167-BFE8-6D1FF7D266BC",
"name": "Anveo EDI Connect",
"publisher": "conion media GmbH",
"version": "5.x.y.z"
}
Upewnij się, że zastąpiłeś x, y, z poprawnym numerem wersji. Starsze wersje BC nazywały „id” „appId”.