Spreadsheet List als Input für SpreadsheetUrlDownload

Hi zusammen :slight_smile:

laut der Beschreibung vom SpreadsheetUrlDownload Step ist es möglich, dort auch eine Spreadsheet List als Input zu übergeben.


Laut Doku funktioniert der Step nur für einzelne Spreadsheets.

Mein USE Case ist der folgende:
Ich kriege eine Liste mit verschiedenen Preislisten Namen, SKUs und Preisen.
Diese möchte ich dann über den „Splitter“ Tag anhand der Namens Spalte in ein Spreadsheet pro Preisliste aufteilen und diese dann via SpreadsheetURLDownload verschicken (Shopify GraphQL priceListFixedPricesAdd). Hier habe ich eine Beschränkung von 250 Preisen pro Request,
Bildschirm­foto 2023-07-13 um 12.35.41
weshalb ich dann über eine 250er Batchsize die einzelnen Spreadsheets hochladen möchte.
Ich brauche diese Trennung, um zu verhindern, dass z.B. am Ende nur noch 50 Zeilen von Preisliste A geschickt werden und die restlichen 200 Zeilen dann von Preisliste B aufgefüllt werden.
Hat hier jemand eine Idee, wie ich das umsetzen kann, ohne eine SpreadsheetList als Input für den SpreadsheetUrlDownload?

Danke und liebe Grüße
Tim

Hallo Tim,

die Beschreibung des SpreadsheetUrlDownload Steps ist leider nicht korrekt. Der Step unterstützt nur SPREADSHEET und keine SPREADSHEETLIST. Wir korrigieren die Beschreibung des Steps.

Der einfache Fall: Anzahl der Preislisten bekannt

Wenn du die Anzahl der Preislisten kennst, kannst du natürlich pro Preisliste ein Filter Step (für die Filterung der Zeilen der jeweiligen Preisliste) und pro Preisliste einen SpreadsheetUrlDownload verwenden.

Der schwierigere Fall: Anzahl der Preislisten unbekannt

In diesem Fall könntest du dir die queries für den SpreadsheetUrlDownload vorab in einem TextHTMLWriterMultiOutput Step zusammenbauen.

Im template des TextHTMLWriterMultiOutput „läufst“ du über den Output des SpreadsheetSplitter Steps und erzeugst nach 250 Zeilen oder am Ende des Spreadsheets eine Datei (einfache CSV Datei mit einer Spalte).

Beispiel template

Die query hab ich nicht getestet, Spaltenamen und SpreadsheetSplitter outputkey (spreadsheetList@SpreadsheetSplitter_5) musst du anpassen.

<#assign maxBatchSize = 250>
<#assign queryStart = "body\nmutation { priceListFixedPricesAdd("  />
<#assign queryEnd = "] ){ prices { variant{ id }, price{ amount, currencyCode } } } } " />
<#assign requestNum = 0 />

<#list spreadsheetList@SpreadsheetSplitter_5 as priceList>
  <#assign numberRows = 0>

  <#list priceList.getRows() as row>
    <#if fileContent == "">
      <#assign fileContent>${queryStart}priceListId: ${row.get("priceList")}, prices : [ </#assign>
    </#if>
    
    <#assign request> { variantId: ${row.get("variantId")}, price:  { amount: ${row.get("price")}, currencyCode: EUR} }<#sep>,</#assign>
                                                
    <#assign numberRows += 1>
    <#assign fileContent += request >

    <#if (numberRows >= maxBatchSize)>
          <#assign fileContent += queryEnd>
          <#assign requestNum += 1 />
          ${output(fileContent, ("request_" + requestNum + ".csv"), "UTF-8")}
          <#assign fileContent = "" />
         <#assign numberRows = 0>
    </#if>

  </#list>
  
  <#assign fileContent += queryEnd >
  <#assign requestNum += 1 />

  ${output(fileContent, ("request_" + requestNum + ".csv"), "UTF-8")}
  <#assign fileContent = "" />
  
</#list>

Als Ergebnis erhälts du dann mehrere CSV Dateien die du mit dem CSVReader Step einlesen kannst.

Dieses Spreadsheet kannst du dann als input im SpreadsheetUrlDownload Step verwenden (mit batchSize=1 und requestBody = ${body} )

VG Torsten

Edit: Screenshot vom Flow

1 Like

Hi Torsten,

tausend Dank für die beiden Ansätze, insbesondere für den zweiten Fall - das hilft mir sehr weiter!

Liebe Grüße
Tim

1 Like