Zum Inhalt springen

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 mit And, Or oder Xor verknü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 vorhanden

Es 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:

  1. einer Vergleichsart, beispielsweise IsEqual, Exists oder InDateRange,
  2. dem zu prüfenden Variablenpfad,
  3. gegebenenfalls einem festen oder variablen Vergleichswert,
  4. optionalen Einstellungen wie DataType, Invert oder Format.
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, IsOneOf oder InDateRange. 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 DataType zu 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
Pflaume

Mehrere 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 DataType passend zu den verglichenen Werten.
  • Verwenden Sie Compare für feste Werte und ComparePath fü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, Or und Xor bewusst 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.

Zuletzt aktualisiert am