Zum Inhalt springen
DE EN
Doku-Navigation

Logik: WHEN, Makros, Formatierung

Template-Editor Teil 3, Bedingte Sichtbarkeit, Berechnungen und Label-Parameter

Fortgeschritten · ca. 16 Min. Lesezeit

Basiert auf ESLEasy_TemplateEditor V2.7, Stand 2025-09-03

Voraussetzungen

  • Guides „Ihr erstes Template“ und „Objekte & Befehle“ durchgearbeitet
  • Mehrere Daten-Tabs angelegt (mindestens ein Standard- und ein Angebotsfall)

Ein Template, das immer gleich aussieht, ist ein Preisschild. Ein Template, das auf die Daten reagiert, ist ein System. In diesem Guide bringen Sie Ihrem Template bei, Angebote zu erkennen, Grundpreise zu berechnen und leere Batterien zu melden.

Die häufigste Fehlerquelle vorweg

Die Original-Dokumentation sagt es unmissverständlich: IF-Bedingungen und WHEN-Angaben sind die größte Fehlerquelle im Template-Editor.

Der Klassiker: Ihr Template greift auf {EAN} zu, aber in den Nutzdaten fehlt <EAN="…">. Das Objekt verschwindet, ohne Fehlermeldung.

Zwei Hilfsmittel:

  • Bei Verarbeitungsfehlern wird die fehlerhafte Zeile rot markiert, die Statusleiste zeigt eine Meldung.
  • Die Editor-Option „Alle Objekte” zeigt auch die Objekte an, die aktuell durch eine WHEN-Bedingung ausgeschlossen sind. Wenn ein Objekt „weg” ist: hier zuerst nachsehen.

Drei Klammertypen, drei Bedeutungen

Bevor Sie eine einzige Bedingung schreiben, verinnerlichen Sie diese Tabelle. Sie ist die Ursache der meisten Missverständnisse.

KlammerBedeutungBeispiel
<spitz>Definieren, Befehle, Parameter, Testdaten<PRICE="12,99"> · <CMD="TEXT">
{geschweift}Datenfeld verwenden{PRICE}
(rund)Variable abfragen (nur in WHEN)(FILIALE)
[eckig]Makrofeld / WHEN-Befehl[ISEMPTY~PREIS] · [CALC~…]

Sonderfall, der oft übersehen wird: In WHEN-Bedingungen wird der Tag-Name ohne geschweifte Klammern angegeben.

Richtig: <WHEN="[ISEMPTY~ITEMNO]"> Falsch: <WHEN="[ISEMPTY~{ITEMNO}]">


WHEN, bedingte Sichtbarkeit

Für jedes Kommando kann eine WHEN-Bedingung angegeben werden. Nur bei erfüllter Bedingung wird die Zeile ausgeführt.

<CMD="TEXT"><WHEN="[ISNOTEMPTY~PREIS]"><Y="0"><X="0"><WIDTH="50"><HEIGHT="25"><TEXT="{PREIS}"><COLOR="BLACK"><FONT="Calibri"><FONTSIZE="22">

Dieses Textobjekt erscheint nur, wenn das Datenfeld PREIS gefüllt ist.

Das Format

[Befehl~Parameter1~Parameter2]

Die Parameteranzahl ist je Befehl unterschiedlich. In den Parametern können Makros und Datenfelder verwendet werden.

Bedingungen kombinieren

ParameterWirkung
WHEN, WHENANDAlle Bedingungen müssen erfüllt sein (UND)
WHENORMindestens eine Bedingung muss erfüllt sein (ODER)

Mehrere Bedingungen werden einfach hintereinander aufgeführt:

<WHEN="[ISEMPTY~PREIS][ISTAG~SONDERPREIS]">

→ Objekt erscheint nur, wenn PREIS leer und SONDERPREIS vorhanden ist.

screenshot301.png
Dasselbe Template, zwei Daten-Tabs: Im Angebotsfall erscheint das Sonderpreis-Objekt

Die Daten-Tabs aus Guide 2 zahlen sich hier aus. Legen Sie je einen Tab für den Normalfall und den Angebotsfall an, und schalten Sie beim Entwickeln zwischen ihnen um. Sie sehen sofort, ob Ihre Bedingung greift, ohne die Datenbank anzufassen.

Quelle: ESLEasy_TemplateEditor V2.7, WHEN, S. 66–67.


Die WHEN-Befehle im Überblick

Existenz und Inhalt prüfen

BefehlPrüft
ISTAGIst das Datenfeld in den verbundenen Daten vorhanden? Tag-Name ohne {}
ISNOTTAGIst das Datenfeld nicht vorhanden?
ISEMPTYIst das Datenfeld leer? Feld ohne {}
ISNOTEMPTYIst das Datenfeld nicht leer?
ISVALUEEMPTYIst Parameter 1 (als Wert) leer?
ISNOTVALUEEMPTYIst Parameter 1 nicht leer?

ISTAG vs. ISEMPTY, der Unterschied zählt. ISTAG fragt: Gibt es das Feld überhaupt? ISEMPTY fragt: Gibt es das Feld, und ist es leer? Ein Feld, das gar nicht existiert, ist etwas anderes als ein Feld mit leerem Inhalt.

Vergleiche, auf den Datentyp achten

Für jeden Vergleich gibt es drei Varianten: String, Int und Float. Das ist kein Zufall, "9" ist als String größer als "10", als Integer aber kleiner.

StringIntegerFloat
ISEQUALISINTEQUALISFLOATEQUAL
ISNOTEQUALISNOTINTEQUALISNOTFLOATEQUAL
ISLESSTHANISFLOATLESSTHAN
ISLESSEQUALISFLOATLESSEQUAL
ISGREATERTHANISFLOATGREATERTHAN
ISGREATEREQUALISFLOATGREATEREQUAL

Preise immer mit den FLOAT-Varianten vergleichen. Ein Int-Vergleich auf 19,99 führt zu unerwarteten Ergebnissen.

Textprüfungen

BefehlPrüft
STARTSWITH / NOTSTARTSWITHBeginnt P1 (nicht) mit P2?
ENDSWITH / NOTENDSWITHEndet P1 (nicht) mit P2?
CONTAINS / CONTAINSNOTKommt P2 in P1 (nicht) vor?
ISLENGTHGREATERTHAN / ISLENGTHGREATEREQUALString-Länge von P1 > bzw. ≥ Int(P2)
ISLENGTHLESSTHAN / ISLENGTHLESSEQUALString-Länge von P1 < bzw. ≤ Int(P2)

ISLENGTHGREATERTHAN ist der Layout-Retter: Blenden Sie ein zweizeiliges Textobjekt nur ein, wenn die Artikelbezeichnung eine bestimmte Länge überschreitet, und das einzeilige sonst.

Listen

BefehlPrüftBeispiel
ISINLISTIst P1 in der Liste der weiteren Parameter enthalten?[ISINLIST~Andreas~Peter~Andreas~Marc]wahr
ISNOTINLISTIst P1 nicht enthalten?[ISNOTINLIST~Eric~Peter~Andreas~Marc]wahr
CONTAINSINLISTIst einer der Parameter in P1 enthalten?[CONTAINSINLIST~Andreas~Pe~An~Ma]wahr („An” steckt in „Andreas”)
CONTAINSNOTINLISTIst keiner der Parameter in P1 enthalten?[CONTAINSNOTINLIST~Andreas~Pe~Ab~Ma]wahr

ISINLIST ersetzt lange ODER-Ketten. Statt fünf ISEQUAL-Bedingungen mit WHENOR schreiben Sie eine Liste, etwa für Warengruppen, die dasselbe Symbol bekommen sollen.

Datumsvergleiche

Beide Parameter müssen gültige Datumsangaben sein. Makros sind hier nutzbar, das macht diese Befehle mächtig.

BefehlBeispiel
ISDATEEQUAL<WHEN="[ISDATEEQUAL~%%TODAY%%~{HOLIDAY}]">
ISDATENOTEQUAL<WHEN="[ISDATENOTEQUAL~%%TODAY%%~{HOLIDAY}]">
ISDATEGREATERTHAN<WHEN="[ISDATEGREATERTHAN~%%TODAY%%~2023-01-01]">
ISDATELESSTHAN<WHEN="[ISDATELESSTHAN~%%TODAY%%~2023-12-31]">
ISDATEGREATEREQUAL<WHEN="[ISDATEGREATEREQUAL~%%TODAY%%~2023-01-01]">
ISDATELESSEQUAL<WHEN="[ISDATELESSEQUAL~%%TODAY%%~2023-12-31]">

Der Anwendungsfall: Ein Aktionsstörer, der sich selbst abschaltet. Kombinieren Sie ISDATEGREATEREQUAL und ISDATELESSEQUAL mit den Aktionszeitraum-Feldern aus Ihrem ERP, das Label zeigt den Störer nur innerhalb des Zeitraums, ganz ohne manuellen Eingriff.

Dateien

BefehlPrüft
ISFILEIst die in P1 angegebene Datei vorhanden?
ISNOTFILEIst die Datei nicht vorhanden?

Praktisch für Artikelbilder: ISFILE prüft, ob ein Produktbild existiert, und blendet sonst einen Platzhalter ein.

Quelle: V2.7, „Liste der WHEN-Befehle”, S. 67–71.


IF / ELSE / ENDIF, ganze Bereiche schalten

WHEN schaltet eine Zeile. IF schaltet ganze Bereiche.

IF wird immer in Verbindung mit WHEN benutzt. Es gibt einen ELSE-Bereich für den Alternativfall; abgeschlossen wird mit ENDIF. Verschachtelte IF-Bedingungen sind möglich.

<CMD="IF"><WHEN="[ISTAG~NAME]">
    <CMD="TEXT">…
    <CMD="TEXT">…
<CMD="ELSE">
    <CMD="TEXT">…
    <CMD="TEXT">…
<CMD="ENDIF">

Wann WHEN, wann IF? Ein einzelnes Objekt ein- oder ausblenden → WHEN. Zwei komplette Layout-Varianten (z. B. Normalpreis-Block vs. Angebots-Block) → IF/ELSE.

Quelle: V2.7, IF, S. 71–72.


Variablen

Variablen legen Werte im Template fest, die in WHEN-Bedingungen abgefragt werden können.

<CMD="SETVARIABLE"><NAME="FILIALE"><VALUE="0815">
<CMD="CLEARVARIABLE"><NAME="FILIALE">
<CMD="CLEARALLVARIABLE">

Abgefragt wird mit runden Klammern:

<CMD="TEXT"><WHEN="[ISEQUAL~(FILIALE)~0815]"><X="334"><WIDTH="153"><HEIGHT="62"><TEXT="FILIALE stimmt mit 0815 überein"><COLOR="BLACK"><FONT="Calibri"><FONTSIZE="22"><Y="519">

Runde Klammern nur bei Variablen. Datenfelder in WHEN-Bedingungen werden ohne Klammern angegeben ([ISEMPTY~PREIS]), Variablen mit runden ([ISEQUAL~(FILIALE)~0815]). Diese Inkonsistenz ist eine klassische Fehlerquelle.

Quelle: V2.7, Variablen, S. 61.


Makros

Makros werden in der Befehlszeile durch den entsprechenden Wert ersetzt. Für die Ausgabe gilt standardmäßig die Formatierung des Betriebssystems, eine eigene Formatierung überschreibt diese:

<DATEFORMAT="dd.MM.yyyy">   → 31.12.2020
<TIMEFORMAT="HH:mm:ss">     → 12:09:23

Datum

MakroWert
%%TODAY%%Aktuelles Datum
%%TODAYMINUSONE%%%%TODAYMINUSFIVE%%Aktuelles Datum − 1 … − 5 Tage
%%TODAYPLUSONE%%%%TODAYPLUSFIVE%%Aktuelles Datum + 1 … + 5 Tage
%%TOMORROW%%Morgen
%%FIRSTDAYOFTHEWEEK%%Erster Tag der aktuellen Woche
%%WEEK%%Kalenderwoche des aktuellen Datums
%%DAY%% / %%MONTH%%Aktueller Tag (dd) / Monat (MM)
%%SHORTYEAR%% / %%LONGYEAR%% / %%YEAR%%Jahr als yy / yyyy / yyyy

Wochentage

MakroWert
%%WEEKDAY%%Aktueller Wochentag als Text
%%WEEKDAYPLUSONE%%%%WEEKDAYPLUSSIX%%Wochentag + 1 … + 6 als Text

Wochentage erscheinen in der eingestellten Landessprache des PC, nicht in der Sprache des Templates. Bei Filialen im Ausland unbedingt prüfen.

Uhrzeit und System

MakroWert
%%TIME%%Aktuelle Uhrzeit (HH:mm:ss)
%%HOUR%% / %%MINUTE%% / %%SECOND%%Stunde / Minute / Sekunde
%%IPADRESS%%Aktuelle IP-Adresse
%%IPADRESSES%%Alle IP-Adressen, mit Komma getrennt
%%HOSTNAME%%Hostname des PC
%%APPPATH%%Programmpfad der Applikation
%%VERSION%% / %%TOOLSVERSION%%Programm-/DLL-Version (interne Verwendung)

Doku-Eigenheit: Die Original-Dokumentation listet %%YESTERDAY ohne schließende %%, vermutlich ein Fehler im PDF. Verlassen Sie sich nicht darauf; falls Sie „gestern” brauchen, testen Sie beide Schreibweisen.

screenshot302.png
Makros in Aktion: Ein Template, das Datum und Wochentag automatisch aktualisiert

Quelle: V2.7, Makros, S. 62–63.


Makrofelder, rechnen und umformen

In bestimmten Feldern sind zusätzliche Makro-Auswertungen möglich, die mit eckigen Klammern angegeben werden.

Wo Makrofelder funktionieren:

BefehlFelder mit Makro-Auswertung
TEXTFILE, TEXT
IMAGEFILE
BARCODETEXT
QRCODETEXT
PRICETEXT, IMAGE
BARGRAPHPERCENT
NFCPAYLOAD

DATAVALUE

[DATAVALUE~Datenfeld] greift auf ein Datenfeld zu, die alternative Schreibweise zu {Datenfeld}.

Innerhalb von Makrofeldern wird diese Schreibweise benötigt. Sie können {PRICE} nicht in ein [SPLITREPEAT~…] verschachteln, dort muss [DATAVALUE~PRICE] stehen.

CALC, Berechnungen im Template

Neu in Version 2.6. [CALC~Rechenformel~Formatierung] berechnet Werte aus festen Zahlen oder Datenfeldern. Komplexe Ausdrücke mit Klammerebenen sind möglich.

<TEXT="Grundpreis [CALC~{PRICE}/{QUANTITY}~0.00]€ / {UNIT}">

Ausgabe z. B.: Grundpreis 59.60 € / kg

[CALC~…~0.00|0|.]   →  59.60

Im zweiten Beispiel: zwei Nachkommastellen, das Dezimaltrennzeichen wird durch einen Punkt ersetzt (falls es z. B. ein Komma ist).

Der Grundpreis muss nicht mehr aus dem ERP kommen. Wenn Preis und Menge in den Daten stehen, rechnet das Template ihn selbst aus, eine Datenfeld-Anforderung weniger an die Warenwirtschaft.

SPLITREPEAT

[SPLITREPEAT~Text~Trennzeichen~Teilstring~Ersatzzeichen] trennt einen Text am Trennzeichen und baut ihn neu formatiert zusammen. __SPLITVALUE__ greift dabei auf den originalen Teiltext zu; freier Text wird für jeden Teil wiederholt.

<TEXT="[SPLITREPEAT~[DATAVALUE~LIST]~,~__SPLITVALUE__~-]">
Datenfeld: <LIST="Jan,Feb,Mar,Apr">
Ergebnis:  Jan-Feb-Mar-Apr
<TEXT="[SPLITREPEAT~1,2,1~,~X~---]">
Ausgabe: X---X---X

REGEX

[REGEX~Text~Pattern~] wertet einen regulären Ausdruck aus; das Ergebnis wird als Text eingesetzt.

<TEXT="[REGEX~Eins Zwei Drei~\b[A-Z]~]">
Ausgabe: EZD

Quelle: V2.7, Makrofelder S. 63–64; DATAVALUE S. 64; SPLITREPEAT S. 64; REGEX S. 65; CALC S. 65 (neu in V2.6).


Formatierung von Datenfeldern

Rohdaten aus dem ERP sind selten anzeigefertig. Preise kommen ohne Dezimaltrennzeichen, Zahlen ohne Nachkommastellen. Dafür gibt es eine eigene Formatierungssyntax.

Format: {@@Datenfeld|Formatangabe|Teilungsfaktor}

Formatierung von Datenfeldern
Vom Rohwert zur Anzeige: Formatangabe und Teilungsfaktor

Zahlenformate

AngabeBedeutungBeispiel
0Stelle wird immer ausgegeben, fehlende Stellen mit 0 aufgefüllt<INHALT="1"> + {@@INHALT|0.0}1,0
<INHALT="1.6789"> + {@@INHALT|0.00}1,68
#Stelle wird nur ausgegeben, wenn vorhanden<INHALT="1"> + {@@INHALT|0.#}1
<INHALT="1.5"> + {@@INHALT|0.#}1,5

Der Teilungsfaktor

Der dritte Parameter löst ein sehr konkretes Problem: Preise, die im ERP ohne Dezimaltrennzeichen gespeichert sind.

<INHALT="16789">  +  {@@INHALT|0.00|100}  →  167,89

Der Wert wird durch 100 geteilt und dann formatiert. Kein Datenexport muss angepasst werden.

Textformate

AngabeBedeutungBeispiel
L + AnzahlGibt von links die angegebene Anzahl Zeichen aus<INHALT="1.12345"> + {@@INHALT|L4}1.12
R + AnzahlGibt von rechts die angegebene Anzahl Zeichen aus<INHALT="1.12345"> + {@@INHALT|R4}2345
S + Start,AnzahlSubstring: Startposition (beginnend bei 0) und Zeichenanzahl

CEILING und FLOOR stehen ebenfalls zur Verfügung, sie kamen mit Version 2.3 (05.05.2023) hinzu. Details in der Original-Doku, S. 72–74.

Quelle: V2.7, „Formatierung von Datenfeldern”, S. 72–74.


PAGE, mehrere Ansichten pro Label

ESL-Labels können mehrere Ansichten speichern. Angezeigt wird immer die aktuell aktive. Für jede Ansicht definieren Sie einen eigenen Quellcodebereich.

<CMD="PAGE"><PAGENO="1">
<CMD="TEXT">…
<CMD="TEXT">…

<CMD="PAGE"><PAGENO="2">
<CMD="TEXT">…
<CMD="ELLIPSE">…

Ab der PAGE-Zeile werden alle folgenden Zeilen dieser Page zugewiesen. Ohne PAGE-Befehl landet alles auf der ersten Page.

Zwei Einschränkungen:

  1. Der grafische Editor zeigt immer nur die eingestellte Page.
  2. Die Funktion „Aktuelle Ansicht an ein Label senden” berücksichtigt keine Pages, es wird nur die aktuelle Ansicht übertragen.

Das Umschalten der Ansicht auf den Labels erfolgt über Befehle des ESL-Easy-Servers, nicht über das Template.

Quelle: V2.7, PAGE, S. 65–66.


Label-Parameter: __HS_*

Zum Abschluss die Funktion, die Logik, Daten und Hardware verbindet.

Labels liefern selbst Daten. Herstellerabhängig sind das Batteriestand, Funkqualität, Seriennummer, Größe, Auflösung und weitere Parameter. Auf die Daten des aktuell verlinkten Labels greifen Sie im Template wie auf normale Datenfelder zu.

ESL-Label-Parameter beginnen immer mit __HS_, zum Beispiel liefert __HS_BATTERY bei Ontime-Labels den Batteriestand in Prozent.

Eine Liste der verfügbaren Parameter können Sie im Editor per Button abrufen: Label-ID eingeben, die Parameter werden in die Datenliste eingefügt.

Der Anwendungsfall: „Low battery”-Symbol

Kombinieren Sie __HS_BATTERY mit einer WHEN-Bedingung, und das Label meldet seine eigene schwache Batterie:

<CMD="IMAGE"><WHEN="[ISINTLESSTHAN~{__HS_BATTERY}~5]"><FILE="lowbattery.png">…

Das Symbol erscheint nur, wenn der Batteriestand unter 5 % liegt. Kein Monitoring-Tool, kein Report, das Label sagt es selbst.

screenshot304.png
Das Label meldet sich selbst: Ein Symbol erscheint, wenn __HS_BATTERY unter 5 % fällt

Die Bedeutung der Werte ist herstellerabhängig. __HS_BATTERY liefert bei Ontime Prozent, verlassen Sie sich nicht darauf, dass ein anderer Hersteller dieselbe Skala verwendet. Rufen Sie die Parameterliste für Ihr konkretes Label ab.

Quelle: V2.7, „ESL-Label-Daten”, S. 21–22.


Weitere Datenquellen im Template

Diese Themen gehören zur Datenverknüpfung und ergänzen die Logik-Funktionen:

ThemaKurzbeschreibungDoku
Location-TagsPro Location hinterlegte Datenfelder, die sich wie Stammdaten verhalten. Dieselbe DataID liefert in Location 1 und Location 2 unterschiedliche Werte. Pflege über Doppelklick auf „DataObject”.S. 18–20
Dynamische Tag-NamenTag-Namen lassen sich zusammenbauen: +Tag-Name+ greift auf den Inhalt eines Tags im Namen zu. Beispiel: <WHEN="[ISNOTEMPTY~ENERGY_CLASS_2017_+LANGUAGE+]"> prüft bei LANGUAGE="DE" den Tag ENERGY_CLASS_2017_DE. Der Schlüssel zu mehrsprachigen Templates.S. 20
SET, Unterdatensätze (neu in V2.7)Set-Artikel über <_SETx_DATAID="">. Alle Felder der SET-DataIDs stehen mit dem Präfix _SETx_ bereit ({_SET1_DESCRIPTION}). Ist die Nummerierung lückenhaft (ERP liefert 1, 3, 5), greift <_SET#x_Datenfeld> in sortierter Reihenfolge zu.S. 17
PARAMLabel-individuelle Parameter, die der Anwender bei der Verknüpfung setzt (siehe Guide 3).S. 54–55

Zum Weiterlesen

Quelldokument: Template Editor · v2.7