If
If
Kurzbeschreibung
Das XML-Element
<If>prüft eine oder mehrere Bedingungen und steuert abhängig vom Ergebnis, welche XML-Elemente während der Dokumentenerzeugung verarbeitet werden.Ist die Bedingung erfüllt, wird der Inhalt des
<TrueContainer>verarbeitet. Ist sie nicht erfüllt, wird – sofern vorhanden – der Inhalt des<FalseContainer>verarbeitet.Zusätzliche Bedingungen können über
<Condition>ergänzt und mitAnd,OroderXorverknüpft werden.
Einordnung
Bereich: Bedingungen und Schleifen
Schwierigkeitsgrad: ⭐⭐⭐☆☆
Vorkenntnisse: Text · Variable · Setter
Empfohlener nächster Artikel: Case
Zweck
Mit dem XML-Element <If> kann die Verarbeitung einer Dokumentvorlage von einer oder mehreren Bedingungen abhängig gemacht werden.
Hierdurch können beispielsweise:
- Texte ein- oder ausgeblendet werden,
- Bausteine bedingt eingebunden werden,
- unterschiedliche Inhalte ausgegeben werden,
- vorhandene Variablen geprüft werden,
- Werte miteinander verglichen werden,
- alternative Verarbeitungswege definiert werden.
Das <If>-Element erzeugt selbst keinen sichtbaren Inhalt. Es entscheidet ausschließlich, welcher der enthaltenen Verarbeitungszweige ausgeführt wird.
Typische Anwendungsfälle sind:
- Ausgabe eines optionalen Absatzes,
- Einbindung eines Bausteins abhängig von einem Parameter,
- Prüfung, ob eine Variable vorhanden ist,
- unterschiedliche Ausgaben bei erfüllter oder nicht erfüllter Bedingung,
- mehrstufige Entscheidungen durch verschachtelte
<If>-Elemente.
Grundsyntax
Eine einfache <If>-Abfrage besteht aus:
- der Bedingung im öffnenden
<If>-Element, - einem
<TrueContainer>, - optional einem
<FalseContainer>.
<If Compare="ja" DataType="Text" IsEqual="source.e_hatbetreuer">
<TrueContainer>
...
</TrueContainer>
<FalseContainer>
...
</FalseContainer>
</If>Ist der Inhalt von source.e_hatbetreuer gleich ja, wird der <TrueContainer> verarbeitet.
Ist die Bedingung nicht erfüllt, wird der <FalseContainer> verarbeitet.
Position innerhalb der Dokumentvorlage
Das <If>-Element kann an unterschiedlichen Positionen innerhalb des <Body> verwendet werden.
Die zulässigen Inhalte der Container richten sich nach der Position des <If>-Elements.
Direkt unterhalb des Body
Soll eine vollständige Dokumentstruktur, beispielsweise ein Block oder eine Bausteinreferenz, bedingt verarbeitet werden, befindet sich das <If> direkt unterhalb des <Body>.
<Body>
<If Compare="ja" DataType="Text" IsEqual="source.e_hatbetreuer">
<TrueContainer>
<Reference
Name="BS00_Deckblatt_Betreuer"
RefId="7fa84881-e936-4000-b4f0-dbd94413f4a7"
RefName="BS00_Deckblatt_Betreuer">
</Reference>
</TrueContainer>
</If>
</Body>In diesem Beispiel wird die Bausteinreferenz nur verarbeitet, wenn source.e_hatbetreuer den Wert ja besitzt.
Innerhalb eines Content
Soll lediglich ein Teil des Inhalts eines bestehenden Blocks bedingt ausgegeben werden, kann das <If> innerhalb eines <Content> verwendet werden.
<Block>
<Content>
<If DataType="Text" Exists="source.e_kvnr">
<TrueContainer>
<Text Content="Eine Krankenversichertennummer ist vorhanden.">
</Text>
</TrueContainer>
<FalseContainer>
<Text Content="Es ist keine Krankenversichertennummer vorhanden.">
</Text>
</FalseContainer>
</If>
</Content>
</Block>Da sich das <If> innerhalb eines <Content> befindet, enthalten die beiden Container in diesem Beispiel direkt ausgebbare Inhaltselemente.
Wichtig
Die Inhalte von
<TrueContainer>und<FalseContainer>müssen zur Position des umgebenden<If>-Elements passen.Befindet sich das
<If>direkt unterhalb des<Body>, können beispielsweise vollständige<Block>-Elemente oder Referenzen verarbeitet werden.Befindet sich das
<If>innerhalb eines<Content>, werden dort üblicherweise Inhaltselemente wie<Text>,<Variable>oder weitere eingebettete Steuerungselemente verwendet.
Ablauf der Verarbeitung
Die Render-Engine verarbeitet ein <If> in mehreren Schritten.
Render-Engine erreicht das If
│
▼
Die Ausgangsbedingung wird geprüft
│
▼
Vorhandene Conditions werden ausgewertet
│
▼
Das Gesamtergebnis wird ermittelt
│
┌────┴────┐
▼ ▼
true false
│ │
▼ ▼
TrueContainer FalseContainer
wird wird verarbeitet,
verarbeitet sofern vorhandenEs wird immer nur der zur Bedingung passende Container verarbeitet.
Ist kein <FalseContainer> vorhanden und die Bedingung nicht erfüllt, erzeugt das <If> an dieser Stelle keine Ausgabe und führt keine darin enthaltene Verarbeitung aus.
Attribute von If und Condition
Die XML-Elemente <If> und <Condition> verwenden grundsätzlich dieselben Attribute zur Definition einer Bedingung.
Eine Bedingung besteht üblicherweise aus:
- einer Vergleichsart, beispielsweise
IsEqual,ExistsoderInDateRange, - dem zu prüfenden Variablenpfad,
- gegebenenfalls einem festen oder variablen Vergleichswert,
- optionalen Einstellungen wie
DataType,InvertoderFormat.
| Attribut | Funktion | Beschreibung |
|---|---|---|
| Compare | Vergleichswert | Enthält einen festen Wert, mit dem der Inhalt der zu prüfenden Variable verglichen wird. Bei IsOneOf können mehrere Werte als kommagetrennte Liste angegeben werden. |
| ComparePath | Vergleichswert | Enthält den Pfad einer zweiten Variable. Deren Inhalt wird anstelle eines festen Wertes als Vergleichswert verwendet. |
| Connect | Verknüpfung | Legt bei einem <Condition> fest, wie die zusätzliche Bedingung mit der vorhergehenden Bedingung verknüpft wird. Mögliche Werte sind And, Or und Xor. |
| DataType | Datentyp | Legt fest, als welcher Datentyp die beteiligten Werte interpretiert und verglichen werden. Zur Verfügung stehen Text, Numerisch und Datum. |
| Exists | Prüfung | Prüft, ob die angegebene Variable einen verwendbaren Wert enthält. Der Wert des Attributes ist der zu prüfende Variablenpfad. |
| Format | Konfiguration | Definiert das Format, das insbesondere bei Datumsbereichsvergleichen für die Interpretation der beteiligten Datumswerte verwendet wird. |
| InDateRange | Prüfung | Prüft, ob der Wert der angegebenen Variable innerhalb eines Datumsbereiches liegt. Die Grenzen werden über RangeFrom, RangeTo, RangeFromPath oder RangeToPath definiert. |
| InNumberRange | Prüfung | Prüft, ob der numerische Wert der angegebenen Variable innerhalb eines Zahlenbereiches liegt. Die Grenzen werden über RangeFrom, RangeTo, RangeFromPath oder RangeToPath definiert. |
| InTextRange | Prüfung | Prüft, ob der Inhalt der angegebenen Variable innerhalb eines textuellen beziehungsweise lexikografischen Bereiches liegt. Die Grenzen werden über RangeFrom, RangeTo, RangeFromPath oder RangeToPath definiert. |
| Invert | Konfiguration | Kehrt das Ergebnis der gesamten Bedingung um. Bei Invert="true" wird aus einem erfüllten Ergebnis ein nicht erfülltes Ergebnis und umgekehrt. |
| IsEqual | Prüfung | Prüft, ob der Inhalt der angegebenen Variable dem über Compare oder ComparePath definierten Vergleichswert entspricht. |
| IsGreater | Prüfung | Prüft, ob der Inhalt der angegebenen Variable größer als der über Compare oder ComparePath definierte Vergleichswert ist. |
| IsGreaterEqual | Prüfung | Prüft, ob der Inhalt der angegebenen Variable größer als oder gleich dem über Compare oder ComparePath definierten Vergleichswert ist. |
| IsLess | Prüfung | Prüft, ob der Inhalt der angegebenen Variable kleiner als der über Compare oder ComparePath definierte Vergleichswert ist. |
| IsLessEqual | Prüfung | Prüft, ob der Inhalt der angegebenen Variable kleiner als oder gleich dem über Compare oder ComparePath definierten Vergleichswert ist. |
| IsModulo | Prüfung | Prüft, ob der Wert der angegebenen Variable ohne Rest durch den über Compare definierten Wert teilbar ist. Dies kann beispielsweise zur Unterscheidung gerader und ungerader Schleifendurchläufe verwendet werden. |
| IsOneOf | Prüfung | Prüft, ob der Inhalt der angegebenen Variable einem der bereitgestellten Vergleichswerte entspricht. Die Werte werden über Compare als kommagetrennte Liste oder über ComparePath aus einer weiteren Variable bereitgestellt. |
| MatchRegex | Prüfung | Prüft den Inhalt der angegebenen Variable anhand des im Attribut Compare hinterlegten regulären Ausdrucks. |
| RangeFrom | Untere Grenze | Definiert einen festen Mindestwert für InDateRange, InNumberRange oder InTextRange. |
| RangeFromPath | Untere Grenze | Definiert über einen Variablenpfad den Mindestwert für InDateRange, InNumberRange oder InTextRange. |
| RangeTo | Obere Grenze | Definiert einen festen Maximalwert für InDateRange, InNumberRange oder InTextRange. |
| RangeToPath | Obere Grenze | Definiert über einen Variablenpfad den Maximalwert für InDateRange, InNumberRange oder InTextRange. |
Hinweis
Nicht alle Attribute werden gleichzeitig verwendet.
Eine Bedingung benötigt genau eine geeignete Vergleichsart, beispielsweise
Exists,IsEqual,IsOneOfoderInDateRange. Abhängig von dieser Vergleichsart werden weitere Attribute zur Bereitstellung des Vergleichswertes oder der Bereichsgrenzen ergänzt.Die IntelliSense zeigt an der jeweiligen Position die technisch verfügbaren Attribute und vorgegebenen Werte an.
Zuordnung der Vergleichsarten
| Vergleichsart | Zu prüfender Pfad | Zusätzliche Angaben |
|---|---|---|
| Exists | Exists |
Keine Vergleichswerte erforderlich |
| IsEqual | IsEqual |
Compare oder ComparePath |
| IsGreater | IsGreater |
Compare oder ComparePath |
| IsGreaterEqual | IsGreaterEqual |
Compare oder ComparePath |
| IsLess | IsLess |
Compare oder ComparePath |
| IsLessEqual | IsLessEqual |
Compare oder ComparePath |
| IsModulo | IsModulo |
Compare |
| IsOneOf | IsOneOf |
Compare oder ComparePath |
| MatchRegex | MatchRegex |
Regulärer Ausdruck in Compare |
| InDateRange | InDateRange |
Mindestens eine untere oder obere Bereichsgrenze |
| InNumberRange | InNumberRange |
Mindestens eine untere oder obere Bereichsgrenze |
| InTextRange | InTextRange |
Mindestens eine untere oder obere Bereichsgrenze |
Vergleich mit einem festen Wert
Ein fester Vergleichswert wird über Compare angegeben.
<If
Compare="ja"
DataType="Text"
IsEqual="source.e_hatbetreuer">
...
</If>Vergleich mit einer weiteren Variable
Soll der Vergleichswert aus einer weiteren Variable stammen, wird ComparePath verwendet.
<If
ComparePath="source.mwtestvar2"
DataType="Text"
IsEqual="source.mwtestvar25">
...
</If>Einseitig begrenzte Bereiche
Bei Bereichsprüfungen müssen nicht zwingend eine untere und eine obere Grenze angegeben werden.
Nur mit einer unteren Grenze:
<If
DataType="Numerisch"
InNumberRange="source.e_alter"
RangeFrom="18">
...
</If>Damit werden alle Werte ab einschließlich 18 geprüft.
Nur mit einer oberen Grenze:
<If
DataType="Numerisch"
InNumberRange="source.e_alter"
RangeTo="17">
...
</If>Damit werden alle Werte bis einschließlich 17 geprüft.
Datumsgrenzen mit Platzhaltern
Bei Datumsbereichsprüfungen können feste Datumsangaben auch jahresbezogene Platzhalter enthalten.
<If
DataType="Datum"
InDateRange="general.today"
RangeFrom="01.12.yyyy"
RangeTo="31.12.yyyy">
...
</If>In diesem Beispiel wird geprüft, ob das aktuelle Datum innerhalb des Dezembers des jeweiligen Jahres liegt.
Invertieren einer Bedingung
Mit Invert="true" wird das Ergebnis einer Bedingung umgekehrt.
<If
DataType="Text"
Exists="source.f_vname"
Invert="true">
...
</If>Der enthaltene Verarbeitungszweig wird in diesem Fall ausgeführt, wenn source.f_vname keinen verwendbaren Wert enthält.
DataType
Das Attribut DataType legt fest, wie die an der Bedingung beteiligten Werte interpretiert und miteinander verglichen werden.
Zur Auswahl stehen:
| Wert | Verwendung |
|---|---|
| Text | Vergleich von Zeichenketten und textuellen Werten. |
| Numerisch | Vergleich numerischer Werte. |
| Datum | Vergleich von Datumswerten. |
Beispiel:
<If Compare="ja" DataType="Text" IsEqual="source.e_hatbetreuer">
...
</If>Hinweis
Der gewählte Datentyp sollte zum tatsächlichen Inhalt der verglichenen Werte passen.
Insbesondere bei numerischen Werten und Datumsangaben kann ein unpassender
DataTypezu einem unerwarteten Vergleichsergebnis führen.
Vergleich mit einem festen Wert
Über Compare wird ein fester Vergleichswert angegeben.
Der im Vergleichsoperator referenzierte Variableninhalt wird gegen diesen festen Wert geprüft.
<If Compare="ja" DataType="Text" IsEqual="source.e_hatbetreuer">
<TrueContainer>
<Text Content="Ein Betreuer ist vorhanden.">
</Text>
</TrueContainer>
</If>Die Bedingung ist erfüllt, wenn die Variable source.e_hatbetreuer den Wert ja besitzt.
Vergleich zweier Variablen
Soll der Inhalt einer Variablen mit dem Inhalt einer anderen Variablen verglichen werden, kann der Vergleichswert über ComparePath bereitgestellt werden.
<If
ComparePath="source.mwtestvar2"
DataType="Text"
IsEqual="source.mwtestvar25">
<TrueContainer>
<Variable Path="source.e_titeltats2">
</Variable>
</TrueContainer>
<FalseContainer>
<Variable Path="source.e_anredetats2">
</Variable>
</FalseContainer>
</If>In diesem Beispiel werden die Inhalte der beiden angegebenen Variablenpfade miteinander verglichen.
Prüfung auf einen vorhandenen Wert
Mit Exists wird geprüft, ob der angegebene Variablenpfad einen verwendbaren Wert bereitstellt.
<If DataType="Text" Exists="source.f_kvnr">
<TrueContainer>
<Text Content="Die Variable source.f_kvnr ist vorhanden.">
</Text>
</TrueContainer>
<FalseContainer>
<Text Content="Die Variable source.f_kvnr ist nicht vorhanden.">
</Text>
</FalseContainer>
</If>Diese Prüfung eignet sich insbesondere für optionale Informationen, die nicht in jedem Auftragsdatensatz enthalten sind.
TrueContainer
Der <TrueContainer> enthält alle XML-Elemente, die verarbeitet werden sollen, wenn die Bedingung des <If> erfüllt ist.
<TrueContainer>
<Text Content="Die Bedingung ist erfüllt.">
</Text>
</TrueContainer>Der Inhalt des <TrueContainer> richtet sich nach der Position des <If> innerhalb der Dokumentvorlage.
FalseContainer
Der <FalseContainer> enthält alle XML-Elemente, die verarbeitet werden sollen, wenn die Bedingung nicht erfüllt ist.
<FalseContainer>
<Text Content="Die Bedingung ist nicht erfüllt.">
</Text>
</FalseContainer>Der <FalseContainer> ist optional.
Wird er nicht angegeben, erfolgt bei einer nicht erfüllten Bedingung an dieser Stelle keine alternative Verarbeitung.
Mehrere Bedingungen mit Condition
Über das XML-Element <Condition> kann die im öffnenden <If> definierte Ausgangsbedingung um weitere Bedingungen ergänzt werden.
<If DataType="Text" Exists="source.f_kvnr">
<Condition
Connect="Or"
DataType="Text"
Exists="source.e_kvnr">
</Condition>
<TrueContainer>
...
</TrueContainer>
<FalseContainer>
...
</FalseContainer>
</If>In diesem Beispiel wird geprüft, ob entweder source.f_kvnr oder source.e_kvnr vorhanden ist.
Connect
Das Attribut Connect legt fest, wie eine zusätzliche <Condition> mit der vorhergehenden Bedingung verknüpft wird.
Zur Verfügung stehen:
| Wert | Bedeutung |
|---|---|
| And | Alle miteinander verknüpften Bedingungen müssen erfüllt sein. |
| Or | Mindestens eine der miteinander verknüpften Bedingungen muss erfüllt sein. |
| Xor | Genau eine der miteinander verknüpften Bedingungen muss erfüllt sein. |
And
Bei Connect="And" müssen sowohl die Ausgangsbedingung als auch die zusätzliche Bedingung erfüllt sein.
<If DataType="Text" Exists="source.f_kvnr">
<Condition
Connect="And"
DataType="Text"
Exists="source.e_kvnr">
</Condition>
<TrueContainer>
<Text Content="Beide Variablen sind vorhanden.">
</Text>
</TrueContainer>
</If>Or
Bei Connect="Or" genügt es, wenn mindestens eine der Bedingungen erfüllt ist.
<If DataType="Text" Exists="source.f_kvnr">
<Condition
Connect="Or"
DataType="Text"
Exists="source.e_kvnr">
</Condition>
<TrueContainer>
<Block>
<Content>
<Text Content="Die Variable source.f_kvnr oder source.e_kvnr ist vorhanden.">
</Text>
</Content>
</Block>
</TrueContainer>
<FalseContainer>
<Block>
<Content>
<Text Content="Die Variablen source.f_kvnr und source.e_kvnr sind nicht vorhanden.">
</Text>
</Content>
</Block>
</FalseContainer>
</If>Xor
Bei Connect="Xor" ist das Gesamtergebnis erfüllt, wenn genau eine der miteinander verknüpften Bedingungen erfüllt ist.
Sind beide Bedingungen erfüllt oder beide nicht erfüllt, wird der <FalseContainer> verarbeitet.
Xor eignet sich insbesondere für fachliche Fälle, in denen zwei Zustände einander ausschließen sollen.
Hinweis
Verschachtelte oder mehrfach miteinander verbundene
Xor-Bedingungen können schwer lesbar werden.Bei komplexeren Entscheidungen sollte geprüft werden, ob mehrere klar getrennte
<If>-Elemente oder ein<Case>übersichtlicher sind.
Verschachtelte If-Abfragen
Ein <If> kann innerhalb eines <TrueContainer> oder <FalseContainer> ein weiteres <If> enthalten.
Dadurch lassen sich mehrstufige Entscheidungen aufbauen.
<Block>
<Content>
<If Compare="," DataType="Text" IsEqual="abrunden1">
<TrueContainer>
<Text Content="Der abgerundete Wert ist: ">
</Text>
<Variable Path="m">
<Index>0</Index>
<Length>1</Length>
</Variable>
</TrueContainer>
<FalseContainer>
<If Compare="," DataType="Text" IsEqual="abrunden2">
<TrueContainer>
<Text Content="Der abgerundete Wert ist: ">
</Text>
<Variable Path="m">
<Index>0</Index>
<Length>2</Length>
</Variable>
</TrueContainer>
<FalseContainer>
<If Compare="," DataType="Text" IsEqual="abrunden3">
<TrueContainer>
<Text Content="Der abgerundete Wert ist: ">
</Text>
<Variable Path="m">
<Index>0</Index>
<Length>3</Length>
</Variable>
</TrueContainer>
</If>
</FalseContainer>
</If>
</FalseContainer>
</If>
</Content>
</Block>Die Render-Engine prüft zunächst das äußere <If>.
Nur wenn dessen Bedingung nicht erfüllt ist, wird das nächste <If> innerhalb des <FalseContainer> verarbeitet.
XML-Wissen
Ein verschachteltes
<If>wird nur erreicht und ausgewertet, wenn der umgebende Container tatsächlich verarbeitet wird.Bedingungen innerhalb eines nicht ausgewählten Containers werden nicht ausgeführt.
If auf Body-Ebene oder innerhalb eines Content
Die beiden folgenden Varianten prüfen fachlich dieselbe Bedingung, unterscheiden sich jedoch in der Ebene der erzeugten Dokumentstruktur.
Variante auf Body-Ebene
<If DataType="Text" Exists="source.f_kvnr">
<Condition
Connect="Or"
DataType="Text"
Exists="source.e_kvnr">
</Condition>
<TrueContainer>
<Block>
<Content>
<Text Content="Mindestens eine Krankenversichertennummer ist vorhanden.">
</Text>
</Content>
</Block>
</TrueContainer>
</If>Diese Variante erzeugt abhängig von der Bedingung einen vollständigen Block.
Variante innerhalb eines Content
<Block>
<Content>
<If DataType="Text" Exists="source.f_kvnr">
<Condition
Connect="Or"
DataType="Text"
Exists="source.e_kvnr">
</Condition>
<TrueContainer>
<Text Content="Mindestens eine Krankenversichertennummer ist vorhanden.">
</Text>
</TrueContainer>
</If>
</Content>
</Block>Diese Variante steuert ausschließlich einen Teil des bereits vorhandenen Blockinhalts.
Die zweite Variante benötigt weniger XML-Code, ist jedoch nur geeignet, wenn die bedingten Inhalte innerhalb desselben Blocks ausgegeben werden sollen.
Typische Kombinationen
Das <If>-Element wird häufig gemeinsam mit folgenden XML-Elementen verwendet:
| XML-Element | Typischer Einsatzzweck |
|---|---|
| Condition | Ergänzung weiterer Bedingungen |
| TrueContainer | Verarbeitung bei erfüllter Bedingung |
| FalseContainer | Alternative Verarbeitung bei nicht erfüllter Bedingung |
| Text | Bedingte Ausgabe statischer Inhalte |
| Variable | Bedingte Ausgabe dynamischer Werte |
| Reference | Bedingte Einbindung eines Bausteins |
| Setter | Bedingte Vorbereitung eines Wertes |
| If | Aufbau verschachtelter Entscheidungen |
Wann verwende ich If und wann Case?
<If> eignet sich insbesondere für:
- einzelne Ja-/Nein-Entscheidungen,
- Existenzprüfungen,
- Vergleiche zweier Werte,
- Bedingungen mit alternativem Verarbeitungsweg,
- logisch miteinander verknüpfte Bedingungen.
<Case> eignet sich dagegen häufig besser, wenn ein Variablenwert gegen mehrere mögliche Ausprägungen geprüft werden soll.
Beispiel:
Apfel
Birne
Kirsche
PflaumeMehrere tief verschachtelte <If>-Elemente können eine solche Entscheidung zwar abbilden, ein <Case> ist in diesem Fall jedoch meist übersichtlicher.
Typische Fehler
Falsche Position innerhalb der XML-Struktur
Ein <If> auf Body-Ebene benötigt innerhalb seiner Container eine zur Body-Ebene passende Struktur.
Ein direktes <Text> ohne umgebenden Block ist dort im Regelfall nicht die geeignete Struktur.
Innerhalb eines <Content> können dagegen direkte Ausgabeelemente verwendet werden.
Fester Wert und Variablenpfad werden verwechselt
Compare enthält einen festen Vergleichswert.
ComparePath verweist dagegen auf eine Variable, deren Inhalt als Vergleichswert verwendet wird.
Unpassender DataType
Wird ein numerischer Wert als Text oder ein Datum mit einem unpassenden Datentyp verglichen, kann das Ergebnis von der fachlichen Erwartung abweichen.
Fehlender FalseContainer
Ein fehlender <FalseContainer> ist syntaktisch nicht zwangsläufig problematisch.
Der Redakteur sollte jedoch bewusst entscheiden, ob bei einer nicht erfüllten Bedingung tatsächlich keine alternative Verarbeitung erfolgen soll.
Zu tiefe Verschachtelung
Mehrfach verschachtelte <If>-Elemente können schwer lesbar und wartbar werden.
Bei vielen möglichen Vergleichswerten sollte geprüft werden, ob <Case> die geeignetere Struktur ist.
Best Practices
- Wählen Sie den
DataTypepassend zu den verglichenen Werten. - Verwenden Sie
Comparefür feste Werte undComparePathfür variable Vergleichswerte. - Platzieren Sie das
<If>auf der Ebene, auf der die bedingte Struktur erzeugt werden soll. - Verwenden Sie
<Condition>für fachlich zusammengehörende Mehrfachbedingungen. - Nutzen Sie
And,OrundXorbewusst und halten Sie die resultierende Logik nachvollziehbar. - Verwenden Sie einen
<FalseContainer>, wenn ein alternativer Inhalt oder Verarbeitungsschritt erforderlich ist. - Vermeiden Sie unnötig tiefe Verschachtelungen.
- Nutzen Sie
<Case>, wenn mehrere mögliche Werte derselben Variable unterschieden werden sollen. - Prüfen Sie komplexe Bedingungen mit geeigneten Testdaten für alle möglichen Verarbeitungswege.
Technischer Hinweis
Während der Dokumentenerzeugung prüft die Render-Engine zunächst die im <If> definierte Ausgangsbedingung und anschließend alle ergänzenden <Condition>-Elemente.
Abhängig vom Gesamtergebnis wird entweder der <TrueContainer> oder – sofern vorhanden – der <FalseContainer> verarbeitet.
Nicht ausgewählte Container werden nicht verarbeitet. Darin enthaltene Ausgaben, Berechnungen, Setter, Referenzen oder weitere Bedingungen haben daher keinen Einfluss auf den aktuellen Renderprozess.