Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Beispiel Export Auftragsdaten als XML ergänzt

...

Um mit Master-Child zu arbeiten sind 2 Datastores notwendig, und zwar ein Master-Datastore und ein Child-Datastore.

Image RemovedImage Added Image RemovedImage Added


In der Datastore Ansicht, werden Master-Child Datastores eingerückt dargestellt. 

Image RemovedImage Added

Bestellpositionen ist der Child-Datastore vom Master-Datastore Bestellungen. 

...

Ein Flow, der Master-Spreadsheet und Child-Spreadsheet importiert hat meistens folgenden Aufbau:

Image RemovedImage Added

  • über 2 SpreadsheetFilter wird ein Input-Spreadsheet (beliebige Quelle) in Master-Datensätze und Child-Datensätze aufgeteilt. 
  • die beiden SpreadsheetDatastoreWriter Steps schreiben dann jeweils die Ergebnisse der SpreadsheetFilter Steps in den Datastore
    • das Master-Spreadsheet in den Master-Datastore, und das Child-Spreadsheet in den Child-Datastore

...

Um das zu erreichen, nutzt man man die Querverweis-Funktion im SpreadsheetMapper. (Hinweis für Excel-Nutzer: Der Querverweis in Synesty Studio ist vergleichbar mit einem SVerweis in Excel)

Image RemovedImage Added

Die folgende Spaltenkonfiguration liest sich wie folgt:

...

Um alle Zeilen zu entfernen, in denen in einer Spalte der Wert No Record found des Querverweises auftaucht, benutzt man den SpreadsheetFilter.

Image RemovedImage Added

Ein SpreadsheetFilter mit dieser Filterbedinung lässt alle Zeilen durch, die im identifier nicht "No Record found" enthalten - mit anderen Worten: entferne alle Zeilen, in denen im identifier "No Record found" steht. 

...

Datastores verfügen auch über eine manuelle Importfunktion für CSV- oder Exceldateien. Um eine Datei zu Importieren gehen Sie in den gewünschten Datastore und wählen im Dropdown Menü des "Neuer Datensatz" Buttons die Option "Datei importieren" .

Image RemovedImage Added

Wählen Sie anschließen die Datei aus und klicken den "Upload und Vorschau" Button. Nachdem die Datei verarbeitet wurden gelangen Sie in die Transformy Ansicht, mit allen Spalten des Datastores. Sie können nun die Quell-Spalten aus der Datei den entsprechenden Spalten des Datastores zuordnen. Über den Image RemovedImage AddedButton starten Sie den Import der Datensätze.

...

Info
titleHierarchische Daten mit Zugriff auf Parent / Master Zeile exportieren

Wir empfehlen auch den Abschnitt Spreadsheets - Auf Relationen zugreifen, der beschreibt, wie man beim Export hierarchischer Daten auf die Parent- bzw. Master-Zeile zugreift. Das ist nützlich wenn man z.B. Auftragspositionen mit Daten aus dem Auftragskopf anreichern möchte.


Beispiel Export Auftragsdaten als XML

Ein typisches Beispiel sind Auftragsdaten (Bestellungen) und den dazugehörigen Auftragspositionen (bzw. Bestellpositionen).

Das Skript-Beispiel geht von folgendem Szenario aus:

  • Daten kommen aus einem SearchDatastore Step mit showChildren=false (das ist wichtig: Aus dem SearchDatastore dürfen nur die Auftragskopfdaten raus kommen. Auf die Auftragspositionen kann man trotzdem zugreifen per zweiter Schleife row.children()) Das klingt zwar etwas unlogisch, liegt aber daran, dass man hier Spreadsheet und Freemarker Script kombiniert. Im Spreadsheet (das was man in der Vorschau sieht), darf nur die Kopfzeile rauskommen. Per Skript kommt man dann aber auch an die Children-Zeilen, um diese auszugeben). 
  • Die Auftragsdaten sind in 2 Datastores abgelegt, die als Master-Child Datastores verknüft sind


Code Block
<?xml version="1.0" encoding="UTF-8"?>  
<PurchaseOrders>

<#list spreadsheet@SearchMasterDatastore_1.getRows() as row> 

<#if (row.children()?? && row.children()?size > 0) >
        <Name>${row.get("shipping_address_given_name")!} ${row.get("shipping_address_family_name")!}</Name>  
        <Street>${row.get("shipping_address_address1")!}</Street>  
        <City>${row.get("shipping_address_city")!}</City>  
        <Zip>${row.get("shipping_address_zip")!}</Zip>  
        <Country>${row.get("shipping_address_country")!}</Country>  
    <Items>

    <#list row.children() as ch>

       <Item PartNumber="${ch['line_items_sku']!}">
          <ProductName><![CDATA[${ch['line_items_title']!}]]></ProductName>
          <Quantity>${ch['line_items_quantity']!}</Quantity>
          <Price>${ch['line_items_price']!}</Price>
          <Currency>${row.get("currency")!}</Currency>
       </Item>
   </#list>

    </Items>
 </PurchaseOrder>
</#if>

</#list>
</PurchaseOrders> 

Das entscheidende sind die beiden verschachtelten Schleifen (<#list>).

  • <#list spreadsheet@SearchMasterDatastore_1.getRows() as row> iteriert über die Daten des Master-Datastore, der die Auftragskopfdaten enthält
  • <#list row.children() as ch> greift auf die Children-Zeilen, also die Auftragspositionen der jeweiligen Kopfzeile zu und iteriert darüber.

Das komplette Beispiel findet sich in der Vorlage Hierarchische XML oder JSON Datei aus Spreadsheet erzeugen (komplexeres Beispiel)