ARCWAY Cockpit

Velocity Template Language-Referenz

Dieses Dokument beschreibt die wesentlichen Merkmale der Velocity Template Language (VTL). Eine detailliertere Beschreibung finden Sie auf der Velocity-Homepage (Englisch).

Die VTL ist die Schnittstelle zwischen einem Template und den Java-Klassen des ARCWAY Cockpit-Systems. Die ARCWAY Cockpit-Dokumenten-Generierung verwendet die Velocity Engine, um Berichte durch dynamische ARCWAY Cockpit-Inhalte zu erweitern (siehe Berichtsvorlagen).

Inhaltsverzeichnis

Referenzen

Referenzen verweisen auf Variablen, Attribute oder Methoden. Um Referenzen eindeutig zu kennzeichen beginnen sie mit einem "$"-Zeichen, gefolgt von einem Buchstaben (a..z, A..Z). Die folgenden Zeichen können beliebig aus der Menge Buchstaben, Ziffern, Unterstrich und Bindestrich gewählt werden. Um eine Referenz eindeutig von anderem Ausgabetext abzutrennen kann der Referenzname in geschweifte Klammern "{}" gefasst werden (dies ist notwendig wenn z. B. ein Wort aus einer Referenz und einem Template-Text ohne Leerzeichen zusammengesetzt werden soll)

Beispiel:
$meineVariable-1
${meineVariable-1}

Zeichenketten (String-Variablen) können von der VTL direkt dargestellt werden. Wird auf einen anderen Variablentyp verwiesen (Zahlen, Aufzählungen oder komplexe Objekte) so wird für die Darstellung immer die "toString" Methode aufgerufen.

Attribute und Methoden werden über den "."-Operator angesprochen. Hier ist zu beachten, dass das Attribut "MeinAttribut" von der Velocity-Engine auf die Methode "getMeinAttribut" abgebildet wird.
Methoden können Variablen übergeben bekommen. Dies geschieht per Referenzaufruf. Wird also eine Variable "a" einer Methode als Parameter "b" übergeben, so modifiziert jede Änderungen der Variablen mit dem Namen "b" auch die Variable mit dem Namen "a" und umgekehrt. Nach dem Rücksprung aus der Methode steht der Bezeichner "b" wieder für die Variable, für die er stand, bevor die Methode aufgerufen wurde.

Beispiel:
$meineVariable-1.meinAttribut
$meinVariable-1.meinMethode()
$meinVariable-1.setAttribut( "mein Inhalt" )

Direktiven

Direktiven werden von der VTL genutzt um Anweisungen auszuführen. Um Direktiven eindeutig zu identifizieren wird ihrem Namen ein "#" vorangestellt.

Wertzuweisungen

Die "set-Direktive" weißt einer Referenz einen Wert zu.

Beispiel:
#set ( $meinObjekt = "meineWertzuweisung" )

Folgende Wertzuweisungen sind möglich:

Variablen-Referenz#set( $meinObjekt-1 = $meinObjekt-2)
Attribut-Referenz#set( $meinObjekt-3 = $meinObjekt-4.meinAttribut )
Methoden-Referenz
(Ergebnis des Methodenaufrufs)
#set( $meinObjekt-5 = $meinObjekt-6.getMethode() )
Zeichenkette#set( $meinObjekt-7 = "meine Zeichenkette" )
Zahl#set( $meinObjekt-8 = 12345 )
Aufzählung#set( $meinObjekt-9 = ["Wert1", "Wert2"] )
arithmentische Ausdrücke#set( $meinObjekt-10 = $meinObjekt-8 + 111 )

Achtung: Wenn ein zugewiesener Ausdruck nicht ermittelt werden kann, bleibt der Wert der Variable unverändert.

Bedingungen

Bedingungen werden mit der "if-Direktive" konstruiert. Ist die Bedingungsvariable ("$meineBedingung") vom vom Typ Boolean, so wird der logische Wert direkt ausgewertet. Alle anderen Variablentypen sind wahr, wenn ihnen ein Wert zugewiesen wurde (d. h. "NULL" entspricht falsch).

Beispiel:
#if ( $meineBedingung )
weitere Anweisungen
#end

Die Bedingungsvariable kann mit arithmetischen ("<", ">", "==") und logischen ("||", "&&", "!") Operatoren verknüpft werden.

Beispiele:
#if ( $meineBedingung > 10 )
Bedingung ist größer 10
#end

#if ( $meineBedingung1 && !$meineBedingung2 )
Bedingung1 ist erfüllt und Bedingung2 ist nicht erfüllt
#end

Bedingungen können mit der Direktive "#elseif" weiter verzweigt werden. Ein Sonst-Zweig wird mit Hilfe von "#else" definiert.

Beispiel:
#if ( $meineBedingung1 )
Bedingung1 ist erfüllt
#elseif ( $meineBedingung2 )
Bedingung2 ist erfüllt
#else
keine Bedingung erfüllt
#end

Schleifen

Schleifen werden mit der "foreach-Direktive" realisiert. Diese Direktive durchläuft alle Elemente einer gegeben Liste. Die Variable "$alleElemente" enthält diese Liste. Die Variable "$element" enthält in jedem Durchgang immer ein Element der Liste.

Beispiel:
$alleElemente = ["Wert1", "Wert2", "Wert3"]

#foreach( $element in $alleElemente )
$element
#end

... wird wie folgt dargestellt ...

Wert1
Wert2
Wert3

Stop

Die Abarbeitung des Templates kann mit Hilfe der "stop-Direktive" gestoppt werden. Diese Direktive ist nur sinnvoll um Fehler zu finden.

Beispiel:
#stop

Macros

Immer wiederkehrende Funktionen können in Makros zusammengefasst werden. Diese sind Direktiven und müssen sich daher auch an die o. g. Namenskonvention halten. Einem Makro können (durch Leerzeichen getrennte) Variablen übergeben werden, sofern diese in der Makro-Definition definiert sind. Makros müssen immer vor dem ersten Makroaufruf definiert werden.

Beispiel:
#macro ( beispielmacro $arg1 $arg2 )
Anweisungen
#end

#beispielmacro( wert1 wert2 )

Kommentare

Kommentare sollten dazu genutzt werden um die Template-Funktionalität zu dokumentieren. Die VTL bietet dafür die Möglichkeit einzeilige ("##") und mehrzeilige ("#*" ... "*#") Kommentare zu verfassen.

Beispiel:
## einzeiliger Kommentar

#*
mehrzeiliger
Kommentar
*#

Sonderzeichen

Um Zeichenfolgen darzustellen, die von der Velocity-Engine als Referenzen oder Direktiven interpretiert werden würden, gibt es den "\"-Operator. Alle Zeichen, die dem "\" folgen werden als String interpretiert.

Beispiel:
\beliebigerText

Beispiel:
\#stop

... wird wie folgt dargestellt ...

#stop