Spreadsheet Freemarker-Funktionen

Diese Seite beschreibt Funktionen eines Spreadsheet-Objektes (siehe Spreadsheets) mit den dazugehörigen Objekten für Zeilen Row und Spalten Col.
Diese Funktionen sind in der Regel im Mapper anwendbar oder in allen anderen Steps, die Freemarker-Skripte verarbeiten wie z.B. der TextHtmlWriter.

Voraussetzung

Zum Verständnis dieser Seite ist es hilfreich sich auch mit der Seite Scripting zu befassen.

SpreadsheetFunktionAttributeRückgabewertBeispiel
getName()Gibt den Namen des Spreadsheets aus.-string
getNumberHeaderCols()Gibt die Anzahl der Spalten in der Kopfzeile aus.-intAnzahl Spalten des Spreadsheet: ${myspreadsheet.getNumberHeaderCols()}
getHeader()Gibt das Zeilenobjekt (siehe Row) der Kopfzeile zurück.-RowListet alle Spaltentitel Semikolon-getrennt auf: ${myspreadsheet.getHeader()?join(";")}

Listet alle Spaltentitel auf, die mit "price_" beginnen: ${myspreadsheet.getHeader().getCols()?filter(headercol -> headercol.title?starts_with("price_"))?join(";")}

<#if myspreadsheet.getHeader().getCols()?seq_contains("description")>Ja Spalte "description" ist enthalten<#else>Nein, nicht gefunden</#if>

Kurzschreibweise:
Statt .getHeader().getCols() kann man auch .header.cols schreiben.
hasRows()Gibt true zurück, wenn das Spreadsheet mindestens eine (Daten-)Zeile enthält -boolean<#if !spreadsheet@SearchMasterDatastore_1.hasRows()>Das Spreadsheet ist leer bzw. hat keine Datenzeilen. </#if>

<#if !(spreadsheet@SearchMasterDatastore_1?? && spreadsheet@SearchMasterDatastore_1.hasRows())> Das Spreadsheet ist leer oder existiert nicht. </#if>
getRows()Gibt alle Zeilen (siehe Rows) des Spreadsheets zurück - ohne Kopfzeile.-List<Row><#list spreadsheet@SearchMasterDatastore_1.getRows() as row>${row['id']}</#list>

Iteriert über alle Zeilen des Spreadsheets und gibt pro Zeile den Wert der Spalte id aus.
firstRow(String columnName)Gibt die angegebene Spalte (columnName) aus der ersten Zeile des Spreadsheet zurückstringColWert der Spalte "status" der ersten Zeile: ${output@SpreadsheetUrlDownload_2.firstRow("status")!}

Gibt den Wert der Spalte "Status" in der ersten Zeile aus.
firstRow(String columnName, String defaultValue);Wie firstRow(String columnName), gibt aber den defaultValue aus, falls die Spalte nicht vorhanden iststring, stringstringWert der Spalte "status" der ersten Zeile: ${output@SpreadsheetUrlDownload_2.firstRow("status", "open")!}

Gibt den Wert der Spalte "Status" in der ersten Zeile aus. Falls der Wert leer ist oder nicht existiert, wird der Default-Wert "open" zurück gegeben.
meta.map@KeyValueSpreadsheet.get(String Key)Gibt aus einem vorher erstellen KeyValueSpreadsheet, den Value des angegeben Keys zurückstringstringWert des Key1 aus KeyValueSpreadsheet1: ${meta.map@KeyValueSpreadsheet_1.get(Key1)}
Row
row Variable im Mapper
In den unteren Beispielen wird an einigen Stellen eine für sich allein stehende (ohne umschließende <#list> Anweisung) row-Variable verwendet.
Diese Variable ist automatisch im Mapper verfügbar und repräsentiert die aktuelle Quell-Zeile (Beispiel). Darüber hat man Zugriff auf alle Spalten (Col) dieser Zeile.
Beispiel - Wert einer der Quellspalte status ausgeben
${row["status"]!}
Beispiel - alle Spalten als Key-Value Map mit Spaltentitel und Wert ausgeben
<#list row.getCols() as col>${col.getTitle()}=${col!}<#sep>;</#list>
Statt der Kurzform
${col!}
würde auch die Langform
${col.get()!}
funktionieren.
Beispiel - alle Spaltenwerte komma-getrennt ausgeben
${row.getCols()?join(",")}
getCols()Gibt alle Spalten der Zeile zurück.-ColumnList bzw. List<Col>${row.getCols()?join(",")}
Fügt alle Spaltenwerte kommasepariert zusammen.

${row.getCols()?filter(col -> col.getTitle()!?starts_with('price'))?join(",")}
Fügt alle Spaltenwerte kommasepariert zusammen, von Spalten, deren Titel mit dem Wort "price" beginnt.
getRowNumber()Gibt die aktuelle Zeilennumer aus.-intAktuelle Zeilennummer:
${row.getRowNumber()}
[headerColName]Gibt den Spaltenwert anhand des Spaltennamens in der Quellzeile aus.stringstringDer Wert der Spalte 'status' ist:
${row["status"]!}
. Alternativ würde auch die Langform
${row.get("status")!}
funktionieren.
isValid()Prüft ob alle Spalten entsprechend der Schema-Definition valide sind-boolean<#list spreadsheet@SearchMasterDatastore_1.getRows() as row>
<#if row.isValid()>
Alle Spalten entsprechend dem im Datastore-Schema definierten Regeln (z.B. Pflichtfeld, Reg-Ex, Erlaubte Werte...)
</#if>
</#list>
parent(String columnName)Gibt die angegebene Spalte aus der Parentzeile (falls vorhanden) zurück.stringColDies funktioniert nur bei Variant-Zeilen, die aus einem Datastore per SearchDatastore Step kommen.

Siehe auch Auf Relationen zugreifen und Datastores - HierarchischeDaten.

${parent['columnname']!} - greift auf eine Spalte der Parent-Zeile zu

<#if row.parent()??>ja, ist Variante, weil Parent vorhanden<#else>Nein, ist keine Variante, da kein Parent vorhanden</#if>
master(String columnName)Gibt die angegebene Spalte aus der Master-Zeile (falls vorhanden) zurück.stringCol Dies funktioniert nur bei Zeilen, die aus einem Child-Datastore per SearchDatastore Step kommen.

Siehe auch Auf Relationen zugreifen und Datastores - HierarchischeDaten.

${master['columnname']!} - greift auf eine Spalte der Master-Zeile zu

<#if row.master()??>ja, ist Child-Zeile, weil Master vorhanden<#else>Nein, ist keine Child-Zeile, da kein Master vorhanden</#if>
variants()Gibt alle Varianten-Zeilen (sofern vorhanden) der aktuellen Parent-Zeile zurück.List<Row>Dies funktioniert nur bei Zeilen, die aus einem Datastore per SearchDatastore Step kommen.

Siehe auch Auf Relationen zugreifen und Datastores - HierarchischeDaten.

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

<#if (row.variants()?? && row.variants()?size > 0)>
<#list row.variants() as v>
${v.get('artikelnummer')!} -
</#list>
</#if>
children()Gibt alle Child-Zeilen (sofern vorhanden) der aktuellen Master-Zeile zurück.Dies funktioniert nur bei Zeilen, die aus einem Master-Datastore per SearchDatastore Step kommen und wenn es zu diesem Master-Datastore auch einen verknüpften Child-Datastore gibt.

Siehe auch Auf Relationen zugreifen und Datastores - HierarchischeDaten.

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

<#if (row.children()?? && row.children()?size > 0)>
<#list row.children() as c>
${c.get('artikelnummer')!} -
</#list>
getSpreadsheet()Gibt das Spreadsheet-Objekt (siehe Spreadsheet) zurück, zu dem die aktuelle Zeile gehört. Spreadsheet
Col
get()Gibt den Textwert einer Spalte-string${brandname.get()} ist das gleiche wie die Kurzform ${brandname!}. Das Ausrufezeichen am Ende sorgt dafür dass ein evtl. Null-Wert mit einem leeren String ("") ausgegeben wird.
get(String defaultValue)Wie get(), aber es wird der defaultValue ausgegeben, falls der Wert leer ist stringstring${brandname.get("foo")} ist das gleiche wie die Kurzform ${brandname!"foo"}. Das Ausrufezeichen am Ende sorgt dafür dass ein evtl. Null-Wert mit einem leeren String ("") ausgegeben wird.
getTitle()Gibt den Spaltentitel aus.-string${mycolumn.getTitle()}
getHeaderCol()Gibt die dazugehörigen Kopfspalte aus.-Col${mycolumn.getHeaderColumn().get()} ist das gleiche wie ${mycolumn.getTitle()!}
getRow()Gibt das Zeilenobjekt (siehe Row) zurück, zu der die Spalte gehört.RowAktuelle Zeilennummer: ${mycolumn.getRow().getRowNumber()}