TemplateParserUnit

Gruppe

Integration Units

Klassenname

com.ebd.hub.datawizard.iu.TemplateParserUnit

Funktion

Dient der Ausgabe von Daten, wobei das Format durch eine Template-Datei bestimmt wird.

Beschreibung


Einleitung: Integration Units.


Die TemplateParserUnit dient der Ausgabe von Daten aus Lobster_data. Das Format der generierten Daten wird durch eine Template-Datei bestimmt. Die Template-Datei enthält Tags, die durch die Unit gefüllt werden. Der Text-Parser speichert die Feldwerte in einer Map und benutzt dabei die Feldnamen als Schlüssel. Die Tagnamen werden dann als Schlüssel benutzt, um die Tagwerte aus der Map zu lesen. Ist in einem Template ein Tag definiert, dessen Name nicht in der Map enthalten ist, so wird das Tag durch einen Leerstring ersetzt. Das Ausgabe-Encoding ist immer 8859_1.

Parameterbeschreibung


Parametername

Erlaubte Werte

Default-Wert

Beschreibung

create CDDATA for xml


false

Ist dieser Schalter gesetzt, wird der Text beim Ersetzen von Tags mit einem XML-CDATA-Block umschlossen.

end tag


--}

Das End-Tag von Platzhaltern.

start tag


{--

Das Start-Tag von Platzhaltern.

template-file



Der Pfad zu einer Datei, die als Vorlage für den generierten Text dienen soll.

Use format-field


false

Wenn true, dann werden Werte vor dem Einfügen über die angegebene Vorlage des Feldes formatiert.

template file encoding


8859_1

Das Encoding, mit dem das Template gelesen wird.

Aufbau eines Templates


Ein Template ist ein normales Text-Dokument, das mit Tags bzw. Loop-Tags versehen ist, die zum Zeitpunkt des Parsens durch entsprechende Werte ersetzt werden. Bei der Beschreibung wird davon ausgegangen, das {-- als Start-Tag und --} als End-Tag verwendet wird.

Aufbau eines Tags



{--tagname[:index1[|index2][:formatString]]--}



tagname

Der Tag-Name (benutzt als Schlüssel in der Feld-Map).

index1

Handelt es sich bei dem repräsentierten Wert um ein eindimensionales Array, so wird hierbei der Index angegeben, um auf einen bestimmten Wert in dem Array zuzugreifen. Wird dieser weggelassen, so wird das erste Element im Array verwendet. Handelt es sich bei dem angegeben Wert um eine Zahl, wird diese als Index für das Array direkt verwendet (ab 0 beginnend). Handelt es sich bei dem angegebenen Wert um keine Zahl, wird versucht eine Schleife mit entsprechendem Namen zu finden und der aktuelle Wert der Schleife als Index verwendet.

index2

Handelt es sich bei dem repräsentierten Wert um ein zweidimensionales Array, so wird hierbei der zweite Index angegeben, um auf einen bestimmten Wert im Array zuzugreifen. Wird dieser weggelassen, so wird das erste Element im Array verwendet. Handelt es sich bei dem angegeben Wert um eine Zahl, wird diese als Index für das Array direkt verwendet (ab 0 beginnend). Handelt es sich bei dem angegeben Wert um keine Zahl, wird versucht, eine Schleife mit entsprechendem Namen zu finden und der aktuelle Wert der Schleife als Index verwendet.

formatString

Hiermit wird eine bestimmte Formatierung spezifiziert. Hinweis: Dieses Feature wird vom Text-Parser erkannt, aber noch nicht unterstützt.

Beispiele für verschiedene Tags


{--key--}

Tag mit dem Namen key. Handelt es sich bei dem entsprechenden Wert um ein Array, wird das Tag durch das erste Element ersetzt (erstes Element bzw. erstes Element der ersten Zeile).

{--key1DArray:1--}

Tag mit dem Namen key1DArray, das beim Parsen durch das zweite Element beim eindimensionalen und durch das erste Element der zweiten Zeile beim zweidimensionalen Array ersetzt wird. Handelt es sich bei dem angegebenen Wert um kein Array, wird der angegebene Index ignoriert und immer der gleiche Wert eingesetzt.

{--key2DArray:1|2--}

Tag mit dem Namen key2DArray, das beim Parsen durch das dritte Element der zweiten Zeile ersetzt wird. Handelt es sich bei dem angegebenen Wert um ein eindimensionales Array, wird das zweite Element verwendet und der zweite Index ignoriert. Bei Nicht-Arrays, werden alle Indexangaben ignoriert.

{--key::%d{LOCALE}--}

Tag mit dem Namen key, das durch den entsprechenden Wert ersetzt wird und dabei als Datum mit dem aktuellen (oder spezifizierten Locale) formatiert wird (nicht unterstützt bei Version 1.0 des Text-Parsers).

{--key:loop--}

Tag mit dem Namen key, das durch das Element ersetzt wird, das im Array (sofern es sich um eines handelt) an der Stelle steht, die durch den aktuellen Wert der Schleife mit dem Namen loop definiert wird.

{--key:loop1|loop2--}

Tag mit dem Namen key, das durch das Element ersetzt wird, das im zweidimensionalen Array in der Zeile, die durch den aktuellen Wert der Schleife mit Namen loop1 und in der Spalte, die durch den aktuellen Wert der Schleife mit Namen loop2 definiert ist, steht.

{--key:0|loop1--}

Das Mischen von statischen Werten und Referenzen auf Schleifen ist möglich. Mit den Schlüsselwörtern FIRST und LAST kann auf das erste und letzte Element des Arrays zugegriffen werden. Das kann nützlich sein, wenn man die Größe des Arrays nicht kennt.

Loops


Um eine Datenreihe (z. B. Messergebnisse) darstellen zu können, ist die Verwendung einer Schleife notwendig. Für die Definition einer Schleife, werden sogenannte Loop-Tags benötigt, die folgenden Aufbau haben.


{--LOOP|loopname:start|{reference|index}:end|{reference|index}:step--}



loopname

Der Name der Schleife. Dieser kann innerhalb eines Tags für die Angabe eines Index angegeben werden.

start

Wert mit dem die Schleife beginnen soll zu zählen (normalerweise 0).

end

Wert bei dem die Schleife beendet werden soll.

step

Zahl, um die der aktuelle Wert am Ende eines Schleifendurchlaufs erhöht werden soll.

reference

Soll eine Schleife abhängig von der Länge eines vorhandenen Arrays sein, so kann dieses angegeben werden. Bei zweidimensionalen Arrays kann mit index die Zeile angegeben werden, wenn die Anzahl der Spalten maßgeblich sein soll.

Check-Blocks


Um den Aufbau eines Textes von der Existenz eines Wertes abhängig zu machen, besteht die Möglichkeit, so genannte Check-Blocks zu definieren. Die Teile eines Templates, die sich innerhalb eines solchen Check-Blocks befinden, erscheinen abhängig vom Vorhandensein oder Nichtvorhandensein eines Wertes im resultierenden Text. Der Aufbau eines Check-Blocks ist der folgende.


{--CHECK|blockname:checktyp|reference--}
...
...
{/--CHECK|blockname--}



blockname

Der Name des Check-Blocks.

checktyp

Art der vorzunehmenden Überprüfung. Derzeit sind die folgenden Arten definiert: exist: Der Block wird im Text eingefügt, wenn der angegebene Werteschlüssel existiert und der Wert definiert ist. nonexist: Der Block wird im Text eingefügt, wenn der angegebene Werteschlüssel nicht existiert, oder kein Wert definiert ist. true: Der Block wird im Text eingefügt, wenn der angegebene Werteschlüssel existiert und ein Wert definiert und den Wert true hat.

reference

Der zu überprüfende Werteschlüssel.

Beispiele für Templates


Beispiel für ein Template, das z. B. für die Erstellung von Serienbriefen verwendet werden kann.


Serienbrief.txt
Meine Firma GmbH & Co KG
Tollestr. 25
 
D-12345 Nimmerlandstadt
 
 
{--name--}
{--cofield--}
{--street--}
 
{--countrycode--}-{--zip--} {--city--}
 
 
Sehr geehrte{--mrextension--} {--mrormrs--} {--surname--}
 
...
 
Mit freundlichen Grüßen
 
 
Harald Hagelgruber
Marketing


Ein Template, das eine Messwerttabelle aufbaut, wenn Zeit und Werte in einem zweidimensionalen Array stehen.


Messwerttabelle.txt
Messwertergebnisse fuer {--datum--}
 
Zeit Wert
{--LOOP|loop:0:{value}:1--}{--time:loop--} {--value:loop--}
{--/LOOP|loop--}


Ein Beispiel für die Verwendung von Check-Blocks. Sind Messergebnisse vorhanden, so erhält man das gleiche Ergebnis wie aus der Messwerttabelle.txt. Sind keine Messergebnisse vorhanden (der Wert time ist nicht definiert, oder es ist kein erster Wert vorhanden), so erscheint folgendes Ergebnis: Keine Messergebnisse vorhanden.


Checkblock.txt
{--CHECK|check1:exist|time--}Messwertergebnisse fuer {--datum--}
 
Zeit Wert
{--LOOP|loop:0:{value}:1--}{--time:loop--} {--value:loop--}
{--/LOOP|loop--}{--/CHECK|check1--}
{--CHECK|check1:nonexist|time--}Keine Messergebnisse vorhanden
{--/CHECK|check1--}