Zum Inhalt

Entwicklerschnittstelle

Diese Seite richtet sich an AL-Entwickler und Integratoren, die DPD-Austria-Labels ohne den Dialog „Label erstellen" erzeugen: aus eigenem AL-Code über den Hub oder aus einem Fremdsystem über die merchantCENTRAL Integration API. Für die normale Nutzung der App ist sie nicht erforderlich.

Beide Wege laufen über denselben Pfad wie der Dialog: Lizenzprüfung, Produktauflösung, Tracking-Eintrag und die Hub-Events greifen in jedem Fall.

Objekt Zweck
ALN MC Shipment Mgmt. (Hub, Codeunit 73334603) Carrier-neutraler Einstieg des Hubs, den auch die REST-API verwendet
ALN MCDPDAT MC Integration (Codeunit 73335436) Connector-Logik; nimmt die Service-Auswahl entgegen und veröffentlicht die DPD-Austria-Events
ALN MCDPDAT Additional Service (Enum 73335432) Die Service-Codes der Zusatzleistungen
ALN MCDPDAT Label Service (Tabelle 73335427) Zusatzleistungen je Etikett

Label per Code

Ein Label ohne besondere Leistungen entsteht mit einer Hub-Prozedur, genau wie über die Aktion Label erstellen (1-Klick) am Verkaufsauftrag. Zusatzleistungen nimmt CreateLabelWithDetails als Hub-Service-Auswahl (ALN MC Label Svc. Selection) entgegen; der Service Code ist der Name des Enum-Werts aus ALN MCDPDAT Additional Service, exakt in dieser Schreibweise:

var
    ShipmentMgmt: Codeunit "ALN MC Shipment Mgmt.";
    TempShipToOverrides: Record "ALN MC Shipment Label" temporary;
    TempLabelSvcSelection: Record "ALN MC Label Svc. Selection" temporary;
    EntryNo: Integer;
begin
    AddService(TempLabelSvcSelection, 'Predict', '', '');
    AddService(TempLabelSvcSelection, 'HigherInsurance', Format(2500, 0, 9), '');

    EntryNo := ShipmentMgmt.CreateLabelWithDetails(
        'DPDAT', 'VA-2026-01187', 1850, 'NP', TempShipToOverrides, TempLabelSvcSelection);
end;

local procedure AddService(var TempLabelSvcSelection: Record "ALN MC Label Svc. Selection" temporary; ServiceCode: Text[50]; Parameter1: Text[50]; Parameter2: Text[50])
begin
    TempLabelSvcSelection.Init();
    TempLabelSvcSelection."Entry No." := TempLabelSvcSelection.Count() + 1;
    TempLabelSvcSelection."Provider Code" := 'DPDAT';
    TempLabelSvcSelection."Service Code" := ServiceCode;
    TempLabelSvcSelection."Parameter 1 Value" := Parameter1;
    TempLabelSvcSelection."Parameter 2 Value" := Parameter2;
    TempLabelSvcSelection.Selected := true;
    TempLabelSvcSelection.Insert();
end;

CreateLabelFromShipmentWithDetails arbeitet gleich, erwartet aber die Nummer einer gebuchten Verkaufslieferung.

Rückgabe und Fehler

  • Rückgabe ist die Entry No. des Datensatzes ALN MC Shipment Label.
  • Ein Fehler beim Dienstleister oder bei der Lizenz löst Error() aus, es entsteht kein Label.
  • Ein fehlgeschlagener DPD-Aufruf löst keinen Fehler aus. Das Label hat dann Status = Error und die DPD-Meldung steht in Error Message.
  • Ein Service Code, den das Enum nicht kennt, beendet den Aufruf mit einem Fehler.

Service-Codes

Der Connector abonniert das Hub-Event OnApplyLabelServiceSelections und legt für jeden ausgewählten Eintrag einen Datensatz ALN MCDPDAT Label Service an. An die DPD-Schnittstelle übertragen werden davon nur zwei Leistungen:

code Leistung Parameter 1 Parameter 2 Hinweis
Predict Predict per E-Mail Adresse aus der Lieferadresse; ohne E-Mail-Adresse am Beleg bleibt die Leistung wirkungslos
HigherInsurance Höhere Versicherung Betrag Leer = Standardbetrag der DPD-Austria-Einrichtung

Weitere Enum-Werte nicht senden

Die übrigen Werte des Enums (StoragePermission, IdentCheck, DepartmentDelivery, Aviso, CashOnDelivery, ValuableParcel, ExchangeService, ConstructionSite, Unfree, LimitedQuantity) speichert der Connector zwar am Etikett, übergibt sie aber nicht an die DPD-Schnittstelle, weder aus dem Dialog noch aus der API. Das Etikett entsteht dann ohne die Leistung, ohne Fehlermeldung.

Standardleistung und Betragsformat

Enthält die Service-Auswahl mindestens einen DPD-Austria-Eintrag, wird das Standard-Predict der Einrichtung nicht angewendet; nur eine leere Auswahl bekommt es. Der Betrag von HigherInsurance wird mit Evaluate im Zahlenformat der Sitzung gelesen. In AL liefert Format(Betrag, 0, 9) das passende Format. Über die REST-API läuft die Sitzung unter der Sprache der Microsoft-Entra-Anwendung: Legen Sie diese mit Sprache Englisch an und senden Sie 2500.00. In einer deutschen Sitzung würde 2500.00 als 250000 gelesen.


Über die Integration API

Die REST-API des Hubs übergibt die Leistungen im Feld servicesJson einer Etikettanfrage. Es gelten dieselben Codes und Regeln wie oben:

{
  "salesOrderNo": "VA-2026-01187",
  "providerCode": "DPDAT",
  "productCode": "NP",
  "weightGrams": 1850,
  "servicesJson": "[{\"code\":\"Predict\"},{\"code\":\"HigherInsurance\",\"parameter1\":\"2500.00\"}]"
}

Endpunkte, Felder und Authentifizierung stehen in der API-Referenz.


Events

Hub (ALN MC Shipment Evt Publisher, Codeunit 73334602)

Event Zeitpunkt
OnAfterCreateShipmentLabel Label erfolgreich erzeugt, Tracking-Eintrag angelegt
OnCreateShipmentLabelError DPD-Aufruf fehlgeschlagen, Label mit Status Error gespeichert
OnAfterCancelShipment Sendung storniert
OnAfterDeliveryStatusChanged Zustellstatus aus der Sendungsverfolgung geändert

DPD Austria (ALN MCDPDAT MC Integration, Codeunit 73335436)

Event Zeitpunkt
OnBeforeCreateDPDATLabel Vor dem Request-Aufbau, IsReturn unterscheidet Retoure, IsHandled ersetzt den Standardweg
OnAfterCreateDPDATLabel Nach erfolgreicher Antwort von DPD

Hinweise

  • Lizenz. Beide Wege prüfen die DPD-Austria-Lizenz wie der Dialog. Ohne aktive Lizenz oder Demo entsteht kein Label.
  • Berechtigungen. Der aufrufende Benutzer braucht den Berechtigungssatz ALN MCDPDAT User oder die darin enthaltenen Rechte auf die Codeunits.