<AND/> Und-Verknüpfung in dynamischen Formularen
Das <AND/>-Tag kann im Bereich Wertermittlung der Regeldefinition (oder für die Definition einer Vorbedingung) eingesetzt werden und dient dazu mehrere logische Ausdrücke miteinander zu verknüpfen. Das Ergebnis des zusammengesetzten logischen Ausdrucks ist einen Boolscher Wert, der genau dann wahr ist, wenn alle verknüpften Ausdrücke wahr sind:
<AND>
Ausdruck 1
Ausdruck 2
...
Ausdruck n
</AND>
Mithilfe des <AND/>-Tags können innerhalb einer Regel mehrere Formulareigenschaften geprüft und mit einer Handlungsanweisung verknüpft werden, also z. B.:
- „Wenn das Formular in der Inhalte-Verwaltung geöffnet UND die Option „diesen Absatz in der Ausgabe generieren“ aktiviert wurde, blende Formular-Inhalt A ein.“ oder
- „Wenn der Wert der Eingabekomponente größer als 0 UND kleiner als 10 ist, blende einen Hinweis im Formular ein.“
Beispiele
Beispiel: Prüft , ob eine Zahl innerhalb eines definierten Wertebereichs liegt
Das folgende Formular enthält drei Eingabekomponente vom Typ CMS_INPUT_NUMBER:
„st_lowerLimit“ zur Angabe des unteren Grenzwertes eines Wertebereichs
„st_upperLimit“ zur Angabe des oberen Grenzwertes eines Wertebereichs und
„st_value“ zur Angabe eines Wertes, der innerhalb des festgelegten Wertebereichs liegt
Über ein dynamisches Formular soll sichergestellt werden, dass der Redakteur in die Eingabekomponente „st_value“ einen Zahlenwert eingibt, der innerhalb des definierten Wertebereichs liegt. Dies ist gewährleistet, wenn eine der folgende Bedingungen erfüllt ist:
- Der Wert in „st_value“ ist gleich dem Wert in „st_lowerLimit“ ODER
- Der Wert in „st_value“ ist gleich dem Wert in „st_upperLimit“ ODER
- Der Wert in „st_value“ ist kleiner als der Wert in „st_upperLimit“ UND größer als der Wert in „st_lowerLimit“
Diese Bedingungen werden innerhalb des <WITH/>-Abschnitts der Regel folgendermaßen geprüft:
1) Ist der Wert aus „st_value“ gleich dem Wert aus „st_lowerLimit“?
<EQUAL>
<PROPERTY source="st_value" name="VALUE"/>
<PROPERTY source="st_lowerLimit" name="VALUE"/>
</EQUAL>
2) Ist der Wert aus „st_value“ größer als der Wert aus „st_lowerLimit“ UND kleiner als der der Wert aus „st_upperLimit“?
In diesem Fall müssen beide Bedingungen zutreffen, sie werden daher über <AND/> verknüpft:
<AND>
<GREATER_THAN>
<PROPERTY source="st_value" name="VALUE"/>
<PROPERTY source="st_lowerLimit" name="VALUE"/>
</GREATER_THAN>
<LESS_THAN>
<PROPERTY source="st_value" name="VALUE"/>
<PROPERTY source="st_upperLimit" name="VALUE"/>
</LESS_THAN>
</AND>
3) Ist der Wert aus „st_value“ gleich dem Wert aus „st_upperLimit“?
<EQUAL>
<PROPERTY source="st_value" name="VALUE"/>
<PROPERTY source="st_upperLimit" name="VALUE"/>
</EQUAL>
Ist einer dieser drei logischen Ausdrücke wahr, ist die Bedingung (Wert aus „st_value“ muss innerhalb des definierten Wertbereichs liegen.) erfüllt. Die Ausdrücke können daher über <OR/> verknüpft werden:
<OR>
<EQUAL>
<PROPERTY source="st_value" name="VALUE"/>
<PROPERTY source="st_lowerLimit" name="VALUE"/>
</EQUAL>
<AND>
<GREATER_THAN>
<PROPERTY source="st_value" name="VALUE"/>
<PROPERTY source="st_lowerLimit" name="VALUE"/>
</GREATER_THAN>
<LESS_THAN>
<PROPERTY source="st_value" name="VALUE"/>
<PROPERTY source="st_upperLimit" name="VALUE"/>
</LESS_THAN>
</AND>
<EQUAL>
<PROPERTY source="st_value" name="VALUE"/>
<PROPERTY source="st_upperLimit" name="VALUE"/>
</EQUAL>
</OR>
Das Ergebnis dieses zusammengesetzten logischen Ausdrucks ist ein Boolscher Wert, der anschließend im <DO/>-Abschnitt mit einer Validierung der Eingabekomponente „st_value“ verknüpft wird. Solange die Bedingung („Wert liegt innerhalb des definierten Wertebereichs“) nicht erfüllt ist, wird der <VALIDATION/>-Abschnitt der Regel ausgeführt und ein Korrekturhinweis eingeblendet. Durch die umschließenden <ON_SAVE/>-Tags wird außerdem das Speichern des Formulars unterbunden.
...
<ON_SAVE>
<WITH>
<OR>
<EQUAL>
<PROPERTY source="st_value" name="VALUE"/>
<PROPERTY source="st_lowerLimit" name="VALUE"/>
</EQUAL>
<AND>
<GREATER_THAN>
<PROPERTY source="st_value" name="VALUE"/>
<PROPERTY source="st_lowerLimit" name="VALUE"/>
</GREATER_THAN>
<LESS_THAN>
<PROPERTY source="st_value" name="VALUE"/>
<PROPERTY source="st_upperLimit" name="VALUE"/>
</LESS_THAN>
</AND>
<EQUAL>
<PROPERTY source="st_value" name="VALUE"/>
<PROPERTY source="st_upperLimit" name="VALUE"/>
</EQUAL>
</OR>
</WITH>
<DO>
<VALIDATION>
<PROPERTY source="st_value" name="VALID"/>
<MESSAGE lang="*" text="Value is not part of codomain"/>
<MESSAGE lang="DE" text="Wert ist nicht im Wertebereich"/>
</VALIDATION>
</DO>
</ON_SAVE>
...