Integrationsereignisse von Ventoo Shipping

Ventoo Shipping veröffentlicht Integrationsereignisse, mit denen Erweiterungen in den Etiketten-Lebenszyklus eingreifen können. Alle Ereignisse werden von der Codeunit Shipping Events VTO (ID 70679804) ausgelöst und sind im AL-Code als [IntegrationEvent(false, false)] deklariert.

Lebenszyklus eines Etiketts

Beim Aufruf von Shipment Label Mgt. VTO.ProcessLabel durchläuft ein Etikett die folgenden Schritte:

  1. OnBeforeProcessLabel wird ausgelöst.

  2. Spediteureinrichtung wird geladen und auf Aktiviert geprüft.

  3. Der Konnektor validiert das Etikett (ValidateRequest).

  4. OnBeforeBuildRequestPayload wird ausgelöst.

  5. Der Konnektor baut das Request-Payload.

  6. Der Status wird auf Gesendet gesetzt und der Datensatz committed.

  7. Die Spediteur-API wird aufgerufen.

  8. OnAfterParseResponse wird ausgelöst.

  9. Der Konnektor parst die Antwort und befüllt PDF, Tracking-Link und Transporteinheitsnummer.

  10. Bei Erfolg und aktivierter Option Auto-Druck nach Erstellung wird das Etikett gedruckt.

  11. OnAfterProcessLabel wird ausgelöst.

Veröffentlichte Ereignisse

OnBeforeProcessLabel

[IntegrationEvent(false, false)]
procedure OnBeforeProcessLabel(
    var ShipmentLabelHeader: Record "Shipment Label Header VTO";
    var IsHandled: Boolean)

Wird vor dem eigentlichen Verarbeitungsstart ausgelöst. Wenn ein Abonnent IsHandled := true setzt, übernimmt er die vollständige Verarbeitung; die Standardlogik wird übersprungen. Nützlich, um eigene Konnektoren oder Mock-Implementierungen einzuhängen.

OnBeforeBuildRequestPayload

[IntegrationEvent(false, false)]
procedure OnBeforeBuildRequestPayload(
    var ShipmentLabelHeader: Record "Shipment Label Header VTO";
    CarrierCode: Code[20])

Wird unmittelbar vor dem Aufruf von BuildRequestPayload ausgelöst. Erlaubt es, kurz vor dem Senden des Requests Felder am Etikettenkopf anzupassen (z. B. Custom-Felder zu setzen, die der Konnektor liest).

OnAfterParseResponse

[IntegrationEvent(false, false)]
procedure OnAfterParseResponse(
    var ShipmentLabelHeader: Record "Shipment Label Header VTO";
    ResponseBody: Text)

Wird ausgelöst, sobald die HTTP-Antwort vorliegt, jedoch vor dem Aufruf von ParseResponse durch den Konnektor. Damit lassen sich z. B. zusätzliche Felder aus der Antwort extrahieren oder Logs schreiben.

OnAfterProcessLabel

[IntegrationEvent(false, false)]
procedure OnAfterProcessLabel(
    var ShipmentLabelHeader: Record "Shipment Label Header VTO")

Wird am Ende der Verarbeitung ausgelöst – nach Status-Update, PDF-Speicherung und optionalem Auto-Druck. Geeignet, um Folgeaktionen anzustossen (z. B. Notifikationen, Statussynchronisation mit Drittsystemen).

OnPopulateDeliveryAddress

[IntegrationEvent(false, false)]
procedure OnPopulateDeliveryAddress(
    SourceDocType: Enum "Source Document Type VTO";
    SourceDocNo: Code[20];
    var ShipmentLabelHeader: Record "Shipment Label Header VTO")

Wird beim Vorbelegen der Lieferadresse aus einem Verkaufsauftrag oder einer gebuchten Verkaufslieferung ausgelöst. Anwendungsfall: zusätzliche Felder wie Liefertelefon, Liefer-E-Mail oder Anweisungen aus eigenen Datenstrukturen befüllen, die nicht in den Standard-Ship-to-Feldern enthalten sind.

Erweiterbarkeitspunkte

Neben den Integrationsereignissen bietet Ventoo Shipping weitere Erweiterungspunkte:

  • Spediteur-Typ-Enum (Carrier Type VTO): Der Enum ist Extensible = true. Neue Spediteure können einen eigenen Wert hinzufügen und ein eigenes Codeunit implementieren, das das Interface Carrier Connector VTO erfüllt.

  • Carrier Connector VTO-Interface: Definiert die Methoden GetCarrierName, ValidateRequest, BuildRequestPayload, SendRequest, ParseResponse, InitCarrierMasterData und GetPrintReportId.

  • Druckberichte: Spediteurspezifische Berichte können im Bereich 7067980170679819 registriert werden. Der Event-Subscriber Ship Label Print Events VTO (OnAfterDocumentReady) ersetzt deren Ausgabe durch das Spediteur-PDF.

  • Source Document Type VTO-Enum: Ebenfalls Extensible = true. Eigene Quelldokumenttypen (z. B. Serviceauftrag) lassen sich ergänzen, indem ein neuer Enum-Wert und die zugehörige Aufrufroutine (analog zu CreateLabelsFromSalesOrder) implementiert werden.