Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Video Querverweis eingefügt

...

Ein Spreadsheet ist gedanklich wie eine Excel-Tabelle mit Spalten und Zeilen und stellt das zentrales Element und Bindeglied zwischen Steps in Synesty Studio dar. So können z.B. Daten eines Spreadsheets in einen Datastore eingefügt oder in einer CSV Datei gespeichert werden.
Der wichtigste Step in diesem Zusammenhang ist der Mapper SpreadsheetMapper (kurz Mapper), womit sich Spreadsheets an die eigenen Bedürfnisse anpassen lassen. Man kann damit z.B. Spalten umbenennen, entfernen und Funktionen anwenden. Selbst WENN-DANN Logik kann auf Spalten angewendet werden, um diese zu manipulieren. 

...

Die Abbildung zeigt, wie man mit dem genannten Mapper SpreadsheetMapper die Spalten bearbeiten kann. 

...

Section


Column
width70%
Daten aus der Quelle einfügen

Sie können mit dieser Option, ähnlich wie mit dem "Quelle" Feld (2.) auf jede Spalte der Quelldatei zugreifen. Anders als in 2. können Sie jedoch mehrere Werte, anstatt einer einzigen, hinzufügen.


Expand
titleKlicken Sie hier, um ein Beispiel anzuzeigen

Ausgangslage:

Sie haben in Ihrer Quelldatei eine Preisspalte "price" mit einem nummerischen Wert und eine Währungsspalte "pricecurrency".

Ziel:

Das Zielsystem erwartet eine einzige Spalte "preis", welche sowohl die Währung als auch den Preis beinhaltet. ( z.B. EUR_99.95 )

Vorgehen:

Nachdem Sie die Quelldatei in Synesty Studio geladen und diese als Input in den Step "Mapper SpreadsheetMapper" geladen haben, legen Sie eine neue Spalte mit dem Titel (1.) "preis" an, danach klicken auf den "+" Button neben den Feld "Wert".

In dem erscheinenden Fenster, wählen Sie die Quellspalte "pricecurrency", anschließend wird das Feld "Wert" befüllt. Danach wird über die selbe Vorgehensweise die Spalte "price" hinzugefügt. Das Feld "Wert" hat nun den Inhalt ${pricecurrency}${price}. Die Daten (4.) der Spalte haben nun diese Form "EUR99.95"

Um das vorgegebene Trennzeichen " " einzufügen, wird dieses Zeichen lediglich zwischen die beiden Werte eingetragen. Somit ergibt sich als Resultat im "Wert" Feld: ${pricecurrency} ${price}

Info

Über den Button ausgewählte (dynamische) Werte, werden automatisch in die Freemarker Syntax übersetzt. Dabei werden die Werte wie "Spaltenname" in einem Container ${} eingeschlossen. Alle festen Werte, müssen außerhalb dieses Containers eingefügt werden.




Column
width30%


Info
titleHilfsvariablen

Neben den Quellspalten können Sie hier auch noch zusätzliche Hilfsvariablen einfügen wie z.B.:

  • Zeilennummer (beginnend bei 1)
  • Leerwert (ein leerer String)



...

Section


Column
width60%
Ergebnisse aus Parent-Zeile einfügen

Diese Funktion funktioniert nur bei 2-stufigen Spreadsheets wie z.B. bei Datastore-Artikel mit Varianten oder Aufträge mit Auftragspositionen. Diese Spreadsheets haben einen 2-stufigen Aufbau, bei dem die erste Zeile (die sog. Parent-Zeile) z.B. Auftragskopfdaten enthält und darauf folgende Zeilen die Auftragspositionen (die sog. Kind-Zeilen) enthalten.

 Wenn man nun in den Auftrags-Positions-Zeilen (Varianten-Zeilen) Auftragskopfdaten (Parent-Zeile) anzeigen will, kann man das mit der ${parent['columnName']} machen.

Info

Hinweis: Voraussetzung für diese Funktion ist ein Spreadsheet, in dem es Varianten-Zeilen gibt, die mit einer Parent-Zeile verknüpft sind.
Bisher unterstützen dies nur wenige Steps z.B. SearchDatastore, PlentyMarketsGetItemsBase, PlentyMarketsSearchOrders und PlentyMarketsGetReorders. Die meisten Spreadsheets sind hingegen eher flach, und haben nicht diese Parent-Child-Verknüpfung (z.B. aus einem SpreadsheetCSVReader).

Wenn ein Spreadsheet Parent-Child Zeilen besitzt, dann erkennen Sie dies im Mapper SpreadsheetMapper am Tab "aus Parent-Zeile" (siehe Screenshot rechts)



Expand
titleKlicken Sie hier, um ein Beispiel anzuzeigen

Ausgangslage:

Sie haben einen Flow, der Auftragsdaten aus plentymarkets holt. Diese Daten kommen in einem 2-stufigen Spreadsheet mit Auftragskopfdaten und Auftragspositionen.
 

Ziel:

Sie wollen in den Positionszeilen die Felder aus der Liefer- und Rechnungsanschrift ausgeben. Diese Werte stehen aber nur in der Zeile des Auftragskopfes (Parent-Zeile).
 

Vorgehen:

Klicken Sie in das Wert-Feld der Spalte, wo der Wert angezeigt werden soll und klicken sie auf den Plus-Button. Sie sollten das Tab "aus Parent-Zeile" mit allen Spalten sehen. Klicken Sie z.B. auf die Spalte "OrderCustomerAddressCity".

Daraufhin sollte im Wert-Feld ${parent["OrderCustomerAddressCity"]!} stehen. Da die Auftragszeile selbst keine Parent-Zeile hat, sollten sie das Wert Feld noch wie folgt abändern, damit keine Fehlermeldung erscheint.

Code Block
<#if parent??>${parent["OrderCustomerAddressCity"]!}<#else>${OrderCustomerAddressCity}</#if>

Ergebnis:

In den Auftragspositionen stehen jetzt auch Daten aus der Parent-Zeile mit den Auftragskopfdaten.
 





Column
width40%



...

Section


Column
width60%
Auf Varianten-Zeilen zugreifen
Info

Diese Funktion steht nur bei Spreadsheets des Steps SearchDatastore zur Verfügung.

Wenn man Ergebnisse aus einem Datastore verarbeitet, der Parent- und Varianten Datensätze enthält, dann gibt es die Möglichkeit, innerhalb der Parent-Zeile auch auf die Varianten-Zeilen zuzugreifen.
Zum Beispiel kann man damit die Anzahl der Varianten-Zeilen prüfen oder in Abhängigkeit der Inhalte bestimmter Varianten-Zeile in der Parent-Zeile reagieren 


Beispiel: Ausgabe in Parent-Zeile nur, wenn es mindestens eine Varianten-Zeile gibt

Code Block
<#if (row.variants()?? && row.variants()?size > 0)>Diese Parentzeile hat ${row.variants()?size} Variantenzeilen<#else>Keine Variantenzeile vorhanden</#if>

Beispiel: In Parent-Zeile alle Varianten-Artikelnummern ausgeben

Code Block
<#if (row.variants()?? && row.variants()?size > 0)>
 
  <#list row.variants() as v>
    ${v.get('artikelnummer')!} -
  </#list>
 
</#if>

In den meisten Fällen setzt man den Filter im SearchDatastore Parents/Varianten Filter="Nur Parents", damit die Varianten-Zeilen im Ausgabe-Spreadsheet erstmal ausgeblendet werden, man aber dann im Skript per row.variants() darauf zugreift und eine eigene Ausgabe erzeugt. 


...

Section


Column
width60%
Auf Kind-Zeilen (children) zugreifen
Info

Diese Funktion steht nur bei Spreadsheets des Steps SearchDatastore zur Verfügung.

Wenn man Ergebnisse aus einem Master-Datastore verarbeitet, der mit einem Child-Datastore verknüpft ist, dann gibt es die Möglichkeit innerhalb der Master-Zeile auch auf die Zeilen des Child-Datastores zuzugreifen, den sog. children.
Zum Beispiel kann man damit die Anzahl der Children prüfen oder in Abhängigkeit der Inhalte bestimmter Children in der Master-Zeile reagieren 


Beispiel: Ausgabe in Master-Zeile nur, wenn es mindestens eine Child-Zeile gibt

Code Block
<#if (row.children()?? && row.children()?size > 0)>Diese Masterzeile hat ${row.children()?size} Children<#else>Keine Children vorhanden</#if>

Beispiel: In Master-Zeile alle Children-Artikelnummern ausgeben

Code Block
<#if (row.children()?? && row.children()?size > 0)>
 
  <#list row.children() as c>
    ${c.get('artikelnummer')!} -
  </#list>
 
</#if>

In den meisten Fällen setzt man den Filter im SearchDatastore Children ausgeben="Children nicht ausgeben", damit die Children-Zeilen im Ausgabe-Spreadsheet erstmal ausgeblendet werden, man aber dann im Skript per row.children() darauf zugreift und eine eigene Ausgabe erzeugt.


...

Section


Column
width60%

Querverweis

Mit einem Querverweis (in Excel auch bekannt als SVERWEIS) können Sie einen Wert aus einem Datastore anhand eines Schlüssels in ein Spreadsheet einfügen. Als Schlüssel zum "nachschlagen" kann eine der drei identifier-Spalten (identifier, identifier2, identifier3) verwendet werden.

Man kann einen Querverweis mit folgendem SQL Befehl vergleichen:

Code Block
SELECT * FROM datastore WHERE datastorename = 'DemoDatastore' AND identifier = '123' AND folder = 'default';


  • Datastore: Aus welchem Datastore sollen Daten abgerufen werden?
  • Folder: Aus welchem Folder (Standard: 'default') sollen Daten abgerufen werden?
  • Identifier / Identifier2 / identifier3: Um eine Zeile im Datastore zu identifizieren wird die Spalte identifier, identifier2 oder identifier3 genutzt.
  • Rückgabewert bei Treffer: Geben Sie den Namen der Spalte (Field) an, aus der die Daten im Datastore geholt werden sollen.
  • Standardwert: Hier können Sie einen Wert definieren, der zurückgegeben werden soll, wenn es keinen Treffer gibt (statt "No Record found").

Info
titleVideo Tutorial

Ein Videotutorial zum Thema Querverweis findet man hier.



Info
titleHinweis zu identifier, identifier2 und identifier3

Füllen Sie nur ein einziges identifier-Feld aus. Sind mehrere identifier ausgefüllt, dann greift nur der erste "nicht leere" Wert.
Wünschen Sie eine Oder-Logik mit z.B. entweder identifier oder identifier2 dann empfehlen wir folgendes Cookbook.



Folder ignorieren

In einigen Fällen will man den Folder ignorieren. Klicken Sie dazu auf den +-Button und wählen "Folder beim Querverweis ignorieren".
Das ist z.B. dann nützlich, wenn Sie in über mehrere Folder hinweg nach EAN suchen wollen, z.B. wenn Sie nicht genau wissen, in welchem Folder sich ein bestimmter Datensatz befindet.

Warning
titleAchtung bei doppelten Datensätzen

Achtung: Sollte es Datensätze geben, die über mehrere Folder hinweg den gleichen identifier (oder identifier2 oder identifier3) besitzen, dann liefert der Querverweis nur den ersten gefundenen. Das Ergebnis ist in diesem Fall zufällig. Das sollten Sie beachten, wenn es ID-Dopplungen gibt.



Expand
titleKlicken Sie hier, um ein Beispiel anzuzeigen
Querverweis mit festem Wert

Fester Wert bedeutet hier, das wir 'hart' mit dem Wert 12345 einen Querverweis (manchmal auch Lookup genannt) auf die Identifier2-Spalte des DemoDatastore machen.
Über Datastore, Folder und Identifier / Identifier2 wird die entsprechende Zeile lokalisiert und über Field wird das auszugebende Feld ausgewählt. 


Querverweis mit dynamischen Wert aus aktueller Zeile

Dynamisch bedeutet in diesem Fall, dass anstatt eines festen 'harten' Wertes einen dynamisch Wert aus der jeweils aktuellen Zeile nutzt.
In diesem Beispiel wollen wir einen Querverweis immer über die aktuelle Spalte 'identifier' machen, um uns anhand dieser ID den Wert aus der entsprechenden Spalte im DemoDatastore zu holen.  



Column
width40%

 


...

Info
titleHinweis zu Variablennamen

Hinweis: Der Variablenname output@SpreadsheetUrlDownload_2 ist nur ein Beispiel. Die Zahl am Ende (in diesem Fall _2) und unterscheidet sich je nach Step und Position des Steps. Über den Pfeil unter den Steps kommen Sie an den korrekten Variablenname.


Hinweis zum Unterschied von Variablennamen im SpreadsheetMapper und anderen Steps:

Es ist wichtig, dass man Variablen immer mit dem Plus-Button einfügt. Denn im Mapper SpreadsheetMapper unterscheidet sich die Schreibweise von Variablen, z.B. im Vergleich zum TextHTMLWriter Step.
Beim SpreadsheetMapper steht bei Variablen, die aus vorherigen Steps oder Flow-Variablen kommen noch das Prefix "meta.". Im TextHTMLWriter ist diese Prefix hingegen nicht notwendig.
Der Plus-Button beachtet diese Dinge und fügt immer kontext-abhängig den korrekten Variablennamen ein - also mit- oder ohne .meta. 

und dann 

Info
titleWozu dient das meta-Prefix?

Durch das Prefix "meta." werden Namenskollisionen verhindert und zwar zwischen Quellspalten und Flow-Variablen. Im SpreadsheetMapper kann man auf eine Quellspalte direkt per Spaltenname zugreifen. Flow-Variablen sind ebenfalls direkt durch ihren Namen verfügbar. Würde es nun eine Flow-Variable und eine Quell-Spalte mit gleichem Namen geben, würden diese sich gegenseitig überschreiben. Durch das "meta." Prefix wird dies verhindert. Spaltennamen sind direkt ohne Prefix zugreifbar, und Flow-Variablen sowie Outputs vorheriger Steps mit "meta.".  Ein ähnliches Konzept gibt es auch im SpreadsheetUrlDownload.




...