Case
Kurzbeschreibung
Das XML-Element
<Case>dient zur Auswahl eines Verarbeitungszweiges anhand des Inhalts einer Variablen.Der Variablenwert wird nacheinander mit den definierten
<When>-Elementen verglichen. Sobald eine Bedingung erfüllt ist, wird ausschließlich der zugehörige Verarbeitungszweig ausgeführt.Optional kann über
<Default>ein Standardfall definiert werden, der verarbeitet wird, wenn keine der definierten Bedingungen zutrifft.
Einordnung
Bereich: Bedingungen und Schleifen
Schwierigkeitsgrad: ⭐⭐⭐☆☆
Vorkenntnisse: Text · Variable
Empfohlener nächster Artikel: Math
Zweck
Mit <Case> können mehrere mögliche Werte einer Variablen übersichtlich verarbeitet werden.
Anstatt mehrere verschachtelte <If>-Abfragen aufzubauen, werden sämtliche möglichen Ausprägungen einer Variablen in einer gemeinsamen Struktur beschrieben.
Typische Einsatzgebiete sind:
- Statusauswertungen
- Parameterauswertungen
- Auswahl unterschiedlicher Bausteine
- unterschiedliche Textausgaben
- Verarbeitung fachlicher Kennzeichen
Grundsyntax
Ein <Case> besteht aus
- dem Variablenpfad,
- einem oder mehreren
<When>-Elementen, - optional einem
<Default>.
<Case Path="general.appvalidierung">
<When Compare="true">
...
</When>
<When Compare="false">
...
</When>
<Default>
...
</Default>
</Case>Position innerhalb der Dokumentvorlage
Das <Case>-Element kann sowohl direkt innerhalb des <Body> als auch innerhalb eines <Content> verwendet werden.
Die zulässigen Inhalte von <When> und <Default> richten sich nach der Position des <Case>.
Direkt unterhalb des Body
Auf Body-Ebene können vollständige XML-Strukturen verarbeitet werden.
Beispielsweise:
<Block><Reference>- weitere Strukturelemente
<Case Path="general.appvalidierung">
<When Compare="true">
<Reference
Name="21CKOPF"
RefId="1816b8e6-e3ef-431d-be73-317c7ae6a038"
RefName="21CKOPF">
</Reference>
</When>
</Case>Innerhalb eines Content
Innerhalb eines <Content> werden direkt Inhaltselemente verwendet.
<Block>
<Content>
<Case Path="general.appvalidierung">
<When Compare="true">
<Text Content="Text Nummer eins.">
</Text>
</When>
<Default>
<Text Content="Kein passender Fall.">
</Text>
</Default>
</Case>
</Content>
</Block>Wichtig
Die Inhalte der
<When>-Elemente müssen zur Position des<Case>innerhalb der Dokumentvorlage passen.
Ablauf der Verarbeitung
Die Render-Engine verarbeitet ein <Case> immer in derselben Reihenfolge.
Variable lesen
│
▼
When 1 prüfen
│
passt?
│
├── Ja ─────────────► Verarbeitung
│ │
│ ▼
│ Ende
│
└── Nein
│
▼
When 2 prüfen
...
Default
(falls vorhanden)XML-Wissen
Sobald ein passendes
<When>gefunden wurde, beendet die Render-Engine die Verarbeitung des<Case>.Nachfolgende
<When>-Elemente werden nicht mehr ausgewertet.
Attribute
Case
| Attribut | Beschreibung |
|---|---|
| Path | Enthält den Variablenpfad, dessen Inhalt ausgewertet werden soll. |
Hinweis
Das Attribut
Pathist erforderlich.
When
Ein <When> besitzt genau eine Vergleichsart.
Zur Verfügung stehen:
| Attribut | Beschreibung |
|---|---|
| Compare | Vergleicht den Variableninhalt mit einem festen Wert. |
| OneOf | Vergleicht den Variableninhalt mit mehreren möglichen Werten. |
| MatchRegex | Vergleicht den Variableninhalt anhand eines regulären Ausdrucks. |
Compare
Der einfachste Vergleich.
<When Compare="true">
...
</When>Der Verarbeitungszweig wird ausgeführt, wenn der Inhalt der im <Case> angegebenen Variable exakt dem angegebenen Wert entspricht.
OneOf
Mit OneOf können mehrere Vergleichswerte innerhalb eines einzigen <When> definiert werden.
Die Werte werden kommagetrennt angegeben.
<When OneOf="A,B,C,D">
...
</When>Der Verarbeitungszweig wird ausgeführt, wenn die Variable einen der angegebenen Werte besitzt.
Dadurch lassen sich mehrere einzelne <When>-Elemente zusammenfassen.
MatchRegex
Mit MatchRegex erfolgt der Vergleich über einen regulären Ausdruck.
<When MatchRegex="[A-Z]{3}[0-9]{5}">
...
</When>Diese Vergleichsart eignet sich insbesondere zur Prüfung strukturierter Inhalte.
Beispiele:
- Versicherungsnummern
- Postleitzahlen
- Aktenzeichen
- Identifikationsnummern
Default
Der <Default>-Container ist optional.
Er wird ausschließlich verarbeitet, wenn kein <When> zur Variablenausprägung passt.
<Default>
<Text Content="Wenn nichts anderes passt.">
</Text>
</Default>Wird kein <Default> definiert und trifft kein <When> zu, erfolgt an dieser Stelle keine Verarbeitung.
Praxisbeispiel
<Case Path="general.appvalidierung">
<When Compare="true">
<Text Content="Text Nummer eins.">
</Text>
</When>
<When Compare="false">
<Text Content="Text Nummer zwei.">
</Text>
</When>
<When Compare="not used">
<Reference
Name="21CKOPF"
RefId="1816b8e6-e3ef-431d-be73-317c7ae6a038"
RefName="21CKOPF">
</Reference>
</When>
<Default>
<Text Content="Wenn nichts anderes passt.">
</Text>
</Default>
</Case>Die einzelnen <When>-Elemente werden von oben nach unten geprüft.
Sobald ein passender Eintrag gefunden wurde, wird ausschließlich dessen Inhalt verarbeitet.
Case oder If?
Verwenden Sie <Case>, wenn mehrere mögliche Ausprägungen einer Variablen unterschieden werden sollen.
Typische Beispiele:
- Status
- Dokumentart
- Kennzeichen
- Parameterwerte
- Auswahlfelder
Verwenden Sie <If>, wenn
- eine Ja-/Nein-Entscheidung getroffen wird,
- Bedingungen logisch miteinander verknüpft werden,
- Werte größer oder kleiner verglichen werden,
- Existenzprüfungen durchgeführt werden.
Empfehlung
Mehrere verschachtelte
<If>-Elemente, die ausschließlich unterschiedliche Werte derselben Variablen prüfen, können häufig übersichtlicher durch ein<Case>ersetzt werden.
Typische Fehler
Reihenfolge der When-Elemente
Da die Verarbeitung beim ersten passenden <When> endet, sollten spezifischere Fälle vor allgemeineren Fällen definiert werden.
Fehlender Default
Ist kein <Default> vorhanden und trifft kein <When> zu, erfolgt keine Verarbeitung.
Der Redakteur sollte bewusst entscheiden, ob dieses Verhalten fachlich gewünscht ist.
OneOf statt mehrerer Compare
Werden mehrere Werte gleich behandelt, ist ein einzelnes <When OneOf="..."> meist übersichtlicher als mehrere identische <When Compare="...">.
Best Practices
- Verwenden Sie
<Case>für die Auswertung mehrerer möglicher Werte einer Variablen. - Platzieren Sie häufig auftretende Fälle möglichst weit oben.
- Nutzen Sie
OneOf, wenn mehrere Werte denselben Verarbeitungsweg besitzen. - Verwenden Sie
Defaultfür einen definierten Standardfall. - Nutzen Sie
MatchRegexnur bei fachlich erforderlichen Mustervergleichen. - Verwenden Sie
<If>für logische Bedingungen und<Case>für Wertauswahlen.
Technischer Hinweis
Die Render-Engine liest zunächst den im Attribut Path angegebenen Variablenwert.
Anschließend werden sämtliche <When>-Elemente der Reihe nach ausgewertet.
Beim ersten passenden <When> wird dessen Inhalt verarbeitet und die Auswertung des <Case> beendet.
Erst wenn kein passender Fall gefunden wurde, wird – sofern vorhanden – der Inhalt des <Default> verarbeitet.