Neues Thema starten
Beantwortet

PlentySearchOrders und SpreadsheetMapper - Auftragsdaten in dieselbe Zeile wie Artikelpositionen schreiben und Versandkosten rausfiltern

 Hallo,

wir wollen bald einige unserer Prozesse mit Synesty vereinfachen und legen gerade die ersten Flows zum Test an.

Die Grundkonfiguration klappt auch soweit.


Mit PlentySearchOrders holen wir die Aufträge aus Plenty ab und wollen diese in eine CSV schreiben.

Dabei sollen pro Artikelposition 1 Zeile geschrieben werden. Alle Auftragsübergreifenden Daten, z.B. zum Kunden, der AuftragsID, der Lieferadresse etc. soll dabei in dieselbe Zeile geschrieben werden.


Bis jetzt ist es so

1. Zeile: Auftragsdaten Auftrag x

2. Zeile: Artikelposition 1 von Auftrag x

3. Zeile: Artikelposition 2 von Auftrag x

4. Zeile: Artikelposition 3 von Auftrag x (z.B. Versandkosten)

5. Zeile Auftragsdaten Auftrag y

6. Zeile: Artikelposition 1 von Auftrag y


usw.


Wir brauchen aber:

1. Zeile: Auftragsdaten x - Artikelposition 1

2. Zeile: Auftragsdaten x - Artikelposition 2

3. Zeile: Auftragsdaten y - Artikelposition 1


usw.


Die Auftragsdaten sollen also in die Zeilen der Artikel und die Position der Versandkosten soll rausgefiltert werden.


Leider habe ich noch nicht herausgefunden, wo ich das konfigurieren kann. Über schnelle Hilfe wäre ich sehr dankbar.


Viele Grüße


Beste Antwort

Hier könnten Sie wie folgt vorgehen:


1. PlentySearchOrders (wie gehabt)

2. SpreadsheetMapper

3. SpreadsheetFilter (hier filtern sie sich nur die Positionszeilen raus ... mit anderen Worten: die Kopfzeile wird entfernt).

4. SpreadsheetCSVWriter


zu Step 2. SpreadsheetMapper:

dort können Sie z.B. mit folgender Anweisung im Wert-Feld einer Spalte auf die Auftragskopfdaten zugreifen: 

${parent['OrderHeadOrderID']} 


Das sollte dazu führen, dass in den Positionszeilen die Kopfdaten ausgegeben werden. Bei den Kopfzeile selbst, sollte das Feld leer bleiben.

Damit können Sie am Ende Kopfdaten und Positionszeilen in eine Zeile schreiben - mit anderen Worten: die Positionszeile mit Kopfdaten anreichern.


Hinweis: Der Zugriff auf die Parent-Zeile funktioniert nicht mit allen Steps, aber bei plentySearchOrders (SOAP und REST) sollte das funktionieren, da die Auftragspositionen ihre Parent-Zeile kennen (den Auftragskopf). 


zu Step 3. SpreadsheetFilter:

Folgender Filter sollte nur die Auftragspositionen ausgeben:


OrderHeadOrderType! == ''




Antwort

Hier könnten Sie wie folgt vorgehen:


1. PlentySearchOrders (wie gehabt)

2. SpreadsheetMapper

3. SpreadsheetFilter (hier filtern sie sich nur die Positionszeilen raus ... mit anderen Worten: die Kopfzeile wird entfernt).

4. SpreadsheetCSVWriter


zu Step 2. SpreadsheetMapper:

dort können Sie z.B. mit folgender Anweisung im Wert-Feld einer Spalte auf die Auftragskopfdaten zugreifen: 

${parent['OrderHeadOrderID']} 


Das sollte dazu führen, dass in den Positionszeilen die Kopfdaten ausgegeben werden. Bei den Kopfzeile selbst, sollte das Feld leer bleiben.

Damit können Sie am Ende Kopfdaten und Positionszeilen in eine Zeile schreiben - mit anderen Worten: die Positionszeile mit Kopfdaten anreichern.


Hinweis: Der Zugriff auf die Parent-Zeile funktioniert nicht mit allen Steps, aber bei plentySearchOrders (SOAP und REST) sollte das funktionieren, da die Auftragspositionen ihre Parent-Zeile kennen (den Auftragskopf). 


zu Step 3. SpreadsheetFilter:

Folgender Filter sollte nur die Auftragspositionen ausgeben:


OrderHeadOrderType! == ''



Wow!
Das nenne ich mal eine Antwort in Rekordzeit! Und dabei noch so ausführlich. Vielen Dank, das geht sehr gut los. Großes Lob :)


 

Vielen Dank für das Lob und viel Erfolg bei der Einrichtung Ihrer Flows :)


Viele Grüße

Der Synesty Support

Hallo Synesty Support,

das hat wunderbar geklappt. Nun stehe ich vor einer neuen kleinen Herausforderung.

In meiner CSV-Datei möchte ich die Artikelpositionen der Plentyaufträge ausgeben. Diese sollen durchnummeriert sein pro Auftrag, sprich

1. Zeile: Auftragsdaten x - Artikelposition 1 - Position "1"

2. Zeile: Auftragsdaten x - Artikelposition 2 - Position "2"

3. Zeile: Auftragsdaten y - Artikelposition 1 - Position "1"


Leider habe ich nicht herausgefunden, wo ich auf die entsprechenden Daten (Metadaten?) zugreifen kann.


Vielen Dank für den erneuten Support.

 

Im Wert-Feld des SpreadsheetMapper über den Plus-Button kann man die Zeilennummer einfügen.




Hallo,
das habe ich bereits ausprobiert. Das erzeugt aber eine fortlaufende Nummerierung über die gesamten Aufträge. Zudem bekommen so auch die Kopfzeilen der Aufträge (parents) eine Nummerierung.
Wir benötigen aber die Nummer 1 bei der 1. Artikelposition, die Nummer 2 bei der 2. Artikelposition usw.
Beim nächsten Auftrag soll dann wieder die 1. Artikelposition die Nummer 1 erhalten.
Kann ich das irgendwie realisieren?
Also fortlaufende Nummern INNERHALB eines Auftrages?
Und bei neuen Aufträgen eine neu startende Nummerierung?

 

Oh ok, sorry. Dann helfen hier Zählvariablen: Siehe hier (dort in der Tabelle Datentypen, Datentyp=COUNTER) , hier und  hier.


Um pro OrderID zu zählen könnte man folgendes schreiben:

${counter.inc(spalteMitOrderId+"")}


D.h. pro Order wird ein neuer Zähler gestartet und hochgezählt. 

Beispiel:

${counter.inc("orderID1")} -> 1
${counter.inc("orderID1")} -> 2
${counter.inc("orderID1")} -> 3

${counter.inc("orderID2")} -> 1
${counter.inc("orderID2")} -> 2
${counter.inc("orderID2")} -> 3


Hallo,
das scheint genau die Funktion zu sein, die wir benötigen. Leider bekomme ich immer eine Fehlermeldung:


Wenn ich es in das Feld Wert oder als Skript eintrage:

 

"error in function Scripting: java.lang.RuntimeException: You have used a variable (counter.inc) which does not exist. This can happen if you misspelled the variable, forgot to check if if the variable(...)"

 


Ich habe auch probiert, erstmal die konkrete Spaltenbezeichnung rauszunehmen und nur
${counter.inc()}

 

Das funktionierte leider genausowenig wie mit Bezug auf die Spalte :(
${counter.inc('${parent['OrderHeadOrderID']}')}

 

Ich weiß leider nicht woran es sonst liegen könnte. Steht die obige Counter Funktion denn im SpreadSheetMapper zur Verfügung?


Viele Grüße

 

Ok, das mit der Variable war exemplarisch gemeint. 

Wir gehen aus dass Sie folgendes gemacht haben:


1. Flow Variable anlegen:


2. Im SpreadheetMapper auf das Plus und dort "aus Meta-Daten"


Daraufhin müsste der Counter eingefügt werden.

${meta.counter!}


Das ändern Sie jetzt ab in 

${meta.counter.inc(orderIDSpalte+"")!}



Wir hatten den meta. Prefix vergessen zu erwähnen. Der spielt im Mapper eine Rolle an anderen Stellen nicht. Es war eher exemplarisch gemeint. 

Wir versuchen mal das im Handbuch besser zu beschreiben. 


Bezogen auf Ihre Antwort müsste dann folgendes funktionieren:


${meta.counter.inc(parent['OrderHeadOrderID'] + "")}


Hinweise: 



Super! Es hat geklappt!!!

Vielen vielen Dank :)

Und die Dokumentation ist auch schon erweitert. Top :)

 

Anmelden um einen Kommentar zu veröffentlichen