Moin,
ich arbeite aktuell daran mit den API Calls mehrere Orders in Magento2 zu erstellen und würde gerne Wissen, ob ihr eine Idee habt, wo ich finden kann was alles möglich ist.
Ausgangspunkt ist ein Master-Datastore mit Header Informationen über die Order und ein Child-Datastore mit potenziell mehreren Artikelzeilen.
Wie kann ich am besten für jede Order ein JSON bauen welches im JSON selbst eine Liste an JSON Blöcken hat, welche für die Items stehen?
Kurzes Beispiel:
entity: {
„orderId“:$orderId,
„items“:[ {$item1.addColumns()}, {$item2.addColumns()},…
]
}
Ich habe im Handbuch nicht konkretes hierzu finden können.
Über eine schnelle Antwort wäre ich erfreut,
René
Hallo René,
wenn du die Daten in einem Master-Child Datastore hast, kannst du mit .children()
auf die Child Zeilen zugreifen.
In der Dokumentation findest du einen kurzen Abschnitt dazu unter Datastore Import und Export | Synesty Docs
Einen Beispiel Flow findest du in folgender Vorlage: Hierarchische XML oder JSON Datei aus Spreadsheet erzeugen (komplexeres Beispiel)
Viele Grüße
Torsten
Moin @synesty-Torsten,
wie ist das Verhalten, wenn man zwei Child-Datastores hat?
Kann ich irgendwie entscheiden welches von den beiden Child-Datastores ich kriegen will?
Ich müsste nämlich erst das eine und dann das andere abarbeiten.
VG
Hallo René,
Leider ist das über die children()
Funktion nicht möglich. Die Datensätze kommen in zufälliger Reihenfolge aus allen Child Datastores.
Du könntest aber folgendes im template machen um die items in die richtige Reihenfolgen zu bekommen (siehe Kommentare im template).
...
<#-- 2 Hilfvariablen zum speichern der items pro Datastore -->
<#assign orderItemsDS1 = "" />
<#assign orderItemsDS2 = "" />
<#list row.children() as ch>
<#assign itemString>
{
"sku": "${ch['line_items_sku']!}",
"title": "${ch['line_items_title']!?json_string}",
"price": "${ch['line_items_price']!}",
"quantity": "${ch['line_items_quantity']!}"
},
</#assign>
<#-- Über den Datastorenamen des childs wird entschieden, welcher Hilfsvariable das item hinzugefügt wird -->
<#if ch['datastorename']! == "child2">
<#assign orderItemsDS2 += itemString >
<#else>
<#assign orderItemsDS1 += itemString >
</#if>
</#list>
<#-- Die Hilfsvariablen hier in der gewünschten Reihenfolge ausgeben -->
"line_items": [
${orderItemsDS1!?trim}
${orderItemsDS2!?trim?remove_ending(",")}
]
...
Viele Grüße
Torsten
1 Like