Hallo zusammen,
ich verarbeite mit folgendem Skript die Spalten aus dem Children-Datastore. Nun ist mir grade aufgefallen, dass in „child.getCols“ auch die Spalten aus dem Master-Datastore enthalten sind. Ist das so Absicht? Gibt es irgendeinen allgemeines Feld, welches ich abrufen kann, um die Herkunft des Spalten unterscheiden zu können?
,"line_items": [
<#list row.children() as child>
{
<#list child.getCols() as child_col>
"${child_col.getTitle()}": "${child_col}"<#sep>,
</#list>
}<#sep>,
</#list>
]
Gruß
Gustav
Hallo Gustav,
Ja, das ist so gewollt. Master- und Child - rows sind Teil eines Spradsheets (auch wenn die children-Rows nicht sichtbar sind) und haben eine gemeinsame header Zeilen. Deshalb sind die master-Datastore Spalten auch an den children-Rows vorhanden.
Das ist leider schwierig, da das Spreadsheet nichts über die Herkunft der Spalten weiß.
Evtl. hilft dir das child_col.val()
bei den Master (Schema) Spalten immer null
(kein Wert vorhanden) ist.
<#list spreadsheet@SearchMasterDatastore_55.getRows() as row>
,"line_items": [
<#list row.children() as child>
{
<#list child.getCols() as child_col>
<#-- col.val() sollte bei den master Spalten 'null' sein -->
<#if child_col.val()??>
"${child_col.getTitle()}": "${child_col}"<#sep>,
</#if>
</#list>
}<#sep>,
</#list>
]
</#list>
Noch ein Hinweis: Auch Child - cols aus dem Datastore den Wert null
haben. Dann werden diese auch nicht ausgegeben.
VG Torsten
Hi Gustav,
noch ein kleiner Nachtrag, weil ich gestern nicht daran gedacht habe. Wir haben noch ein paar relativ neue Template Funktionen, mit denen man etwas einfacher JSONs aus Master - Child Datastore erstellen kann (siehe Scripting | Synesty | No Code - Low Code Integration & Automation).
In deinem Fall könnte das in etwas so aussehen:
Vollständiger JSON:
<#list spreadsheet@SearchMasterDatastore_55.getRows() as row>
<#assign children = row.children()?map(childRow -> newMap(childRow.toMap()).deleteReservedCols()) />
${toJSON(newMap(row.toMap()).deleteReservedCols().set('line_items', children),{'removeNull':true, 'removeEmpty': false, 'pretty': true})}<#sep>,</#sep>
</#list>
bzw. nur der lineItems
(children) Teil:
<#list spreadsheet@SearchMasterDatastore_55.getRows() as row>
<#assign children = row.children()?map(childRow -> newMap(childRow.toMap()).deleteReservedCols()) />
${toJSON(newMap().set('line_items', children),{'removeNull':true, 'removeEmpty': false, 'pretty': false})}<#sep>,</#sep>
</#list>
Vielleicht hilft dir das weiter.
VG Torsten
1 „Gefällt mir“
Hallo Torsten,
es geht um die Line-Items von eurem ShopifyGetOrders-Step. Da fangen glücklicherweise alle Spalten mit „line_items“ an, von daher kann ich die darüber selektieren.
Die toJSON/XML-Funktionen sind ein guter Hinweis. Bisher habe ich mich damit noch nicht richtig beschäftigt, bin dafür zu komfortabel mit den manuell geschriebenen Outputs.
Gruß
Gustav