SpreadsheetUrlDownload Ausgabe aus Master Child soll 1x pro Order

Hallo zusammen,
Ich muss einen API Post senden, die Daten kommen aus einem Master-Child Datastore. Als Step habe ich den „SpreadsheetUrlDownload“ genommen. Soweit so gut, wenn ich das Limit auf 1 setze funktioniert es, aber ab 2 Leider nicht. Es soll einmal pro Order gesendet werden.

<#list spreadsheet@SearchMasterDatastore_271.getRows() as row>
<#assign orders>
{
„shipment_id“: „${row.get(„shipment_id“)!}“,
„order_id“: „${row.get(„Order-ID“)!}“,
„invoice_id“: „${row.get(„invoice_id“)!}“,
„invoice_date“: „${row.get(„invoice_date“)!}“,
„incoterm“: „${row.get(„incoterm“)!}“,
„tracking_code“: „${row.get(„tracking_code“)!}“,
„return_tracking_code“: „“,
„planned_pickup_datetime“: „${row.get(„planned_pickup_datetime“)!}“,
„departure_country“: „DE“,
„departure_country_customs_id“: „${row.get(„country_customs_id“)!}“
„arrival_country_customs_id“: „${row.get(„arrival_customs_id“)!}“
„net_weight“: 0.5,
„gross_weight“: 1,
„weight_um“: „K“,
„departure_country_currency“: „EUR“,
„consignment_id“: „“,
„packaging“: „Paperboard Box“,
„reference_number“: „${row.get(„Order-ID“)!}“,
„is_return“: false,
„parent_container“: „“,
„arrival_country_currency“: „CHF“,
„recipient“: {
„first_name“: „${row.get(„L_Vorname“)!}“,
„last_name“: „${row.get(„L_Nachname“)!}“,
„address“: „${row.get(„L_Strasse“)!}“,
„city“: „${row.get(„L_Ort“)!}“,
„zip_code“: „${row.get(„L_PLZ“)!}“,
„country“: „${row.get(„L_Land“)!}“,
„company_name“: „${row.get(„L_Firma“)!}“,
„address_details“: „${row.get(„L_AdressZusatz“)!}“,
„phone“: „${row.get(„L_Phone“)!}“,
„email“: „${row.get(„L_EMail“)!}“
},
<#assign orderItems>
<#list row.children() as ch>
{
„id“: ${ch[‚ID‘]!},
„country_of_origin“: „${ch[‚Herkunftland‘]!}“,
„departure_country_description“: „${ch[‚Artikel Name‘]!}“,
„language_departure_country_description“: „de“,
„preferential_code“: „2“,
„departure_country_tariff_number“: „${ch[‚TARIC-Code‘]!}“,
„arrival_country_description“: „${ch[‚Artikel Name‘]!}“,
„language_arrival_country_description“: „de“,
„arrival_country_tariff_number“: „${ch[‚TARIC-Code-ch‘]!}“,
„qty“: ${ch[‚Artikel-Menge‘]!},
„weight_um“: „K“,
„upc_code“: „${ch[‚upc_code‘]!}“,
„qty_um“: „NAR“,
„weight“: ${ch[‚Artikel_Gewicht‘]!},
„total_net_weight“: ${ch[‚Versand_Gewicht‘]!},
„net_value“: ${ch[‚net_value‘]!},
„total_net_value“: ${ch[‚total_net_value‘]!},
„url“: „${ch[‚url‘]!}“,
„brand“: „${ch[‚brand‘]!}“,
„color“: „${ch[‚color‘]!}“,
„category“: „${ch[‚category‘]!}“,
„image_url“: „${ch[‚image_url‘]!}“,
„language_code“: „${ch[‚language_code‘]!}“,
„sales_value“: ${ch[‚sales_value‘]!},
„sales_value_total“: ${ch[‚sales_value_total‘]!},
„vat_tariff“: „“,
„article_id“: „${ch[‚Artikel-ID‘]!}“
},
</#list>

</#assign>
„skus“: [
${orderItems!?trim?remove_ending(„,“)}
]
}

                    </#assign> 
    </#list>               
           ${orders!?trim?remove_ending(",")}

Hallo Webgeier,

hattest du schonmal probiert dein generiertes Payload dir über einen TextHTMLWriter anzeigen zu lassen? Was kommt da raus?
Hast du das mal per Postman manuell gegen die API gejagt?

Ich bin mir hier nicht zu hundert Prozent sicher, aber nach meinem Verständnis ist die äußere Loop mit
<#list spreadsheet@SearchMasterDatastore_271.getRows() as row> nicht notwendig.
Statt dessen kannst du eigentlich direkt auf den verknüpften Spreadsheet zugreifen in dem du direkt die Spalte aufrufst. Beispiel:
„reference_number“: „${Order-ID}“,

Ob du dann noch auf die Children zugreifen kannst müsstest du dann einmal ausprobieren.
Das kann ich leider akut nicht sagen.

Für Fälle in denen du eine master → child Struktur durchlaufen musst, hätte ich einen alternativen Ansatz.
Anstatt direkt an den SearchDatastore mit dem UrlDownloadStep zu gehen, würde ich einen Mapper dazwischen hängen.
Dafür aktivierst du im SearchDatastore Step die Ausgabe von Children.
Im Mapper baust du dir dann dein orderItemsJson in einer separaten Spalte zusammen.
Das machst du idealerweise nur für deine Child Zeilen, also die, die einen master identifier besitzen.
Der Code im Wert-Feld hierfür würde wie folgt aussehen:

<#if master_identifier != "">
{
"id" : "${ID}",
"country_of_origin": "${Herkunftsland}",
...
}
</#if>

Gruppiere darauf hin Master und Child Zeilen zusammen und lasse nur nicht leere Werte anzeigen.
Setze die Aggregatfunktion auf Nichtleere Werte anzeigen und den Trenner auf Komma.

Jetzt solltest du pro Zeile eine Order haben die du dann im SpreadSheetUrlDownload verwenden kannst.
Hier kannst du dann, wie oben beschrieben, ohne weitere loops zu verwenden auf alle benötigten Informationen, inklusive ItemsJson, zugreifen.

Ich hoffe das hat dir weiter geholfen.

Viele Grüße
Stefan

1 Like

Hallo, vielen Dank für Deine Hilfe.
<#list spreadsheet@SearchMasterDatastore_271.getRows() as row> scheint das Problem tasächlich gewesen zu sein. Ich habe es entfernt und es funktioniert.

Gruß S. Geier