KeyValueSpreadsheet

Der Spezial-Step KeyValueSpreadsheetopen in new window für fortgeschrittene Nutzer erstellt aus einem Input-Spreadsheet ein 2-spaltiges Output-Spreadsheet im Sinne einer KeyValue-Map mit Schlüssel-Wert-Paaren.

Die Ausgabe dieses Steps ist eine spezielle Variante eines Spreadsheets, welches über zwei zusätzliche Funktionen verfügt, auf die nur über Freemarker zugegriffen werden kann. Die Funktionsweise ist vergleichbar mit der von Mappingsets oder Querverweisen (oder auch dem SVerweis aus Excel) jedoch mit dem Unterschied, dass dieses Spreadsheet speziell für die Verwendung in Freemarker-Skripten gedacht ist.

FunktionBeschreibung
boolean containsKey(String key)Diese Funktion prüft, ob ein Key in der Map enthalten ist.
Rückgabewert: true oder false
String get(String key)Gibt den Wert zu einem Key in der Map zurück, wenn containsKey() true liefert. Ansonsten wird null zurückgegeben.

Im Anwendungsbeispiel wird die Verwendung dieser beiden Funktionen gezeigt.

Hintergrund

Die Intention dieses Steps ist die Vereinfachung bei der Arbeit in Freemarker-Skripten, wenn man auf eine sog. Map aus Schlüssel-Wert-Paaren zugreifen will. 
Maps (oder auch HashMap) werden in Programmiersprachen verwendet und sind vergleichbar mit dem Nachschlagen in einem Telefonbuch, um zwei Fragen zu beantworten:

  • Gibt es einen Eintrag zu einem bestimmten Key / Schlüssel?
  • Wenn ja, was ist der Wert dieses Eintrags?

Einer der Hauptgründe für diesen Step sind Performance-Vorteile, da sog. KeyValue-Lookups sehr schnell sind.

Anwendungsbeispiel

Gegeben sei ein Flow, welcher zwei Datenquellen einließt:

Step 1

Holt ein Spreadsheet mit vielen Spalten für die zu erzeugende KeyValue-Map.

Step 2

Extrahiert zwei Spalten aus dem Spreadsheet aus Step 1 und stellt dieses als KeyValue Spreadsheet bereit.

Das Output-Spreadsheet enthält zwei Spalten:

  • key
  • value

Step 3

Liest eine 2. Datenquelle ein, z.B. eine Liste mit Artikeln eines Lieferanten.

Step 4

Dieser Step erzeugt eine Beispielausgabe mit Hilfe eines Freemarker-Scripts.
Dabei wird über alle Produkte aus Step 3 iteriert.
In jeder Iteration (also für jedes Produkt) wird geprüft, ob die Artikelnummer (identifier) als Key in der KeyValue-Map aus Step 2 vorkommt.
Wenn ja, dann wird der Wert des entsprechenden Key aus der KV-Map ausgegeben. Ansonsten wird eine Meldung ausgegeben, dass die Map den Key nicht enthält.

Beispiel Script Step 4

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

    <#if map@KeyValueSpreadsheet_1.containsKey(row['identifier'])>
        Yes: Value for Key ${row['identifier']}: ${map@KeyValueSpreadsheet_1.get(row['identifier'])}
    <#else>
        No: Key ${row['identifier']} not contained in map. 
    </#if>

</#list>

Beispiel-Ausgabe:

Klicken Sie auf die Step-Vorschau des TextHTMLWriter Steps.

Yes: Value for Key 834289205551431680: Max Mustermann
No: Key 834167402954895366 not contained in map.

Einen funktionierenden Beispiel-Flow können Sie hier herunterladen und in Ihr Projekt importieren.

Voraussetzung damit der Beispiel-Flow funktioniert:

  • der Beispiel Datastore "ExampleDatastore" muss installiert sein

Hinweis

Die Vorteile spielt der Step sicherlich bei der Verwendung im Rahmen des Mapper SpreadsheetMapper Steps aus, wenn man bestimmte Prüfungen in vielen Spalten für jede Zeile vornehmen will. Der Einsatz im Step TextHTMLWriter hier im Beispiel ist möglich, dient jedoch nur als vereinfachtes Beispiel.