Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

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 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 SpreadsheetMapper die Spalten bearbeiten kann. 

...

Damit können Sie z.B. eine Spalte aus verschiedenen anderen Spalten zusammenbauen, um z.B. einen Produkttitel dynamisch aus den Spalten Marke, Produktname, Farbe und Größe zu generieren. 

 


Verfügbare Daten für das Wert-Feld: (3a)

Nach Klick auf den  Button, stehen Ihnen alle verfügbaren Daten zum befüllen der Wert Spalte zur Verfügung.
Diese werden bei Auswahl, automatisch in die benötigte Freemarker Syntax umgeformt.

 

 


...


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 "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 vorherigen Spalten einfügen

Hier können Sie aus allen Werten, welche links der aktuellen Spalte stehen, wählen. D.h. Sie können einen bereits angepassten Wert wieder verwenden.
Die Variablen einer Ergebnisspalte erkennen sie am Ausdruck result wie z.B.

Code Block
${result['preis']}


Expand
titleKlicken Sie hier, um ein Beispiel anzuzeigen

Ausgangslage:

Sie haben die selbe Quelldatei wie im obigen Beispiel und haben schon die oben beschriebene Spalte "preis" erstellt (EUR 99.95). Es existiert in der Quelldatei ebenfalls eine Spalte "versandkosten".

Ziel:

Das Zielsystem erwartet eine Spalte "preis_+_versandkosten" mit Währung, Preis und Versandkosten. ( z.B. EUR 99.95 + 6.95 )

Vorgehen:

Legen Sie eine neue Spalte mit dem Titel (1.) "preis_+_versandkosten" hinter der Spalte "preis" an. Danach klicken Sie auf den "+" Button neben dem Feld "Wert". Gehen Sie in dem neuen Fenster auf den Reiter "aus Ergebnisspalte" und wählen die Spalte "preis" aus. Das Feld "Wert" ist nun mit "${result['preis']}" gefüllt. Nun haben Sie den identischen Wert aus der vorher selbst erstellten Spalte "preis". Um die Versandkosten hinzuzufügen klicken Sie erneut auf "+" und wählen die Quellspalte "versandkosten" aus. Abschließend fügen Sie das Trennzeichen " + " zwischen den beiden Spaltenwerten ein.

Somit ergibt sich als Resultat im Feld "Wert": ${result['preis']} + ${versandkosten}



Column
width40%

 

 



...


Section


Column
width60%
Meta-Daten einfügen

 


Sie haben die Möglichkeit Meta-Daten wie z.B. die aktuelle Zeit beim Ausführen des Flows (prop_actualruntime) oder den Zeitpunkt der letzten Ausführung des Flows (prop_lastruntime) in eine Spalte einzufügen. Dies ermöglicht Ihnen, hochdynamische Spalten zu erzeugen.

 


Expand
titleKlicken Sie hier, um ein Beispiel anzuzeigen

Ausgangslage:

Sie haben eine Quelldateien mit mehreren Spalten.

Ziel:

Das Zielsystem erwartet eine Spalte "uebertragen" mit den aktuellen Datum. (z.B. Feb 6, 2014 )

Vorgehen:

Legen Sie eine neue Spalte mit den Titel (1.) "uebertragen" an. Klicken Sie auf den "+" Button und navigieren Sie in den auftauchenden Fenster auf den Reiter "aus Meta-Daten". Hier wählen Sie "prop.actualruntime" aus, danach wird das Feld "Wert" mit ${meta.prop_actualruntime!} gefüllt.

Da dieser Wert mehrere Informationen wie z.B. Zeit, Datum, Jahr etc. enthält, müssen Sie zum Schluss noch definieren, welchen Wert Sie benötigen. Fügen Sie dazu im Feld "Wert" hinter dem "!" folgende Anweisung ein "?date" ein.

Somit ergibt das Resultat im Feld "Wert": ${meta.prop_actualruntime!?date}

Note

Achtung: Bei jedem Datumswert muss definiert werden, was angezeigt werden soll. Dazu haben Sie folgende Optionen:

?date - liefert das Datum

?time - liefert die Zeit

?datetime - liefert das Datum gefolgt von der Zeit




Column
width40%


...

Section


Column
width60%
Ergebnisse aus Parent-Zeile einfügen

Diese Funktion funktioniert nur bei 2-stufigen Spreadsheets wie z.B. bei Datasore-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 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>



...

Section


Column
width60%
Ergebnisse aus Master-Zeile

Analog zur Parent-Zeile gibt es die Möglichkeit auch auf den Master-Datensatz zuzugreifen. Ein Master-Datensatz gibt es allerdings nur im Kontext von Datastores, da es auch nur dort Master-Child-Beziehungen gibt.

Info

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

 


Beispiel: Auf identifier-Spalte der Master-Zeile zugreifen

Code Block
${master['identifier']!}



...

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>



...

Diese Funktionen gliedern sich in drei Teile, wie man im Screenshot sieht. 

 


Freemarker Built-Ins

Freemarker Built-Ins sind Funktionen, die bereits im Kern in die Freemarker-Sprache integriert sind und auch in der offiziellen Freemarker-Dokumentation erklärt sind. Die aufgeführten Funktionen sind nur eine Auswahl der häufig verwendeten Funktionen und sind nicht vollständig. 

...

FunktionBeschreibungBeispiel
if elseFügt eine einfache WENN-DANN Bedingung ein.


Code Block
<#if column == "value1">foo<#else>bar</#if>


if elseif elseFügt eine erweiterte WENN-DANN Bedingung mit einer Abfrage für 3 Bedingungen ein.


Code Block
<#if column == "value1">foo<#elseif column == "value2">foo2<#elseif column == "value3">bar<#else></#if>


listBeispiel-Code, um über eine Liste zu iterieren. Mehr zu sequences.


Code Block
<#assign meineListe = "1,2,3,4"?split(",") /><#list meineListe as item>${item!}</#list>


replaceErsetzt Teile einer Zeichenkette.


Code Block
${meineSpalte!?replace("wort1","wort2")!}

Ersetzt wort1 mit wort2.

numberWandelt einen String (Text) in eine Zahl um.
Wichtig: Es muss ein Punkt als Dezimaltrenner vorhanden sein.


Code Block
${spalteMitZahl!?number + 5}

Wandelt Wert einer Spalte in eine Zahl und addiert 5 darauf.

 


Falls die Zahl noch keinen Punkt als Dezimaltrenner verwendet, dann ersetzen Sie erst das Komma durch einen Punkt:

Code Block
${spalteMitZahl!?replace(",",".")?number + 5}


lowercaseWandelt Text komplett in Kleinbuchstaben.


Code Block
${column!?lower_case!}


uppercaseWandelt Text komplett in Großbuchstaben.


Code Block
${column!?upper_case!}


capitalizeSchreibt den ersten Buchstaben eines Wortes groß.


Code Block
${column!?capitalize!}


trimEntfernt führende und endende Leerzeichen.


Code Block
${column!?trim!}


containsPrüft ob ein Text eine Teilzeichenkette enthält.


Code Block
<#if column!?contains("substring")>foo<#else>bar</#if>


index_ofGibt die Position einer Teilzeichenkette in einem Text zurück.


Code Block
${column!?index_of("substring")!}


last_index_ofGibt die letzte Position einer Teilzeichenkette in einem Text zurück.


Code Block
${column!?last_index_of("substring")!}

 



Template Funktionen

Diese Funktionen sind nicht Teil von Freemarker, sondern wurden von Synesty extra eingebaut. Es handelt sich um nützliche Helfer-Funktionen für einige Spezialfälle oder als Ersatz für fehlende Funktionen.
Sie können im SpreadsheetMapper über das Schraubenschlüssel-Icon / Template Funktionen erreicht werden.

 

 


Eine Übersicht und Erklärung aller Template-Funktionen mit Beispielen finden Sie hier:

 


Bedingungs-Generator

Im Abschnitt Freemarker-Build Ins (und auch im Abschnitt Scripting) wurde erklärt, wie man man WENN-DANN Bedingungen mit der Freemarker-Syntax formulieren kann. 
Leider ist das etwas schwerfällig, vor allem für neue Nutzer. 

...

Ein Klick auf den "X" Button entfernt eine Spalte aus dem SpreadSheet.

 


Section


Column
width40%

 



Einstellungen

Allgemeine Einstellungen

...

Diese werden im Folgenden genauer erläutert.

 


Section


Column
width60%

Suchen & Ersetzen

Diese Funktion erlaubt es Zeichen(ketten) zu ersetzen. Sie können beliebig viele Regeln durch Klick auf "Hinzufügen" definieren.

Info
titleHinweis

Sie können im Suchmuster auch einen sog. regulärer Ausdruck verwenden (engl. regular expressions), hierfür aktivieren Sie bitte die Checkbox.



Column
width40%

 

 



...


Section


Column
width60%

Rechenoperation

Rechenoperationen eignen sich für Spalten mit numerischen Daten.

Folgende Rechenoperatoren stehen zur Verfügung

  • Addition +
  • Subtraktion -
  • Multiplikation *
  • Division /
Info
titleDezimaltrenner

Bei mathematischen Funktionen wird immer ein Punkt als Dezimaltrenner erwartet. D.h. falls Zahlen mit Komma als Dezimaltrenner existieren, muss das Komma erst durch einen Punkt ersetzt werden. Eine Möglichkeit wäre dazu, die vorherige Suchen/Ersetzen Funktion zu benutzen oder im Wert-Feld mit Freemarker Komma durch Punkt zu ersetzen:

Code Block
titleBeispiel: Komma durch Punkt mit Freemarker ersetzen
${OrderTotalGross?replace(",",".")?number + OrderShippingCosts?replace(",",".")?number}




Column
width40%

 

 

 



...


Section


Column
width60%

Runden

Mit der Funktion Runden, haben Sie die Möglichkeit numerische Werte einer Spalte anzupassen.

  • Runden - Die Runden Funktion ermöglicht die Rundung auf eine feste Anzahl von Nachkommastellen oder eine Rundung auf einen festen Rundungswert.

 

Nachfolgend finden sie einige Beispiele zu den verfügbaren Rundungsoperationen

 

Note

Sie können bei der Rundungsfunktion entweder einen Rundungswert definieren oder auf die zu rundenden Stellen angeben. Wenn sie beide Möglichkeiten nutzen möchten, können sie mit (Zwischen-)Ergebnis Spalten arbeiten.

 

AusgangswertRundungsmodusRundungswertStellenErgebnis
182.472CEILING
(Aufrunden)
0.9-182.9
182.472CEILING0.1-183.1
182.472CEILING5-185
182.472CEILING0-190
182.472CEILING00-200
182.472CEILING-2182.48
182.472CEILING-1182.5
182.472CEILING-0183
182.472FLOOR
(Abrunden) 
0.9-181.9
182.472FLOOR0.1-182.1
182.472FLOOR5-175
182.472FLOOR0-180
182.472FLOOR00-100
182.472FLOOR-2182.47
182.472FLOOR-1182.4
182.472FLOOR-0182
182.472HALF_UP
(ab >= 5 aufrunden)
0.9-181.9
182.572HALF_UP0.9-182.9
182.472HALF_UP0.1-182.1
182.572HALF_UP0.1-183.1
182.472HALF_UP5-175
182.472HALF_UP0-180
182.472HALF_UP00-200
182.472HALF_UP-2182.47
182.475HALF_UP-2182.48
182.472HALF_UP-1182.5
182.472HALF_UP-0182
182.472

HALF_DOWN
(ab > 5 aufrunden)

0.9-181.9
182.500HALF_DOWN0.9-181.9
182.572HALF_DOWN0.9-182.9
182.472HALF_DOWN0.1-182.1
182.672HALF_DOWN0.1-183.1
182.472HALF_DOWN5-175
182.472HALF_DOWN0-180
182.472HALF_DOWN00-200
182.472HALF_DOWN-2182.47
182.472HALF_DOWN-1182.5
182.472HALF_DOWN-0182
1.5

HALF_EVEN
(bei ungerader Ganzzahl aufrunden, bei gerade abrunden)

0.9-1.9
2.5HALF_EVEN0.9-1.9
1.5HALF_EVEN-11.5
2.5HALF_EVEN-12.5


  • Ganzzahl - diese Option führt dazu, das die Werte der Spalte auf eine Ganzzahl gerundet werden (entspricht "Abrunden, 0 Stellen")


Column
width40%

 

 

 



...


Section


Column
width60%

Datumsfunktionen

Geben Sie das vorhandene Quellformat und das gewünschte Zielformat an, um Datumswerte umzuformen.

Info

Hier finden Sie Beispiele für die Umwandlung von Timestamps.



Column
width40%

 

 

 



...


Section


Column
width60%

Querverweis

Mit einem Querverweis (in Excel auch bekannt als SVERWEIS) können Sie Daten einen Wert aus einem Datastore in  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
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%

 

 

 



...


Section


Column
width60%

Mappingset

Mit einem Mappingset können Sie einen Quellwert in einen Zielwert übersetzen - sozusagen eine "Übersetzungstabelle".

Es gibt verschiedene Arten Mappingsets zu erzeugen:

  • Default-Mappingset
  • Mappingset Builder
  • Datastore Mappingsets
Default-Mappingsets

Default-Mappingsets sind einfache Übersetzungstabellen, die manuell als Textblock gepflegt werden können.

Info
titleMappingset per Flow erweitern

Default-Mappingset können auch mit dem Step AddUpdateMappingset per Flow angelegt und automatisiert werden. Damit kann man die Pflege des Mappingsets auch automatisieren.


Mappingset Builder

Der Mappingset Builder ist ein Tool, mit dem man Mappingsets erstellen kann und zwar auf Basis von Daten in einem oder mehreren Datastores.
Hier kann man die eindeutigen Werte einer gewählten Quellspalte auf erlaubte Zielwerte mappen. Die Zielwerte kommen ebenfalls aus einer Spalte eines Datastores.

Beispiel: Eigene Kategorien auf Google-Shopping Kategorien mappen

Erstellen Sie in neues Mappingset.


Wählen Sie den Mappingset-Typ Mappingset Builder:

Dadurch gelangen Sie in den Mappingset Builder.

Als Quelle wählen Sie ihren Datastore mit Artikeldaten, in dem es eine Kategorie-Spalte gibt, die Sie auf Google Shopping mappen wollen.
Als Ziel wählen Sie einen Datastore mit den Google Shopping Kategorien (dieses Cookbook zeigt am Beispiel, wie Sie diesen Datastore erstellen können).
Als Ziel-Spalte wählen Sie die Spalte, die den zu mappenden Zielwert enthält, z.B. die ID der Google-Shopping-Kategorie.
Als Ziel-Label (optional) können Sie eine Spalte auswählen, die eine sprechende textuelle Beschreibung der Ziel-Spalte enthält. Dies dient lediglich zu Anzeigezwecken und erleichtert den Mappingprozess.

 


Klicken Sie dann auf Konfiguration starten. Dadurch werden die Daten aus den Datastores gelesen und das Mapping gestartet.

Klicken Sie auf Mappingset speichern, wenn Sie fertig sind. Dadurch wird das Mappingset und die aktuelle Konfiguration gespeichert und das erstellte Mappingset kann genutzt werden.

Datastore Mappingsets

Datastore Mappingsets sind der neueste Mappingset Typ, bei dem das Mappingset über einen Datastore gepflegt wird. D.h. Schlüssel und Wert kommen aus jeweils einer Spalte eines Datastores (im Gegensatz zu den anderen beiden Mappingset-Typen, bei denen Sie die Schlüssel-Wert Paare selbst eingeben).

Das Mappingset kann dann genau wie die anderen Mappingsets im SpreadsheetMapper auf eine oder mehrere Spalten angewendet werden (siehe weiter unten Anwendung von Mappingsets).

Wann brauche ich Datastore Mappingsets?

Datastore Mappingsets sind dann sinnvoll, wenn man die Daten gern über einen Datastore pflegen möchte, bzw. schon einen Datastore hat, in dem zwei Spalten als Schlüssel- und Wertspalten für ein Mappingset in Betracht kommen.
Datastores sind in einigen Szenarien geeigneter, da man umfangreichere Import-Möglichkeiten hat und durch den Einsatz von Foldern quasi mehrere Mappingsets über einen zentralen Datastore abbilden kann.


 

Anwendung von Mappingsets

Es gibt zwei Arten der Anwendung von Mappingsets:

  • einfache Mappingsets (d.h. einfache Übersetzung von Quell-Wert zu Ziel-Wert)

  • Bereichs-Mappingsets (Zuweisung eines Quell-Bereichs zu einem Ziel-wert z.B. "alle Preise zwischen 0 und 100 EUR bekommen 10% Rabatt")

 


Info

Wichtig: Der Quellwert ist immer der aktuell sichtbare Wert der Spalte.  

Einfaches Mappingset

Ein einfaches Mappingset ersetzt den aktuellen Wert in einen Zielwert.

Code Block
SucheBegriff1=ErsetzeDurch1 
SucheBegriff2=ErsetzeDurch2 
SucheBegriff3=ErsetzeDurch3


Funktionierendes BeispielNicht funktionierendes Beispiel

Hier ist der Wert "SucheBegriff1". Da dieser Wert auch im Mappingset auftaucht, greift die Übersetzung. Der neue übersetzte Wert ist "ErsetzeDurch1".

In diesem Beispiel klappt die Übersetzung nicht, weil vor "SucheBegriff1" noch etwas anderes steht (im Beispiel Prefix"). Dadurch wird im Mappingset kein passender Eintrag gefunden, und es wird der unübersetzte Orginalwert ausgegeben (siehe Mapping-Modus weiter unten, um dieses Verhalten zu ändern). 

 


Mehrere Werte in einer Zeile

Es ist auch möglich mehrere Werte in einer Zeile zu definieren. Das kann die Datenpflege erleichtern.
Dazu müssen die Werte auf der linken Seite des Gleichheitszeichens in doppelte eckige Klammern gesetzt werden und komma-getrennt eingegeben werden.

Code Block
titleBeispiel - Farbübersetzungen
[[inkarnat, cherry, petrol]]=rot
[[lava, rust, mandarine, aprikot]]=orange

In diesem Beispiel werden verschiedene Farbvarianten für rot und orange definiert.

Info

Es handelt sich hierbei lediglich um eine Kurzschreibweise. Die Werte innerhalb der eckigen Klammern werden im Hintergrund automatisch expandiert und in ein normales Mappingset übersetzt.  


Bereichs-Mappingset

Ein Bereichs-Mappingset hingegen funktioniert für Zahlenwerte und ermöglicht es verschiedene Zahlenbereich zu definieren. Der aktuelle Wert wird dann auf den Zielwert des entsprechenden Bereichs gemappt, zu dem er gehört.

Code Block
1-100=bis 100
100.01-1000=groesser Hundert
1000.01-10000=groesser Tausend

Um Bereichs-Mappingsets zu nutzen, muss die Option Dieses Mappingset beinhaltet Bereiche angekreuzt werden (siehe 2. Screenshot).

Anwendungsbereiche:
Wenn man eine Preiskalkulation erstellt, dann will man oft bestimmte Regeln auf bestimmte Preisbereiche anwenden. z.B. sind manche Aufpreise nur für bestimmte Preisregionen sinnvoll, für andere aber nicht.
Durch Verwendung der Funktion Ergebnisse aus vorherigen Spalten einfügen ergeben sich sehr flexible Möglichkeiten individuelle WENN-DANN-Logik auf verschiedene Preisbereiche anzuwenden (siehe Beispiel).

+Ohne Bereichs-Mappingsets sähe die Logik wesentlich komplizierter und unübersichtlicher aus, da alle Bereichsprüfungen im Skript gemacht werden müssten. Jetzt ist nur noch das absolute Minimum notwendig. Vorstellbar wäre auch, dass man die Preisbereiche direkt auf Aufpreis-Faktoren mappt und diese direkt in weiteren Spalten zum kalkulieren verwendet. Damit sähe das ganze noch einfacher aus. Wie immer, hängt die Umsetzung von den konkreten Anforderungen ab. 

 


Beispiel: Einfaches MappingsetBeispiel: Bereichs-Mappingset

 



Modus 1 mit Mappingset Name:

Sie können ein vorhandenes Mapping Set wählen oder ein neues erstellen, welches Sie über Datastores / Mappingset getrennt pflegen können.
Wann zu verwenden: Dieser Modus empfiehlt sich, wenn sie das gleiche Mapping Set mehrmals z.B. in verschiedenen Spalten oder verschiedenen Flows wiederverwenden wollen. Dann sparen sie sich Arbeit, da das Mapping Set an einer zentralen Stelle gepflegt werden kann.

Modus 2 direkt über Textfeld "Mappingset String":

Das ist die schnelle Variante, wenn sie ein Mapping Set nur in einer einzigen Spalte brauchen und nicht an anderer Stelle wiederverwenden wollen.

 


Bei beiden Methoden wird dabei der zu suchende Begriff und der neue Wert durch ein = getrennt. Es können beliebig viele dieser sogenannten Key=Value Paare gebildet und getrennt durch "Enter" angelegt werden

 


Note

Wir empfehlen Ihnen ein Mappingset zu erstellen. Dieses kann zentral außerhalb des Flows nachgepflegt werden und auch in anderen Flows wiederverwendet werden.

 


Konfiguration

Mapping Modus:

Über die Mapping Modus kann man das Verhalten beeinflussen, wie sich die Übersetzen auswirkt.

Info

Hinweis: Die Mapping Modus funktionieren nur für normale Mappingsets und  nicht für Bereichs-Mappingsets.

 


    • Originalwerte ausgeben (Keep Original Values) - Bedeutet, dass die Originalwerte ausgegeben werden, sollte das Mapping Set keinen zu mappenden Wert enthalten.

    • Nicht gemappte Werte entfernen (Remove unmapped original values) -Bedeutet, dass ein leerer Wert ausgegeben wird, sollte das Mapping Set keinen zu mappenden Wert enthalten.

    • Nicht gemappte Werte präfixen (Mark unmapped original values) - Bedeutet, dass die Originalwerte mit dem Prefix NO_MAPPING ausgegeben werden z.B. "NO_MAPPING 1234". D.h. man kann damit ungemappte Werte besser erkennen und z.B. durch Filter gezielt diese Zeilen lokalisieren.

    • Standardwert benutzen - Bedeutet, dass die Originalwerte durch einen Standardwert ersetzt werden. Somit können Werte, welche nicht im Mapping Set enthalten sind, durch ein festgegebenen Wert überschrieben werden.

    • Suchen & Ersetzen (case-sensitive) - Bedeutet, dass jeder Eintrag des Mappingsets im Sinne einer Suchen&Ersetzen-Funktion auf den aktuellen Wert angewendet wird. Case-sensitive bedeutet, dass Groß/-Kleinschreibung der Mappingset-Einträge beachtet wird.

    • Suchen & Ersetzen (ignore case) - Bedeutet, dass jeder Eintrag des Mappingsets im Sinne einer Suchen&Ersetzen-Funktion auf den aktuellen Wert angewendet wird. Ignore-case bedeutet, dass Groß/-Kleinschreibung der Mappingset-Einträge keine Rolle spielt.

    • Suchen & Ersetzen (Regulärer Ausdruck) - Bedeutet, dass jeder Eintrag des Mappingsets im Sinne einer Suchen&Ersetzen-Funktion auf den aktuellen Wert ang ewendet wird. Jeder Quellwert des Mappingsets entspricht damit einem sog. regulären Ausdruck (engl. regular expression). Damit lassen sich sehr komplexe Suchmuster realisieren. Diese Funktion ist aus Performance-Sicht am langsamsten von allen. Bitte nur verwenden, wenn Sie wissen was sie tun.

    • Mappe, wenn Wert enthält [...] (case-sensitiv) - Bedeutet, dass jeder Eintrag des Mappingsets im Sinne einer Suchen&Ersetzen-Funktion auf den aktuellen Wert angewendet wird. Jeder Quellwert wird überprüft ob der gesuchte Wert vorhanden ist. Diese Funktion erlaubt ihnen Texte zu ersetzen, auch wenn Ihnen der genaue Inhalt des zu ersetzenden Textes oder Wertes nicht bekannt ist. Case-sensitive bedeutet, dass Groß/-Kleinschreibung der Mappingset-Einträge beachtet wird.

    • Mappe, wenn Wert enthält [...] (ignore case) - Bedeutet, dass jeder Eintrag des Mappingsets im Sinne einer Suchen&Ersetzen-Funktion auf den aktuellen Wert angewendet wird. Jeder Quellwert wird überprüft ob der gesuchte Wert vorhanden ist. Diese Funktion erlaubt ihne Texte zu ersetzen auch wenn Ihnen der genaue Inhalt des zu ersetzenden Textes/Wertes nicht bekannt ist. Ignore Case bedeutet, dass Groß/-Kleinschreibung der Mappingset-Einträge nicht beachtet wird.

     


Info
titleHinweis

Grundlage für die Übersetzung ist immer der komplette aktuelle!!! Wert der Zelle.
Ausnahme: Mapping-Modus Suchen & Ersetzen: Bei Suchen & Ersetzen wird jeder Eintrag des Mappingsets nacheinander auf den kompletten Wert der Zelle angewendet.

Beispiel: Suchen & Ersetzen (case-sensitive)

Spaltenwert: Das ist ein sehr langer Beschreibungstext. 

Mappingset:


 

Code Block
ist=1
langer=bla
text=foo

 


Spaltenwert nach Anwendung des Mappingsets: 
Das 1 ein sehr bla Beschreibungsfoo. 

 


  • Trennzeichen (Source Delimiter): Diese Option ermöglicht es einzelne Werte einer Liste zu Mappen 

Beispiel:

Werte in einer Spalte sind durch > getrennt. Z.B.: kat1>kat2>kat3

Mappingset:

Code Block
kat1=101
kat2=102
kat3=105

 

 



Ergebnis mit Trennzeichen ">":

101>102>105

  • Duplikate entfernen(Remove Duplicates): Ist diese Option aktiviert werden mehrfach vorkommende Werte im Ergebnis des Mappings entfernt

Beispiel:

Werte in einer Spalte sind durch > getrennt. Z.B.: A,B,C,Y

Mappingset:

Code Block
A=101
B=102
C=105
Y=102

 


Ergebnis mit Trennzeichen "," und Duplikate entfernen :

101,102,105

 

 

 

 

 




...



Section


Column
width60%

Text Funktionen

Diese Funktionen sind nützlich, um Texten und Strings den letzten Schliff zu geben, ohne dass man skripten muss.

Leerzeichen und Zeilenumbrüche

Diese Funktion entfernt Leerzeichen am Anfang und Ende der Spalten (sog. Trimmen) oder Zeilenumbrüche. Man kann zwischen 3 Optionen wählen:

  • Trimmen und Zeilenumbrüche durch Leerzeichen ersetzen
  • Trimmen und Zeilenumbrüche entfernen
  • nur Trimmen (Zeilenumbrüche erhalten)


Splitten

Damit kann man einen Spaltenwert nach einem bestimmten Zeichen trennen und dann auf einen bestimmten Teil zugreifen. Häufig braucht man das bei Komma-separierten Listen, um z.B. auf das 2. Element zuzugreifen.

  • Trennzeichen - das Zeichen nach dem getrennt werden soll z.B. Komma oder Semikolon
  • Position - das n-te Element auf das sie nach der Trennung zugreifen wollen. (0=das erste Element, 1=das zweite, 2=das dritte ...)
    • statt einer Zahl kann man bei Position auch last oder first eingeben, um auf das letzte bzw. auf das erste Element zuzugreifen.
    • bei last gibt es auch die Möglichkeit, die Position relativ zum letzten Element zu bestimmen (z.B. zur Bestimmung des vorletzten Elements kann man schreiben last-1)

Beispiel:

Ausgangswert: Wort1,Wort2,Wort3
Trennzeichen: , (Komma)
Position: 1 
Ergebnis: Wort2 

 


Ausgangswert: Wort1,Wort2,Wort3
Trennzeichen: , (Komma)
Position: last 
Ergebnis: Wort3


Ausgangswert: Wort1,Wort2,Wort3
Trennzeichen: , (Komma)
Position: first 
Ergebnis: Wort1 


Ausgangswert: Wort1,Wort2,Wort3
Trennzeichen: , (Komma)
Position: last-1 
Ergebnis: Wort2 

 

 



Teilzeichenfolge (engl. Substring)

Häufig muss man Zeichenketten/Strings auf eine bestimmte Länge kürzen, oder man braucht nur einen Teil davon. Dabei hilft diese Funktion, ohne das man Freemarker-Skripte benutzen muss. Der Vorteil dieser Positionen gegenüber der Freemarker-Skriptvariante ist, dass diese Funktion fehlertoleranter ist und man z.B. keine Längenprüfung machen muss.

Die zurückgegebene Teilzeichenfolge beginnt mit dem Zeichen der Startposition (Startposition am Anfang ist immer 0) und endet vor der angegeben Endposition.

Die Start oder Endposition kann auch leer gelassen werden (siehe Beispiele unten).


Beispiel: 

Ausgangswert: Synesty Studio
Startposition: 0
Endposition:  5
Ergebnis: Synes

Ausgangswert: Synesty Studio
Startposition: 3
Endposition:  6
Ergebnis: est

Ausgangswert: Synesty Studio
Startposition: 3
Endposition:  <leer>
Ergebnis: esty Studio

Ausgangswert: Synesty Studio
Startposition: <leer>
Endposition:  6
Ergebnis: Synest

 

 




Column
width40%

 

 

 

 





Section


Column
width60%

Skript

Das Feld Skript gleicht dem Feld "Wert". Auch hier können Sie, per Freemarker, auf alle Quellspalten und Meta-Daten zugreifen und manipulieren.

Der Unterschied liegt darin, dass das Skript ganz am Ende der Verarbeitungskette ausgeführt wird. So können Sie beispielsweise eine Spalte per "Wert" manipulieren und diese manipulierten Daten im Skript Feld per ${value!} nochmals transformieren. In einigen Fällen benötigen Sie diese Flexibilität.

 


Info

Hier finden Sie einige Beispiele zum Feld "Wert" und "Skript".

 

 




Column
width40%

 



Section

Gruppieren/Aggregatfunktionen

Diese Funktion ermöglicht es eine Spalte eines Spreadsheets zu gruppieren. Um die Funktion zu nutzen wählen Sie unter "Einstellungen" -> "Gruppieren nach Spaltenname" den Titel der Spalte aus, welche gruppiert werden soll. Die Gruppierung bewirkt, das alle Zeilen mit gleichem Wert in einer Zeile zusammengefasst werden. 

Beispiel:

Column
width100%

Nicht gruppierte Daten


...

Dieser Modus gibt als Ergebnis die Gruppierten Spalten aus. Die originalen Zeilen werden also "zusammengefasst" und nicht mehr einzeln dargestellt:

 


B) Ergebnis nach Gruppierung nach 1.Spalte - Modus: Ergebnis als unterste Zeile

...

  • Kleinster Wert: Der niedrigste Wert aller gruppierten Zeilen wird ausgegeben.
  • Größter Wert: Der höchste Wert aller gruppierten Zeilen wird ausgegeben.
  • Summer aller Werte: Die Summe aller gruppierten Zeilen wird ausgegeben.
  • Durchschnittswert: Der Durchschnitt aller gruppierten Zeilen wird ausgegeben (entspricht "Summe aller Wert" geteilt durch "Zeilen Zählen").

 


Ziel-Schema laden

Im SpreadsheetMapper kann man ein Zielschema laden. D.h., dass man ein fertiges Set von benötigten Spalten laden kann. Dabei kann man ein bestehendes Schema (siehe Datastores / Schema) auswählen, und dessen Spalten in das aktuelle Mapping laden. Alle Spalten werden daraufhin gelöscht und mit den Spalten des Schemas ersetzt.

...

  • wenn Sie Daten per Flow in einen Datastore importieren wollen. 
    • Dazu laden Sie das Schema ihres Ziel-Datastores und kreuzen noch die Option "Identifier Spalten für Datastore Import hinzufügen" an.
  • oder wenn man bestimmte Zielformate häufig braucht. Dann kann man dafür ein Schema anlegen, und dieses dann immer wieder bei Bedarf laden. 

 

 


Erlaubte Werte

 

Eine Eigenschaft von Schemas ist, dass man sog. "erlaubte Werte" hinterlegen kann (z.B. die Werte Neu oder gebraucht beim Feld Zustand). Diese tauchen dann dann auch in der Mappingansicht im SpreadsheetMapper auf, wenn man dieses Schema geladen hat. 
Einige Add-Ons bringen feste Schemas mit, wo diese erlaubten Werte bereits hinterlegt sind. 

 

 



Code Block
${datecalc(prop_lastruntime?datetime, "DAY", -2)?string('yyyy-MM-dd HH:mm')}

 


Einfacher Zugriff auf erste Zeile eines Spreadsheets

...

 


Code Block
Wert der Spalte "status" der ersten Zeile: ${output@SpreadsheetUrlDownload_2.firstRow("status")!}

...

Hier wird auch der Wert ausgegeben. Über den zweiten Parameter kann aber ein Default-Wert mitgegeben werden, der zurückgegeben werden soll, sollte es die Spalte Status nicht geben.

 


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 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.

und dann