Zum Inhalt

Entwicklerschnittstelle

Diese Seite richtet sich an AL-Entwickler und Integratoren, die DPD-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 MCDPD MC Integration (Codeunit 73334825) Connector-Logik; nimmt die Service-Auswahl entgegen und veröffentlicht die DPD-Events
ALN MCDPD Additional Service (Enum 73334845) Die Service-Codes der Zusatzleistungen
ALN MCDPD Label Service (Tabelle 73334836) Zusatzleistungen je Etikett, wie sie an DPD übertragen werden

Label per Code

Ein Label ohne besondere Leistungen entsteht mit zwei Hub-Prozeduren, genau wie über die Aktion Label erstellen (1-Klick) am Verkaufsauftrag:

var
    ShipmentMgmt: Codeunit "ALN MC Shipment Mgmt.";
    EntryNo: Integer;
begin
    EntryNo := ShipmentMgmt.CreateLabel('DPD', 'VA-2026-01187');
end;

Sollen Zusatzleistungen mitreisen, nimmt CreateLabelWithDetails eine Hub-Service-Auswahl (ALN MC Label Svc. Selection) entgegen. Der Service Code ist der Name des Enum-Werts aus ALN MCDPD 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), 'EUR');

    EntryNo := ShipmentMgmt.CreateLabelWithDetails(
        'DPD', 'VA-2026-01187', 1850, 'CL', 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" := 'DPD';
    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 MCDPD Label Service an. Die Parameter sind auf zwei Felder mit je 50 Zeichen begrenzt; unbenutzte Parameter bleiben leer.

code Leistung Parameter 1 Parameter 2 Hinweis
Predict Predict-Benachrichtigung Kanal (E-Mail, SMS, beide) und Sprache kommen aus der DPD-Einrichtung, Adresse und Telefon aus der Lieferadresse
PersonalDelivery Persönliche Zustellung, keine Nachbarn
SaturdayDelivery Samstagszustellung
HigherInsurance Höhere Versicherung Betrag Währung ISO Leer = Standardbetrag und -währung der DPD-Einrichtung
HazardousGoods Gefahrgut in begrenzten Mengen
ParcelShopDelivery Zustellung an Pickup-Paketshop Paketshop-ID ID aus der DPD-Paketshopsuche
IdentCheck Identprüfung Nicht ohne Dialog nutzbar: Mindestalter, Vor- und Nachname werden aus den Parametern nicht übernommen

Gesendete Leistungen ersetzen die Standardleistungen

Enthält die Service-Auswahl mindestens einen DPD-Eintrag, wendet der Connector die Standardleistungen der DPD-Einrichtung (Standard Predict, Persönliche Zustellung, Samstagszustellung, Versicherung) nicht an. Nur bei leerer Auswahl greifen sie wie im Dialog. Wer eine Leistung ergänzt, muss die gewünschten Standards ausdrücklich mitsenden.

Betragsformat

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 in Business Central 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": "DPD",
  "productCode": "CL",
  "weightGrams": 1850,
  "servicesJson": "[{\"code\":\"Predict\"},{\"code\":\"HigherInsurance\",\"parameter1\":\"2500.00\",\"parameter2\":\"EUR\"}]"
}

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 (ALN MCDPD MC Integration, Codeunit 73334825)

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

Hinweise

  • Lizenz. Beide Wege prüfen die DPD-Lizenz wie der Dialog. Ohne aktive Lizenz oder Demo entsteht kein Label.
  • Berechtigungen. Der aufrufende Benutzer braucht Ausführungsrechte auf die Codeunits des Connectors und des Hubs, siehe die Berechtigungssätze der beiden Apps.