This is an automatic translation. The original post is available in Englisch.

ANVEDI Events

Anveo EDI Connect bietet eine einzige Codeunit für Integrationsereignisse: Codeunit ANVEDI Events. Auf die Ereignisse in dieser Codeunit können Sie über Ihre eigene Codeunit reagieren. Die Ereignisse werden sowohl in der FOB- als auch in der Extension-Version von Microsoft Dynamics unterstützt.

Events

Die verfügbaren Events sind:

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

Dieses Ereignis wird aufgerufen, wenn das Modul nach benutzerdefinierten Funktionen sucht. Sie können eigene Funktionen definieren, indem Sie die Funktionalität der Codeunit ANVEDI Function Register nutzen, die unter dem Namen Register zur Verfügung gestellt wird. Die Codeunit stellt zwei Funktionen zur Verfügung: RegisterFunction und AddParameter.

RegisterFunction erwartet zwei Parameter, den Objektnamen und den Funktionsnamen Ihrer neuen Funktion. Diese Namen können frei gewählt werden, dürfen aber 30 Zeichen nicht überschreiten.

Die ersten 29 Zeichen der Kombination aus Objekt- und Funktionsname müssen eindeutig sein, um die Parameter aus dem Mapping angeben zu können. Sie sollten versuchen, die Namen kurz zu halten.

Nachdem Sie eine Funktion registriert haben, können Sie AddParameter bis zu 5 Mal aufrufen. AddParameter erwartet einen Namen für den Parameter Ihrer Funktion. Sie können mehrere Blöcke von RegisterFunction und AddParameter in einem Event verwenden. Wir empfehlen jedoch, mehrere Funktionen auf mehrere Event-Listener aufzuteilen.

Register.RegisterFunction('CustomObj', 'MyFunction');
Register.AddParameter('Name');
Register.AddParameter('Value');
Beispiel: Verwendung des Funktionsregisters

Nachdem Sie die Funktion registriert haben, müssen Sie auf Funktionsaufrufe reagieren. Dies geschieht mit dem nachfolgend beschriebenen Event.

OnFunctionExecution

procedure OnFunctionExecution(FunctionCall: Codeunit "ANVEDI Function Call")

Das Event wird aufgerufen, wenn das Modul nach einer benutzerdefinierten Funktionsimplementierung sucht. Diesem Ereignis wird eine Instanz der Codeunit ANVEDI Function Call unter dem Namen FunctionCall übergeben.

Sie sollten prüfen, ob der FunctionCall mit Ihrer benutzerdefinierten Funktion übereinstimmt und nur dann einen Code ausführen, wenn dies der Fall ist. Dies geschieht durch den Aufruf der Funktion Is() mit den gleichen Parametern, die Sie in der Eventbei RegisterFunction aufgerufen haben. Wenn Is() true zurückgibt, können Sie auf die Parameter zugreifen, Ihren eigenen Code ausführen und einen Wert zurückgeben.

if FunctionCall.Is(ObjectNameTok, FunctionNameTok) then begin
            Name := FunctionCall.GetTextParameter(1);
            Val := FunctionCall.GetIntegerParameter(2);
            Message(Name + ': ' + Format(Val));
            FunctionCall.SetResult(TRUE);
 end;
Beispiel: Reagieren auf Funktionsaufruf

Die Codeunit ANVEDI Function Call stellt die folgenden Funktionen zur Verfügung:

procedure Is(ObjectName: Text[30];FunctionName: Text[30]): Boolean

Gibt zurück, ob der Funktionsaufruf mit der angegebenen Funktionssignatur übereinstimmt.

procedure SetResult(Value: Variant)

Sie müssen diese Funktion aufrufen, um dem Modul zu zeigen, dass Sie den Funktionsaufruf bearbeitet haben. Sie können ein Funktionsergebnis übergeben, oder einfach true als Ergebnis verwenden.

procedure GetTextParameter(ParNum: Integer): Text[1024]

Ruft einen Parameter mit der angegebenen Nummer als Text ab. Der Index beginnt mit 1.

procedure GetIntegerParameter(ParNum: Integer): Integer

Ruft einen Parameter mit der angegebenen Zahl als Ganzzahl ab. Der Index beginnt mit 1.

procedure GetBooleanParameter(ParNum: Integer): Boolean

Ruft einen Parameter mit der angegebenen Nummer als Boolean ab. Der Index beginnt mit 1.

procedure GetDecimalParameter(ParNum: Integer): Decimal

Ruft einen Parameter mit der angegebenen Zahl als Dezimalwert ab. Der Index beginnt mit 1.

procedure GetDateParameter(ParNum: Integer): Date

Ruft einen Parameter mit der angegebenen Nummer als Datum ab. Der Index beginnt mit 1.

procedure GetTimeParameter(ParNum: Integer): Time

Ruft einen Parameter mit der angegebenen Nummer als Datum und Uhrzeit ab. Der Index beginnt mit 1.

procedure GetDateTimeParameter(ParNum: Integer): DateTime

Ruft einen Parameter mit der angegebenen Zahl als Zeit ab. Der Index beginnt mit 1.

procedure GetParameter(ParNum: Integer;var EDIVariant: Codeunit "ANVEDI Variant"): Boolean

Ruft einen Parameter mit der angegebenen Nummer als EDIVariante ab. Die Funktion gibt zurück, ob der Parameter abgerufen werden konnte. Der Index beginnt mit 1.

OnJob

procedure OnJob(ParameterDictionary: Codeunit "ANVEDI Data Structures";EventArgs: Codeunit "ANVEDI Event Args")

Sie können die Codeunit des Moduls verwenden, um benutzerdefinierte Jobs zu definieren. Die Codeunit unterstützt die Verwendung von mehreren Parametern. Weitere Informationen finden Sie in der Dokumentation des Jobhandlers.

ParamaterDictionary

Ein Wörterbuch, das die an den Auftrag übergebenen Parameter enthält.

EventArgs

Sie sollten das Event auf behandelt setzen, wenn Sie einen Auftrag verarbeitet haben. Die Beschreibung der Struktur ANVEDI Event Args finden Sie am Ende dieses Kapitels.

OnAcceptTransmission

procedure OnAcceptTransmission(ANVEDITransmission: Record "ANVEDI Transmission";EventArgs: Codeunit "ANVEDI Event Args")

Diese Funktion wird aufgerufen, um festzustellen, ob eine Datei oder Nachricht vom Modul akzeptiert oder ignoriert werden soll. Das Modul speichert nicht, ob eine Übertragung ignoriert wurde und wird diese Funktion jedes Mal aufrufen, wenn es eine Übertragung sieht. Die Datei wird noch nicht gelesen, daher können Sie nur anhand der verfügbaren Metadaten entscheiden.

ANVEDITransmission

Die Übertragung, für die die Metadaten abgerufen wurden. Bitte beachten Sie, dass zu diesem Zeitpunkt noch keine Daten empfangen wurden und der Datensatz noch nicht in die Datenbank eingefügt ist.

EventArgs

Sie sollten das Event auf behandelt setzen, wenn Sie das Event verarbeitet haben. Sie sollten auch einen Wert zurückgeben, ob die Übertragung verarbeitet werden soll (setzen Sie den Rückgabewert auf true); oder nicht (setzen Sie ihn auf false). Die Beschreibung der Struktur ANVEDI Event Args finden Sie am Ende dieses Kapitels.

OnBeforeList

procedure OnBeforeList(EDICommunicationChannel: Record "ANVEDI Communication Channel";EventArgs: Codeunit "ANVEDI Event Args")

Dieser Code wird aufgerufen, bevor das Modul nach neuen Daten sucht. Dies kann verwendet werden, um einen externen Befehl oder ein Skript zum Empfangen der Dateien auszugeben, bevor das Modul nach neuen Daten sucht.

EDICommunicationChannel

Der Kommunikationskanal, der Daten abrufen soll.

EventArgs

Sie sollten das Event auf behandelt setzen, wenn Sie das Ereignis verarbeitet haben. Die Beschreibung der Struktur ANVEDI Event Args finden Sie am Ende dieses Kapitels.

OnAfterList

procedure OnAfterList(EDICommunicationChannel: Record "ANVEDI Communication Channel";EventArgs: Codeunit "ANVEDI Event Args")
EDICommunicationChannel

Der Kommunikationskanal, der Daten abrufen soll.

EventArgs

Sie sollten das Event auf behandelt setzen, wenn Sie das Event verarbeitet haben. Die Beschreibung der Struktur ANVEDI Event Args finden Sie am Ende dieses Kapitels.

Dieser Code wird aufgerufen, nachdem das Modul nach neuen Daten gesucht hat.

OnBeforeReceive

procedure OnBeforeReceive(ANVEDITransmission: Record "ANVEDI Transmission";EventArgs: Codeunit "ANVEDI Event Args")

Dieses Event wird aufgerufen, bevor eine Übertragung abgerufen wird. Bitte beachten Sie, dass Sie die Bearbeitung zu diesem Zeitpunkt nicht mehr abbrechen können. Wenn Sie entscheiden möchten, ob eine Nachricht abgerufen werden soll oder nicht, verwenden Sie bitte den Event.

ANVEDITransmission

Die Übertragung. Die Nachrichten werden noch nicht empfangen.

EventArgs

Sie sollten das Event auf behandelt setzen, wenn Sie das Event verarbeitet haben. Die Beschreibung der Struktur ANVEDI Event Args finden Sie am Ende dieses Kapitels.

OnAfterReceive

procedure OnAfterReceive(ANVEDITransmission: Record "ANVEDI Transmission";EventArgs: Codeunit "ANVEDI Event Args")

Dieses Event wird aufgerufen, nachdem eine Übertragung empfangen wurde.

ANVEDITransmission

Die Übertragung, nachdem sie abgerufen wurde (Sie können auf die Nachrichten zugreifen).

EventArgs

Sie sollten das Event auf behandelt setzen, wenn Sie das Event verarbeitet haben. Die Beschreibung der Struktur ANVEDI Event Args finden Sie am Ende dieses Kapitels.

OnBeforeArchive

procedure OnBeforeArchive(ANVEDITransmission: Record "ANVEDI Transmission";EventArgs: Codeunit "ANVEDI Event Args")

Dieses Event wird aufgerufen, bevor eine Übertragung archiviert wird.

ANVEDITransmission

Die Übertragung, die am entfernten Standort archiviert werden soll.

EventArgs

Sie sollten das Event auf behandelt setzen, wenn Sie das Event verarbeitet haben. Die Beschreibung der Struktur ANVEDI Event Args finden Sie am Ende dieses Kapitels.

OnAfterArchive

procedure OnAfterArchive(ANVEDITransmission: Record "ANVEDI Transmission";EventArgs: Codeunit "ANVEDI Event Args")

Dieses Event wird aufgerufen, nachdem eine Übertragung archiviert wurde.

ANVEDITransmission

Die Übertragung, die am entfernten Standort archiviert wurde.

EventArgs

Sie sollten das Event auf behandelt setzen, wenn Sie das Event verarbeitet haben. Die Beschreibung der Struktur ANVEDI Event Args finden Sie am Ende dieses Kapitels.

OnBeforeDelete

procedure OnBeforeDelete(ANVEDITransmission: Record "ANVEDI Transmission";EventArgs: Codeunit "ANVEDI Event Args")

Dieses Event wird aufgerufen, bevor eine Übertragung gelöscht wird.

ANVEDITransmission

Die Übertragung, die am entfernten Standort gelöscht werden soll.

EventArgs

Sie sollten das Event auf behandelt setzen, wenn Sie das Event verarbeitet haben. Die Beschreibung der Struktur ANVEDI Event Args finden Sie am Ende dieses Kapitels.

OnAfterDelete

procedure OnAfterDelete(ANVEDITransmission: Record "ANVEDI Transmission";EventArgs: Codeunit "ANVEDI Event Args")

Dieses Event wird aufgerufen, nachdem eine Übertragung gelöscht wurde.

ANVEDITransmission

Die Übertragung, die vom entfernten Standort gelöscht wurde.

EventArgs

Sie sollten das Event auf behandelt setzen, wenn Sie das Event verarbeitet haben. Die Beschreibung der Struktur ANVEDI Event Args finden Sie am Ende dieses Kapitels.

OnBeforeSend

procedure OnBeforeSend(ANVEDITransmission: Record "ANVEDI Transmission";EventArgs: Codeunit "ANVEDI Event Args")

Dieses Event wird aufgerufen, bevor eine Übertragung gesendet wird.

ANVEDITransmission

Die Übertragung, die gesendet werden soll.

EventArgs

Sie sollten das Event auf behandelt setzen, wenn Sie das Event verarbeitet haben. Die Beschreibung der Struktur ANVEDI Event Args finden Sie am Ende dieses Kapitels.

OnComposeMessage

procedure OnComposeMessage(ANVEDITransmission: Record "ANVEDI Transmission";EventArgs: Codeunit "ANVEDI Event Args")

Dieses Event wird aufgerufen, wenn eine Übertragung zusammengestellt wird.

ANVEDITransmission

Die Übertragung, die zusammengesetzt ist.

EventArgs

Sie sollten das Event auf behandelt setzen, wenn Sie das Event verarbeitet haben. Die Beschreibung der Struktur ANVEDI Event Args finden Sie am Ende dieses Kapitels.

OnAfterSend

procedure OnAfterSend(ANVEDITransmission: Record "ANVEDI Transmission";EventArgs: Codeunit "ANVEDI Event Args")

Dieses Event wird aufgerufen, nachdem eine Übertragung gesendet wurde.

ANVEDITransmission

Die Übertragung, die gesendet wurde.

EventArgs

Sie sollten das Event auf behandelt setzen, wenn Sie das Ereignis verarbeitet haben. Die Beschreibung der Struktur ANVEDI Event Args finden Sie am Ende dieses Kapitels.

OnReplacePlaceholder

procedure OnReplacePlaceholder(Placeholder: Text[50];var ANVEDILinkedDocument: Record "ANVEDI Linked Document";EventArgs: Codeunit "ANVEDI Event Args")

Diese Funktion wird aufgerufen, wenn eine Zeichenkette ausgewertet wird, die benutzerdefinierte Variablen enthalten kann, wie z. B. einen Dateinamen.

Placeholder

Der Name des Platzhalters. Das Modul sucht gerade nach einem Wert, um diesen speziellen Platzhalter zu ersetzen. Wenn Sie einen Wert bereitstellen möchten, müssen Sie das Ergebnis angeben und das Ereignis in den EventArgs auf behandelt setzen.

ANVEDILinkedDocument

Ein vorgefilterter Datensatz der verknüpften Dokumente. Sie können diese Tabelle z. B. verwenden, um die in der Datei enthaltenen Pufferdokumente zu erhalten.

EventArgs

Sie sollten das Event auf behandelt setzen, wenn Sie das Event verarbeitet haben. Sie müssen auch einen Wert bieten. Die Beschreibung der Struktur ANVEDI Event Args finden Sie am Ende dieses Kapitels.

Das folgende Beispiel zeigt, wie Sie Daten aus dem verknüpften Dokument zurückgeben könnten:

[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;
Beispiel: OnReplacePlaceholder

OnError

procedure OnError(ANVEDIProcessingQueue: Record "ANVEDI Processing Queue";EventArgs: Codeunit "ANVEDI Event Args")

Dieses Event wird aufgerufen, wenn ein Fehler in der Verarbeitungswarteschlange auftritt.

EventArgs

Sie sollten das Event auf behandelt setzen, wenn Sie das Event verarbeitet haben. Die Beschreibung der Struktur ANVEDI Event Args finden Sie am Ende dieses Kapitels.

OnAfterProcess

procedure OnAfterProcess(ANVEDIProcessingQueue: Record "ANVEDI Processing Queue";EventArgs: Codeunit "ANVEDI Event Args")

Dieses Event wird nach der Verarbeitung eines Eintrags in der Tabelle EDI Verarbeitungswarteschlange aufgerufen. Sie sollten den Status des übergebenen Eintrags prüfen und entsprechend reagieren.

EventArgs

Sie sollten das Event auf behandelt setzen, wenn Sie das Event verarbeitet haben. Die Beschreibung der Struktur ANVEDI Event Args finden Sie am Ende dieses Kapitels.

ANVEDI Event Args

Einige der Events verwenden eine Struktur namens ANVEDI Event Args. Mit dieser Struktur können Sie Werte zurückgeben und dem Modul mitteilen, ob Sie das Ereignis behandelt haben.

Die folgenden Funktionen sind für das ANVEDI Event Args verfügbar, die an das Event übergeben werden:

SetHandled(Value: Boolean)
Value

Ob das Event von Ihrem Code behandelt wurde.

SetResult(Value: Variant)
Value

Der Rückgabewert, wenn das Event einen Rückgabewert erwartet.

Beispiel

Das folgende Beispiel zeigt, wie Sie Ihre eigene benutzerdefinierte Funktion „MYOBJECT.MYFUNC“ hinzufügen können, die eine Meldung mit dem angegebenen Namen, gefolgt von ‚: ‚ und dem Wert anzeigt. Sie können so viele Funktionen aus so vielen Erweiterungen hinzufügen, wie Sie benötigen.

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;
}
Vollständiges Beispiel: Benutzerdefinierte Funktion

Abhängigkeiten

Wenn Sie über AL auf das Event reagieren möchten, müssen Sie eine Abhängigkeit zum Anveo EDI Connect-Modul hinzufügen.

Die Werte für die OnPremise-Erweiterung sind:

{
      "appId": "25286BD2-B08A-49F9-B613-64122CCEE4E1",
      "name": "Anveo EDI Connect - OnPremise",
      "publisher": "conion media GmbH",
      "version": "5.x.y.z"
}

Bitte achten Sie darauf, dass Sie x, y, z durch die richtige Versionsnummer ersetzen.

Die Werte für die Business Central Online Extension sind:

{
      "appId": "FC195C4F-19BF-4167-BFE8-6D1FF7D266BC",
      "name": "Anveo EDI Connect",
      "publisher": "conion media GmbH",
      "version": "5.x.y.z"
}

Bitte achten Sie darauf, dass Sie x, y, z durch die richtige Versionsnummer ersetzen.