Logik-Funktionen ermöglichen bedingte Wertzuweisungen und Überprüfungen in Vorlagen. Diese Funktionen sind besonders nützlich, um mit leeren Werten umzugehen, Standardwerte zuzuweisen und Werte-Mappings zu erstellen.

Umgang mit leeren Werten

Diese Funktionen helfen beim sicheren Umgang mit leeren, null oder undefined Werten in Vorlagen.

isBlank() - Werte auf Leerheit prüfen

Die isBlank() Funktion prüft, ob ein Wert leer ist (null, undefined oder leerer String) und gibt true oder false zurück.

Syntax: isBlank(wert)

Name vorhanden: <<cs_{isBlank(kunde.name)}>>Nein<<else>>Ja<<es_>>
E-Mail vorhanden: <<cs_{isBlank(kunde.email)}>>Nein<<else>>Ja<<es_>>
Telefon vorhanden: <<cs_{isBlank(kunde.telefon)}>>Nein<<else>>Ja<<es_>>

Als bedingte Abschnitte absichern:
Für komplexe oder kritische Einsetzungen kombinieren Sie bedingte Abschnitte mit der isBlank()-Funktion:

<<cs_{isBlank(person.name)}>>
  Kein Name verfügbar. 

  Ein Absatz und ein Link zu einem Ansprechpartner: support[at]example.com
<<else>>
  Name: <<person.name>>.
<<es_>>

ifBlank() - Standardwerte für leere Felder

Die ifBlank() Funktion gibt einen Standardwert zurück, wenn der ursprüngliche Wert leer ist.

Syntax: ifBlank(wert, standardwert)

Unternehmen: <<{ifBlank(versorger.firmenname, 'Stadtwerke Musterstadt')}>> 
Hotline: <<{ifBlank(versorger.hotline, '0800 123-456')}>> 
Website: <<{ifBlank(versorger.website, 'Keine Website verfügbar')}>> 

Mapping-Funktionen

Mapping-Funktionen ermöglichen die Zuordnung von Eingabewerten zu anderen Werten, ähnlich wie Switch-Anweisungen in Programmiersprachen.

map() - Werte zuordnen (case-sensitive)

Die map() Funktion ordnet einem Eingabewert einen Ausgabewert zu. Die Übereinstimmung erfolgt exakt (case-sensitive).

Syntax: map(wert, test1, ergebnis1, test2, ergebnis2, ..., standardwert)

Expression-Klammern erforderlich: Bei der Verwendung von map() in Variablen-Definitionen müssen die geschweiften Klammern {...} verwendet werden:

✅ Richtig:
<<$anrede={map(payload.sexCode, '1', 'Herr', '2', 'Frau', 'Herr/Frau')}>>

❌ Falsch:
<<$anrede=map(payload.sexCode, '1', 'Herr', '2', 'Frau', 'Herr/Frau')>>

Ohne die Expression-Klammern wird die map() Funktion nicht ausgeführt und die Variable bleibt leer.

Kundenstatus: <<{map(kunde.status, 'A', 'Aktiv', 'I', 'Inaktiv', 'P', 'Pausiert', 'Unbekannt')}>>

mapi() - Werte zuordnen (case-insensitive)

Die mapi() Funktion funktioniert wie map(), ignoriert aber die Groß-/Kleinschreibung bei der Übereinstimmung.

Syntax: mapi(wert, test1, ergebnis1, test2, ergebnis2, ..., standardwert)

Zählertyp: <<{mapi(zaehler.typ, 'smart', 'Intelligenter Zähler', 'analog', 'Analoger Zähler', 'Unbekannter Typ')}>>

Das mapi() Beispiel zeigt, wie "SMART" (Großbuchstaben) erfolgreich mit "smart" (Kleinbuchstaben) in der Vorlage gematcht wird, da mapi() case-insensitive arbeitet.

String-Syntax beachten: In Tornado-Templates werden String-Parameter in Funktionen immer mit einfachen Anführungszeichen (') angegeben, nicht mit doppelten Anführungszeichen (").

map(person.status, 'A', 'Aktiv', 'I', 'Inaktiv', 'Unbekannt')    ✓ Richtig
map(person.status, "A", "Aktiv", "I", "Inaktiv", "Unbekannt")    ✗ Falsch

Praktische Beispiele

Statusmapping für Prozesse

Status: <<{map(kunde.status, 'A', 'Aktiv', 'I', 'Inaktiv', 'P', 'Pausiert', 'Unbekannt')}>>
Tarif: <<{map(kunde.tarif, 'HT', 'Hochtarif', 'NT', 'Niedrigtarif', 'ET', 'Einheitstarif', 'Standard')}>>
Zähler: <<{mapi(kunde.zaehlertyp, 'smart', 'Intelligenter Zähler', 'analog', 'Analoger Zähler', 'digital', 'Digitaler Zähler', 'Unbekannt')}>>

Das mapi() Beispiel zeigt, wie "SMART" (Großbuchstaben) erfolgreich mit "smart" (Kleinbuchstaben) in der Vorlage gematcht wird, da mapi() case-insensitive arbeitet.

Komplexe Abrechnungslogik

Betrag: <<{ifBlank(rechnung.betrag, rechnung.grundpreis)}>> EUR
Status: <<{map(rechnung.zahlungsstatus, 'OFFEN', 'Zahlung ausstehend', 'TEILWEISE', 'Teilweise bezahlt', 'BEZAHLT', 'Vollständig bezahlt', 'Unbekannt')}>>
Mahnstufe: <<{map(rechnung.mahnstufe, 'M1', '1. Mahnung', 'M2', '2. Mahnung', 'M3', '3. Mahnung', 'Keine Mahnung')}>>

Kombinierte Logik-Funktionen

Verbrauch: <<verbrauch.kwh>> kWh

<<cs_{isBlank(verbrauch.kategorie)}>>
Auto-Kategorie: <<{map(true, 
  verbrauch.kwh < 1500, 'Niedrigverbraucher',
  verbrauch.kwh < 3500, 'Normalverbraucher',
  'Hochverbraucher'
)}>>
<<else>>
Kategorie: <<$verbrauch.kategorie>>
<<es_>>

Komplexe Bedingungen: Wenn Sie mehrere Bedingungen prüfen müssen, kombinieren Sie isBlank() mit bedingten Abschnitten und map() für logische Entscheidungen.

Hinweise

Optimierung von Logik-Funktionen:

  • Einfache Fallbacks: Verwenden Sie ifBlank() für einfache Null-Checks statt komplexer bedingter Abschnitte
  • Mapping-Performance: map() und mapi() sind effizienter als verschachtelte bedingte Abschnitte
  • Reihenfolge beachten: Platzieren Sie häufige Werte in map() am Anfang der Parameter-Liste
  • Case-Sensitivity: Verwenden Sie mapi() nur wenn nötig, da map() etwas performanter ist

Funktions-Beschränkungen: Die folgenden Funktionen sind in Tornado nicht verfügbar und dürfen nicht verwendet werden:

  • if() - Verwenden Sie stattdessen bedingte Abschnitte <<cs_{bedingung}>>
  • switch() - Verwenden Sie stattdessen map() oder mapi()
  • nvl() - Verwenden Sie stattdessen ifBlank()
  • choose() - Verwenden Sie stattdessen map() mit Index-Werten

Diese Funktionen führen zu Vorlagen-Fehlern und sollten durch die dokumentierten Alternativen ersetzt werden.