Zur Innovation Gate Website ...

Focus on WGA

Neue und unbekanntere Features von Webgate Anywhere

Die "Switch"-Variante von tml:select

Mit dem Tag <tml:select> können eine Reihe von Konditionen getestet werden, von denen (in der Regel) nur der erste "Treffer" zu einer Aktion führen soll. Einzelne Konditionen und ihre zugehörigen Aktionen werden in <tml:case>-Tags definiert:
<tml:select>
   <tml:case condition="val == 1">
   ...
   </tml:case>
   <tml:case condition="val == 2">
   ...
   </tml:case>
   <tml:caseelse>
   ...
   </tml:caseelse>
</tml:select>

Wer <tml:case> nur ohne <tml:select> kennt wird sich hier vielleicht wundern was der Unterschied ist. Das umliegende <tml:select> sorgt dafür dass:
  • Nur der erste <tml:case> ausgeführt wird dessen Kondition erfüllt ist. Weitere <tml:case>-Tags werden nicht angerührt, egal ob ihre Kondition erfüllt wäre oder nicht (es sei denn dies sei durch Attribut testall="true" explizit erwünscht)
  • Der optionale Tag <tml:caseelse> ausgeführt wird falls keine Kondition zuvor erfüllt war.
Oftmals wird in so einem Konstrukt der Wert irgendeines Feldes überprüft und abhängig davon irgendeine spezielle Aktion ausgeführt. Ist das zu überprüfende Feld immer dasselbe so ist die ständige Wiederholung des Feldnamens und des Vergleichs-Operators nicht nur mühsam. Sie ist ebenso fehlerträchtig sowie wartungsunfreundlich. Ändert sich der zu prüfende Feldname so muss man jede einzelne Kondition anfassen.

Für diese Fälle der Verwendung von <tml:select> gibt es seit WGA 4.1eine syntaktische Vereinfachung: Das Attribut "switch":
Dessen Verwendung sieht folgendermaßen aus:
<tml:select switch="val">
   <tml:case value="1">
   ...
   </tml:case>
   <tml:case value="2">
   ...
   </tml:case>
   <tml:caseelse>
   ...
   </tml:caseelse>
</tml:select>

Dieser Code besitzt dasselbe Verhalten wie jener aus Beispiel 1. Nur dass der zu vergleichende Wert im Attribut "switch" angegeben wird, welches zum <tml:select>-Tag gehört. Das Attribut erwartet einen beliebigen TMLScript-Ausdruck dessen Ergebnis den Vergleichswert ergibt. In diesem Fall wird einfach die WebTML-Variable "val" abgerufen deren Wert verglichen wird.

In den Tags <tml:case> wird nun statt des Attributes "condition" das neue Attribut "value" verwendet. Dieses empfängt den zweiten Wert mit welchem jener aus dem "switch"-Ausdruck verglichen werden soll. Jenes <tml:case> dessen "value" mit dem "switch"-Wert übereinstimmt erhält den "Zuschlag". Weitere <tml:case>-Tags werden wie üblich ignoriert.

Weiter zur nächsten Seite ...

Enter Your Comment:

use markdown syntax