Entwicklerschnittstelle
Diese Seite richtet sich an AL-Entwickler, die DHL-Labels ohne den Dialog „Label erstellen" erzeugen oder den Connector über Events erweitern möchten. Für die normale Nutzung der App ist sie nicht erforderlich.
Alle hier beschriebenen Einstiege laufen über denselben Weg wie der Dialog: Lizenzprüfung, Versandregeln, Vertragsauflösung, Tracking-Eintrag und die Hub-Events greifen in jedem Fall.
| Objekt | Zweck |
|---|---|
ALN MCDHL Label API (Codeunit 73334792) |
Label für einen Verkaufsauftrag oder eine gebuchte Lieferung erzeugen |
ALN MCDHL Label Services (Codeunit 73334782) |
Service-Codes der Zusatzleistungen und Helfer für die Service-Auswahl |
ALN MCDHL Evt Publisher (Codeunit 73334798) |
Öffentliche Events des Request Builders und der Versandregeln |
ALN MC Shipment Mgmt. (Hub, Codeunit 73334603) |
Carrier-neutraler Einstieg des Hubs: Weg der Aktion „Label erstellen (1-Klick)", intern auch von der Label API verwendet |
Welcher Weg passt?
| Ziel | Weg |
|---|---|
| Label bei Freigabe oder Buchung, ohne Eingriff | Automatische Labels, ganz ohne eigenen Code |
| Genau das, was „Label erstellen (1-Klick)" tut, aus einem eigenen Prozess | 1-Klick-Label per Code |
| Label mit bestimmten DHL-Zusatzleistungen, Gewicht oder Produkt | Label erzeugen über die Label API |
Ohne eigenen Code: automatische Labels
Soll das Label bei der Freigabe des Verkaufsauftrags oder bei der Buchung der Lieferung entstehen, braucht es keine Programmierung. Auf der Karte des Versanddienstleisters im Bereich Automatisierung das Feld Etikett automatisch erstellen auf Bei Freigabe oder Bei Buchung setzen.
Freigabe und Buchung legen dann nur einen Posten an. Die Aufgabenwarteschlange erstellt das Label alle fünf Minuten über denselben Weg wie der 1-Klick, jeden Auftrag in einer eigenen Transaktion. Ein Fehler beim Dienstleister landet im Posten und blockiert weder Freigabe noch Buchung. Einzelheiten unter Automatische Labels.
1-Klick-Label per Code
Die Aktion Label erstellen (1-Klick) am Verkaufsauftrag ruft genau zwei öffentliche Prozeduren des Hubs auf. Eigener Code erreicht mit demselben Aufruf dasselbe Ergebnis:
var
ShipmentMgmt: Codeunit "ALN MC Shipment Mgmt.";
ShipmentLabel: Record "ALN MC Shipment Label";
ProviderCode: Code[20];
EntryNo: Integer;
begin
ProviderCode := ShipmentMgmt.ResolveDefaultProvider('VA-2026-01187');
if ProviderCode = '' then
Error(NoProviderErr); // kein eindeutiger Versanddienstleister
EntryNo := ShipmentMgmt.CreateLabel(ProviderCode, 'VA-2026-01187');
ShipmentLabel.Get(EntryNo);
case ShipmentLabel.Status of
ShipmentLabel.Status::Created:
; // ShipmentLabel."Tracking No." ist gefüllt
ShipmentLabel.Status::Error:
; // ShipmentLabel."Error Message" enthält die DHL-Meldung
end;
end;
Parameter
| Prozedur | Parameter | Rückgabe |
|---|---|---|
ResolveDefaultProvider |
SalesOrderNo: Code[20]: Nummer des Verkaufsauftrags |
Code[20]: Versanddienstleister-Code, leer wenn keiner eindeutig ist |
CreateLabel |
ProviderCode: Code[20], SalesOrderNo: Code[20] |
Integer: Entry No. des ALN MC Shipment Label |
CreateLabelFromShipment |
ProviderCode: Code[20], SalesShipmentNo: Code[20]: Nummer der gebuchten Lieferung |
wie CreateLabel |
Den Versanddienstleister für eine gebuchte Lieferung ermitteln Sie ebenfalls mit
ResolveDefaultProvider und der Auftragsnummer der Lieferung (Order No.).
Was der Aufruf entscheidet
- Versanddienstleister. Reihenfolge: Dienstleister zum
Shipping Agent Codedes Auftrags, dann der Standard-Versanddienstleister der merchantCENTRAL-Einrichtung, dann der einzige aktive Dienstleister. Die Artikelkategorie wählt den Dienstleister nicht aus. - Positionen. Die Artikelkategorie entscheidet, welche Zeilen mitreisen. Zeilen, deren
Kategorie an einen anderen Versandpartner gebunden ist, fehlen in Gewicht, Packstückinhalt,
Zollpositionen und Versandregeln. Sind alle lieferbaren Zeilen anderswo gebunden, bricht
CreateLabelmit einem Fehler ab. Siehe Zeilen, die nicht mit diesem Label reisen. - Gewicht und Produkt. Das Gewicht kommt aus dem Auftrag, das DHL-Produkt aus der Standardzeile der Vertragszeilen. Ist ein Standard-Verpackungsmaterial eingerichtet, wird es angewendet. Zolldaten internationaler Sendungen werden aus dem Auftrag befüllt.
- Zusatzleistungen. Die Vorgaben der DHL-Einrichtung, die auch der Dialog vorbelegt: GoGreen Plus, Versicherung, Sperrgut, Retourenlabel beilegen, Wunschnachbar, Wunschort, Keine Nachbarschaftszustellung, Alterssichtprüfung, Persönliche Übergabe und Empfängerunterschrift. Unverträgliche Kombinationen werden wie im Dialog aufgelöst. Danach ergänzen die Versandregeln. Nicht übernommen werden der Versicherungsvorschlag nach Warenwert (er bleibt eine Empfehlung im Dialog) und die Standard-Vorausverfügung. Ältere Versionen des DHL-Connectors (bis 1.22) wenden nur die Versandregeln an. Andere Leistungen je Aufruf: Label API.
Fehler und Ergebnis
- Kein Auftrag, keine Lizenz, inaktiver Dienstleister oder keine mitreisende Zeile:
Error(), es entsteht kein Label. - Ein fehlgeschlagener DHL-Aufruf löst keinen Fehler aus. Das Label hat dann
Status = Errorund die DHL-Meldung steht inError Message. Zusätzlich feuertOnCreateShipmentLabelError. - Bei Erfolg feuert
OnAfterCreateShipmentLabelmit der Sendungsnummer. Das ist der Einstieg für Folgeschritte wie Druck oder Rückmeldung an ein Fremdsystem.
Nicht aus der Freigabe oder Buchung heraus aufrufen
CreateLabel ruft DHL per HTTP auf. In einem Subscriber auf Freigabe oder Buchung hält
das die Sperren über die Netzwerklatenz, und nach einem späteren Abbruch der Buchung
existiert bei DHL eine Sendung zu einem Beleg, den es nicht gibt. Verwenden Sie dafür die
automatischen Labels oder einen eigenen
Job-Queue-Eintrag. Im eigenen Lauf jeden Auftrag in einer eigenen Transaktion ausführen,
damit ein Fehler nicht die übrigen zurückrollt:
Commit();
if not Codeunit.Run(Codeunit::"My Label Runner", SalesHeader) then
LogFailure(SalesHeader."No.", GetLastErrorText());
My Label Runner ist dabei eine eigene Codeunit mit TableNo = "Sales Header", deren
OnRun den Aufruf oben enthält.
Label erzeugen
Die Zusatzleistungen werden als temporärer Datensatz ALN MCDHL Shipment VAS übergeben. Jedes
Feld dieses Datensatzes wird übernommen, auch die, die der Dialog nicht anbietet: Nachnahme,
Identprüfung, Packstation, Vorausverfügung, Rücksendeadresse.
var
LabelApi: Codeunit "ALN MCDHL Label API";
TempVAS: Record "ALN MCDHL Shipment VAS" temporary;
EntryNo: Integer;
begin
TempVAS.Init();
TempVAS."Visual Check of Age" := TempVAS."Visual Check of Age"::A18;
TempVAS."Additional Insurance" := true;
TempVAS."Insurance Amount" := 2500;
TempVAS."Insurance Currency" := 'EUR';
EntryNo := LabelApi.CreateLabel('VA-2026-01187', TempVAS);
end;
CreateLabelFromShipment arbeitet gleich, erwartet aber die Nummer einer gebuchten
Verkaufslieferung. Beide Prozeduren gibt es zusätzlich mit Gewicht in Gramm, Produktcode
(Versandart-Servicecode), Ship-to-Overrides und einer Hub-Service-Auswahl:
EntryNo := LabelApi.CreateLabel(
'VA-2026-01187', 1850, 'PAKET', TempShipToOverrides, TempVAS, TempLabelSvcSelection);
Rückgabe und Fehler
- Rückgabe ist die
Entry No.des DatensatzesALN MC Shipment Label. - Ein Fehler beim Provider oder bei der Lizenz löst
Error()aus, es entsteht kein Label. - Ein fehlgeschlagener DHL-Aufruf löst keinen Fehler aus. Das Label hat dann
Status = Errorund die DHL-Meldung steht inError Message. - Versandregeln laufen auch bei diesem Weg und ergänzen Leistungen, überschreiben aber keine übergebenen Werte.
- Die Vorgaben der DHL-Einrichtung, die der Dialog vorbelegt (Standard GoGreen Plus, Standard Versicherung usw.), werden nicht angewendet. Übergeben Sie sie ausdrücklich.
- Setzen VAS-Datensatz und Service-Auswahl dasselbe Feld, gewinnt die Service-Auswahl.
- Ein Service-Parameter, der nicht ins Format passt oder zu lang ist, löst einen Fehler aus. Es entsteht kein Label mit stillschweigend fehlender Leistung.
Service-Codes
Alternativ zum VAS-Datensatz lassen sich Leistungen als Hub-Service-Auswahl
(ALN MC Label Svc. Selection) übergeben. Das ist der Weg, den auch die REST-API des Hubs
verwendet. Die Codes stellt ALN MCDHL Label Services bereit; die Parameter sind auf zwei
Felder mit je 50 Zeichen begrenzt.
var
LabelServices: Codeunit "ALN MCDHL Label Services";
TempLabelSvcSelection: Record "ALN MC Label Svc. Selection" temporary;
begin
LabelServices.AddService(TempLabelSvcSelection, LabelServices.AgeCheck(), 'A18', '');
LabelServices.AddService(TempLabelSvcSelection, LabelServices.Insurance(),
LabelServices.FormatAmountParameter(2500), 'EUR');
LabelServices.AddService(TempLabelSvcSelection, LabelServices.Locker(), '123', '12345678');
end;
| Code | Prozedur | Leistung | Parameter 1 | Parameter 2 |
|---|---|---|---|---|
GOGREEN_PLUS |
GoGreenPlus() |
GoGreen Plus | – | – |
BULKY_GOODS |
BulkyGoods() |
Sperrgut | – | – |
RETURN_LABEL |
ReturnLabel() |
Retourenlabel beilegen | – | – |
PREF_NEIGHBOUR |
PreferredNeighbour() |
Wunschnachbar | Name und Adresse | – |
PREF_LOCATION |
PreferredLocation() |
Wunschort | Ablageort | – |
NO_NEIGHBOUR |
NoNeighbourDelivery() |
Keine Nachbarschaftszustellung | – | – |
PREF_DAY |
PreferredDay() |
Wunschtag | Datum yyyy-mm-dd |
– |
AGE_CHECK |
AgeCheck() |
Alterssichtprüfung | A16 oder A18 |
– |
NAMED_PERSON_ONLY |
NamedPersonOnly() |
Persönliche Übergabe | – | – |
SIGNED_BY_RECIPIENT |
SignedByRecipient() |
Empfängerunterschrift | – | – |
INSURANCE |
Insurance() |
Transportversicherung | Betrag, Punkt als Dezimaltrenner | Währung ISO |
IDENT_CHECK |
IdentCheck() |
Identprüfung | Vorname|Nachname|yyyy-mm-dd |
A16 oder A18 |
LOCKER |
Locker() |
Packstation | Locker-ID | Postnummer |
POSTFILIALE |
PostOffice() |
Filiale | Retail-ID | Postnummer |
ENDORSEMENT |
Endorsement() |
Vorausverfügung | RETURN oder ABANDON |
– |
PDDP |
PostalDeliveryDutyPaid() |
Postal Delivery Duty Paid | – | – |
PREMIUM |
Premium() |
Premium (international) | – | – |
Helfer für die Parameter: FormatDateParameter, FormatAmountParameter,
AgeCheckParameter, BuildIdentCheckParameter. Die Werte sind unabhängig von der
Sitzungssprache, Betrag und Datum werden im XML-Format geschrieben.
Nachnahme
Nachnahme braucht Kontoinhaber, IBAN, BIC und Verwendungszwecke und hat deshalb keinen
Service-Code. Sie wird ausschließlich über die Felder Cash on Delivery, COD Amount,
COD Currency und COD * des VAS-Datensatzes übergeben.
Events
Hub (ALN MC Shipment Evt Publisher, Codeunit 73334602)
| Event | Zeitpunkt |
|---|---|
OnApplyQuickLabelDefaults |
Schnell-Label (1-Klick, Batch, automatische Labels) angelegt, vor dem DHL-Aufruf; hier setzt der Connector die Einrichtungsvorgaben |
OnAfterCreateShipmentLabel |
Label erfolgreich erzeugt, Tracking-Eintrag angelegt |
OnCreateShipmentLabelError |
DHL-Aufruf fehlgeschlagen, Label mit Status Error gespeichert |
OnAfterCancelShipment |
Sendung storniert |
OnAfterDeliveryStatusChanged |
Zustellstatus aus der Sendungsverfolgung geändert |
DHL (ALN MCDHL MC Integration, Codeunit 73334775)
| Event | Zeitpunkt |
|---|---|
OnBeforeCreateDHLLabel |
Vor Versandregeln und Request-Aufbau, IsReturn unterscheidet Retoure |
OnAfterCreateDHLLabel |
Nach erfolgreicher Antwort von DHL |
DHL (ALN MCDHL Evt Publisher, Codeunit 73334798)
| Event | Zeitpunkt |
|---|---|
OnAfterBuildShipmentJson |
JSON einer Sendung ist fertig und kann vor dem Senden ergänzt werden |
OnBeforeApplyRuleAction |
Vor der Aktion einer passenden Versandregel, IsHandled ersetzt die Standardaktion |
OnAfterApplyRuleAction |
Nach der Aktion einer passenden Versandregel |
Die gleichnamigen Events in ALN MCDHL Request Builder und ALN MCDHL Rules Engine sind
veraltet. Diese Codeunits sind intern, Fremd-Apps konnten sie nie abonnieren.
Hinweise
- Lizenz. Die Label API prüft die DHL-Lizenz wie der Dialog. Ohne aktive Lizenz oder Demo entsteht kein Label.
- Berechtigungen. Der aufrufende Benutzer braucht den Berechtigungssatz
ALN MCDHL Useroder die darin enthaltenen Rechte auf die Codeunits. - Zusatzleistungen und Teilnahme. Leistungen wie Sperrgut oder Versicherung brauchen eine passende DHL-Teilnahme in den Vertragszeilen, siehe Profile & Abrechnung.
- Kontext bei Abbruch. Bricht der Hub vor dem Anlegen des Labels ab, bleibt kein Zustand zurück, der ein späteres Label beeinflussen könnte. Der übergebene VAS-Datensatz ist an die Belegnummer gebunden.