Plenty Lieferaufträge anlegen

Hallo,

mit der Route (POST) /rest/orders/{orderId}/delivery_orders können recht komfortabel Lieferaufträge auf Basis existierender Aufträge angelegt werden.

Wir nutzen diese Route bereits, aber stoßen dabei leider sporadisch auf folgenden Fehler:

An error happened during a HTTP Request. (Root Causes: NoHttpResponseException: marketplaces.xxx.de:443 failed to respond)

Beispiel: JobID db984d59-35b8-11ee-99f2-901b0ea49fee

Daher zwei Fragen:

Könnt ihr mittels Debug Log ggf. die Ursache erkennen?
Könnt ihr evtl. einen passenden Step dafür bauen? Ihr kennt Plenty und seine Tücken ja bestens :wink:

Danke und Gruß
Tim

Hallo Tim,

die Fehlermeldung deutet darauf hin, dass wir keine Antwort von der Plenty API erhalten haben. Die Ursache dafür lässt sich wahrscheinlich auch mit Debug log nicht herausfinden, aber du kannst ihn uns gern mal per Ticket schicken.

Bei „lesenden“ Calls (GET) können wir das in den unseren Plenty Steps relativ leicht über eine retry Logik beheben.
Bei „schreibenden“ Calls (POST, PUT, DELETE) ist das leider nicht mehr so einfach möglich. Aufgrund der fehlenden API response haben wir keinerlei Information, ob der Call ausgeführt wurde (z.B. der Lieferauftrag angelegt wurde). In diesem Fall würden wir auch in unseren Plenty Steps eine Warnung loggen.
Ich habe deinen Wunsch (eigener Plenty Step zum anlegen von Lieferaufträge) trotzdem mal mit auf die Wunschliste gepackt.

Viele Grüße
Torsten

Hallo Tim,

es ist jetzt ein plentymarkets Step (PlentyCreateDeliveryOrder) für die Erstellung der Lieferaufträge verfügbar.

Viele Grüße
Torsten

1 Like

Hallo Torsten,

noch frohes Neues :slight_smile:

Wollte gerade auf den neuen Step (Danke dafür) umstellen, aber leider ist der ohne „vollständigen“ Output leider nicht wirklich nutzbar für uns.

Aktuell ist der Output ja lediglich die Daten des Ursprungsauftrags, nicht jedoch jene des neu angelegten Lieferauftrags. Aber genau diese, z.B OrderID des LA braucht man ja für mögliche Folgeverarbeitungen :wink: Beispielsweise Paketnummer hinzufügen etc.

Hier mal wie wir die Response des aktuell eingesetzten HTTP Steps in einem Mapper weiterverwenden:

image

Könnte der Step ggf. dahingehend noch erweitert werden? Idealerweise inkl. Durchschleifen des Inputspreadsheets - siehe source_*

LG Tim

Hallo Tim,

wünsche dir bzw. dem ganzen Team auch ein gesundes und erfolgreiches neues Jahr!

Ich habe mir den Step nochmal angeschaut. Die ID des erstellten Lieferauftrags können wir noch hinzufügen.
Das „Durchschleifen“ der Spalten („Trackingnummern“, „RequestBody“) bekommen wir in dem Plenty Steps leider nicht ohne weiteres hin (ähnlich wie hier: Spalten Durchreichen - #2 von synesty-Torsten). Wenn du die Trackingnummer noch setzen willst, dann wäre es dann wahrscheinlich am einfachsten noch ein MappingSet oder KeyValueSpreadsheet zu verwenden, um die Order ID („source_OrderId“) der erstellen Lieferauftrags ID zuzuordnen.

Ich gebe dir nochmal Bescheid sobald die Order ID des erstellten Lieferauftrags im Output vorhanden ist (voraussichtlich im Laufe der nächsten Woche).

Viele Grüße
Torsten

1 Like

Evtl. könnt ihr uns noch die Logik zu den Status Spalten im Output mitteilen, da hier ja scheinbar nicht die „normalen“ Statuscodes (200 etc.) ausgegeben , sondern in irendeiner Form interpretiert werden oder? Also statt 200 sucess beispielsweise… Was wird bei 443 und 500 ausgegeben? :slight_smile:

Danke und Gruß

Hallo Tim,

die Order ID des erstellten Lieferauftrags steht jetzt im Output des PlentyCreateDeliveryOrder Steps in der Spalte DeliveryOrderID zur Verfügung.

Bei diesem Step und alle anderen Plenty Steps die Daten in schreiben (Anlegen oder Aktualisieren), werden bei der normalen Ausführung (nicht Vorschau) nur erfolgreich angelegte Delivery Orders im Output Spreadsheet ausgegeben. D.h. der HTTP Status der Plenty Response ist immer 200, wenn die Bestellung im Output Spreadsheet vorhanden ist. Wenn ein Fehler (443 oder 500) auftritt, dann wird eine Warnung im Eventlog ausgegeben. Im Output ist dieser Fehler / die Bestellung dann bei Fehler nicht vorhanden.

Da wir in der Vorschau bei den „schreibenden“ Plenty Steps keine Daten an Plenty schicken, werden die Daten des Input Spreadsheet nur (von uns bzw. vom Step) validiert. D.h. es wird soweit es möglich ist geprüft, ob Pflichtfelder gesetzt und Datentypen korrekt sind. Das Ergebnis der Validierung wird in den Spalten status und statusMessage ausgeben, um bei der Vorschau zumindest ein ‚grobes‘ Feedback zu bekommen, ob noch etwas fehlerhaft konfiguriert ist. Diese beiden Spalten sind nur in der Voschau und nicht bei der normalen Ausführung des Steps vorhanden.

Viele Grüße
Torsten

1 Like

Hey Torsten,

Versuch zwei der Umstellung und wir bringen das mit Folgeverarbeitung nach Anlage der DeliveryOrders einfach nicht zusammen…

Order1 wird in mehreren Paketen verschickt - Paketnummer1 + Paketnummer2. Es werden daher 2 DeliveryOrders erzeugt → 2x DeliveryOrderID mit identischer OrderID

Wie soll man in solchen Fällen die Paketnummer der DeliveryOrder zuortnen? Der Bezug ist ja nur über die OrderItemsID möglich, aber die ist zwar im Input für den Step, aber nicht im Output.

Ein KeyValue hilft hier auch nicht weiter…

Könnt ihr die OrderItemsID aus dem Response ebenfalls noch parsen und ausgeben? Alternativ erleuchte uns gerne mit einer anderen Lösung :innocent:

Danke und Gruß
Tim

Hallo Tim,

ich schaue mal ob wir OrderItemsID oder die Map aus dem Input auch noch ins Ergebnis bekommen und schreibe dir dann nochmal.

Eine einfache Lösung hab ich für diesen Fall leider auch nicht :smiley: Eventuell könnte man mit dem PlentySearchOrders Step die angelegten DeliveryOrderIDs (mit Auftragspositionen) abrufen und dann die richtige Trackingnummer zuordnen.

Viele Grüße
Torsten

Hey,

Element OrderItemsID ist im Response vorhanden, welchen ihr ja bereits in Teilen parsed. Danke für eure Flexibilität und sry fürs Nerven :innocent:

SearchOrder bzw. von hinten durch die Brust durchs Auge, das wollen wir doch alle nicht Torsten :stuck_out_tongue:

LG Tim

Hallo Tim,

der Step gibt jetzt noch zwei zusätzliche Spalten aus:

In der ReferencedOrderItems Spalte findest du eine Map mit den OrderItemsIDs der Auftragspositionen („parent“ Auftrag) zu den OrderItemIDs des erstellten Lieferauftrags.

In der DeliveryOrderItemQuantities findest du die Mengen der einzelnen Postionen des erstellten Lieferauftrags.

Viele Grüße
Torsten

1 Like

Hallo @synesty-Torsten,

die Umsetzung funktionieren soweit ganz gut.

Eine Sache hätte ich hier aber noch.
Wenn bestimmte Lieferaufträge nicht angelegt werden können weil, z.B. siehe Screenshot, wird aktuell immer eine Warnung ausgegeben:

Wäre es möglich dass alle Aufrufe der API Route die nicht 200/201 entsprechen über einen negativen Output, ähnlich wie bei Filtern, ausgegeben werden können? Also im Prinzip alles was Status >= 400 ist.
Ansonsten müssten wir es leider wieder mit einer Kombi aus API Call und Filter lösen.

Viele Grüße
Oliver