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 DatensatzesALN 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 = Errorund die DPD-Meldung steht inError 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.