ich habe einen Master-/Child DataStore in dem Auftragskopf- und Positionssätze liegen. Um aus diesen nun Bestellungen anlegen zu können muss ich die SKU aus den Positionssätzen in ProductIDs übersetzen. Das will ich mit einer REST-API Abfrage per SpreadsheetUrlDownload machen.
Leider stehen in den Quelltabellen anfangs immer Kopfzeilen, was dazu führt, dass Response#1 voller Produktinfos ist, die ich nicht benötige.
Im Mapper sind die folgenden Informationen bereits für die Bestellungserzeugung gemappt.
Der Call ist ***host*** /wp-json/wc/v3/products/?sku=${line_items_SKU!} .
Gibt es eine Möglichkeit die Zeilen innerhalb des SpreadsheetUrlDownloaders loszuwerden? Bzw. vllt einen anderen Ansatz zur Lösung des Problems?
Im nächsten Schritt wird die Antwort per JSONReader in eine Tabelle gewandelt die lediglich SKU und ID beinhaltet. Danach soll sie per KeyValueSpreadsheet verweisbar gemacht und dann dem Zielcall hinzugefügt werden, um die Bestellung erstellen zu können.
ich bin mir nicht ganz sicher was genau du vorhast. Es liest sich so, als bekommst du eine Response, bei der du nur jede zweite Zeile brauchst, oder? Das kannst du eigentlich mit einem nachfolgenden Filter-Step erledigen.
In dem Filter gibst du dann eine Spalte mit einem bestimmten Wert an, die nur in den Zeilen auftritt, die du auch brauchst.
Ich hatte das schon mit dem Filter versucht; Items_SKU!?trim != '' auf den SearchDatastore Output. Frage mich aber gerade, warum das jetzt funktioniert.
Im Mapper versuche ich jetzt in der entsprechenden Zielspalte das folgende:
Leider ohne Erfolg. Er schimpft und meckert, dass er map@KeyValueSpreadsheet_13 nicht findet… die allerdings existiert.
Script error: You have used a variable (map@KeyValueSpreadsheet_13.containsKey) which does not exist. This can happen if you misspelled the variable, forgot to check if if the variable exists or pause(…)…d a previous step. (Root Causes: InvalidReferenceException: The following has evaluated to null or missing: ==> map@KeyValueSpreadsheet_13.containsKey [in template „line_items_SKU“ at line 1, column 6] ---- FTL stack trace („~“ means nesting-related): - Failed at: #if map@KeyValueSpreadsheet_13.contai… [in template „line_items_SKU“ at line 1, column 1] ----): <#if map@KeyValueSpreadsheet_13.containsKey(‚BItems_SKU‘)>map@KeyValueSpreadsheet_13.get[‚id‘]<#else></#if>
Nach dem einfügen musst du ggf. die Daten nochmal neu holen: speichern, aus Mapper raus und anschließend nochmal konfigurieren, wie hier von Lukas beschrieben. Das ist leider noch ein Bug, der sich momentan nicht so leicht lösen lässt (aber wir arbeiten dran).
Hey @synesty-Torsten!
Ja top! Das funktioniert. Wenn du mir jetzt noch erklären magst, warum sich die Syntax ‚gefühlt‘ falschrum zusammensetzt, bin ich happy
Abseits davon macht mich der Syntax allgemein fertig. Gibt es eine Doku dazu, wie man in Output-Spreadsheets von vorherigen Steps verweist? Steps | Synesty Docs habe ich gelesen, dort wird nur auf den Gesamtoutput oder list verwiesen. Da ich aber einen einzelnen Wert brauche, bringt mich list hier nicht voran.
Innerhalb meines APIcalls, mit dem ich die nun umgewandelten Bestellungen einzeln zu unserem Shop POSTe will ich nun auf Einträge im spreadsheet des Mappers zeigen. Nur check’ ich die Syntax noch immer nicht.
wenn du aus einem TextHTMLWriter auf einen Mapper zugreifen möchtest, musst du durch den Mapper listen, da die Logik davon ausgeht, dass dein Mapper mehrere Zeile also auch mehrere Werte hat.
Weil ${spreadsheet@SpreadsheetMapper_4.get(payment_method)} wüsste, abseits davon, dass der Syntax falsch ist, nicht welchen Wert du aus Spalte payment_method haben möchtest.
Deshalb ist im HTMLWriter der ±Button dein bester Freund:
Wenn du das Skript hinzufügst werden dir erstmal alle Spalten deines Mappers aufgelistet, die nicht gewünschten löschst du raus.
Willst du nur einen bestimmten Wert, zum Beispiel den der ersten Zeile kannst du dir das ungefähr so als Variable definieren:
Okay, das klingt erstmal gut. Ich klicke mich schon als durch das + … in der Regel kommt es auch zu dem gewünschten Ergebnis. Nur manchmal halt nicht :-D.
Ich schaue mal wie ich das nun umsetze; schließlich brauche ich etwas wie einen COUNT und spätestens bei den Positionszeilen (unterschiedliche Anzahl) wird’s dann schwieriger. Ich habe irgendwie sowas wie eine forEach im Kopf.
Vielleicht fällt mir was ein, wie ich das machen könnte. Oder es zeigt sich ein anderer Weg zur Lösung auf.