Startseite / Vorlagenentwicklung / Regeln / Vorbedingungen <IF/>

<IF/> Vorbedingungen für die Regelausführung definieren

Eine Validierung erfolgt standardmäßig (siehe Seite Ausführungszeitpunkt) unmittelbar während der laufenden Eingabe eines Wertes in eine Eingabekomponente. Das bedeutet, bei jedem Tastendruck des Redakteurs wird die Regel durchlaufen.

Dieses Verhalten ist nicht in allen Fällen erwünscht. Bei komplexeren Abfragen oder einer sehr umfangreichen Regeldefinition kann es sinnvoll sein, eine Vorbedingung für die Regelausführung zu definieren. (Alternativ kann ein (einmaliger) Ausführungszeitpunkt definiert werden, siehe Seite Ausführungszeitpunkt.)

Eine Vorbedingung wird innerhalb eines <IF/>-Abschnitts definiert. Dieser Abschnitt muss vor den Tags zur Wertermittlung definiert werden.

Dabei gilt für die Definition einer Vorbedingung:

  • Eine Vorbedingung kann optional in einer Regel definiert werden. (Ist keine Vorbedingung definiert, wird die Regel immer durchlaufen.)
  • Über eine Vorbedingung wird ein Boolescher Wert ermittelt. Ist die Vorbedingung erfüllt (TRUE), werden die nachfolgenden Regel-Abschnitte durchlaufen, im Negativfall (FALSE) nicht.
  • Die Verwendung einer Vorbedingung ist in Regeln immer unidirektional. Das bedeutet, die Regel wird nur ausgeführt, wenn die Vorbedingung erfüllt ist. Das bedeutet aber nicht, dass eine Ausführung rückgängig gemacht wird, wenn sich die Vorbedingung zwischenzeitlich wieder ändert.
  • Die Vorbedingung bezieht sich immer auf eine bestimmte Eigenschaft des Formularelements oder des Formulars („Wurde das Formular in der Inhalte-Verwaltung geöffnet?“).
    Dazu ist die Angabe eines <PROPERTY/>-Tags innerhalb des <IF/>-Abschnitts notwendig. Über:
  • können weitere Werte abgeleitet werden. So kann der Wert der Eingabekomponente beispielsweise gegen bestimmte reguläre Ausdrücke oder gegen einen Vergleichswert geprüft werden.

Beispiele

Beispiel 1) Sprachabhängige Validierung mithilfe einer Vorbedingung

Die Definition einer Vorbedingung eignet sich ideal für eine sprachabhängige Validierung. Im folgenden Beispiel wird abhängig von der aktuell bearbeiteten Redaktionssprache nur ein bestimmter Zweig der Regel durchlaufen. Die Eingabekomponente „st_standard“, für die die Regel definiert wird, erlaubt die sprachabhängige Angabe einer DIN- (für die Sprache „DE“) oder einer ISO-Norm (für die Sprache „EN“). Die Regel prüft über die Definition einer Vorbedingung, in welcher Sprache das Formular durch den Redakteur bearbeitet wird (Sprachabhängige Validierung).

 

Beim Bearbeiten der Redaktionssprache „DE“ gilt die folgende Vorbedingung als erfüllt:

<IF>
<EQUAL>
<PROPERTY source="#global" name="LANG"/>
<TEXT>DE</TEXT>
</EQUAL>
</IF>

Damit werden die nachfolgenden Zweige der Regel durchlaufen, die mittels eines regulären Ausdrucks prüfen, ob die Eingabe des Redakteurs einem korrektes DIN-Norm-Format entspricht. Solange die Bedingung nicht erfüllt ist (FALSE), werden die Anweisungen innerhalb des <VALIDATION/>-Abschnitts ausgeführt:

...
<WITH>
<MATCHES regex="^DIN\ \d\d*$">
<PROPERTY source="st_standard" name="VALUE"/>
</MATCHES>
</WITH>
<DO>
<VALIDATION scope="SAVE">
<PROPERTY source="st_standard" name="VALID"/>
<MESSAGE lang="*" text="No DIN standard given"/>
<MESSAGE lang="DE" text="Keine DIN-Norm angegeben"/>
</VALIDATION>
</DO>
...

Für weitere Redaktionsprachen wird die Regeldefinition um eine Regel erweitert, die nach erfüllter Vorbedingung mittels eines regulären Ausdrucks prüft, ob die Eingabe des Redakteurs einem korrektes ISO-Norm-Format entspricht:

...
<RULE>
<IF>
<NOT>
<EQUAL>
<PROPERTY name="LANG" source="#global"/>
<TEXT>DE</TEXT>
</EQUAL>
</NOT>
</IF>
<WITH>
<MATCHES regex="^ISO\ \d\d*$">
<PROPERTY name="VALUE" source="st_standard"/>
</MATCHES>
</WITH>
<DO>
<VALIDATION scope="SAVE">
<PROPERTY name="VALID" source="st_standard"/>
<MESSAGE lang="*" text="No ISO standard given"/>
<MESSAGE lang="DE" text="Keine ISO-Norm angegeben"/>
</VALIDATION>
</DO>
</RULE>
...

Beispiel 2) Überschreiben von Werten mithilfe einer Vorbedingung verhindern

In einem weiteren Formular gibt es je ein Eingabefeld für ein Start-Datum („st_startDate“) und ein End-Datum („st_endDate“). Über ein dynamisches Formular soll beim Eintragen eines Start-Datums durch den Redakteur automatisch ein End-Datum berechnet und in die Eingabekomponente „st_endDate“ übernommen werden (siehe Beispiel Datum berechnen).

Dabei soll ein bereits durch den Redakteur eingetragenes End-Datum durch die Regel nicht überschrieben werden. Um sicherzustellen, dass die Regel nur ausgeführt wird, wenn die Eingabekomponente „st_endDate“ nicht bereits gefüllt ist, wird eine Vorbedingung definiert:

<IF>
<PROPERTY name="EMPTY" source="st_endDate"/>
</IF>

Die nachfolgenden Abschnitte der Regel – also das Berechnen eines neuen Datums und die Übernahme des neuen Wertes in die Eingabekomponente „st_endDate“ – werden erst ausgeführt, wenn diese Vorbedingung erfüllt ist.

<RULE>
<IF>
<PROPERTY name="EMPTY" source="st_endDate"/>
</IF>
<WITH>
<ADD value="2 weeks">
<PROPERTY name="VALUE" source="st_startDate"/>
</ADD>
</WITH>
<DO>
<PROPERTY name="VALUE" source="st_endDate"/>
</DO>
</RULE>

© 2005 - 2024 Crownpeak Technology GmbH | Alle Rechte vorbehalten. | FirstSpirit 2024.4 | Datenschutz