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 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 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 Useroder die darin enthaltenen Rechte auf die Codeunits.