Iterate
Iterate
Kurzbeschreibung
Das XML-Element
<Iterate>dient dazu, über tabellarische Daten zu iterieren.Für jede Zeile eines Datenblocks wird der Inhalt des
<Iterate>einmal vollständig ausgeführt.
<Iterate>bildet damit die Grundlage für die Ausgabe von Listen, Tabellen oder wiederkehrenden Datensätzen innerhalb einer Dokumentvorlage.
Einordnung
Bereich: Bedingungen und Schleifen
Schwierigkeitsgrad: ⭐⭐⭐⭐☆
Vorkenntnisse: Block · Variable · If
Siehe auch
- Variable
- If
- Block
Zweck
Nicht jeder Auftrag enthält nur einzelne Werte wie Name, Anschrift oder Geburtsdatum.
Häufig müssen mehrere gleichartige Datensätze verarbeitet werden, beispielsweise:
- Rechnungspositionen
- Leistungsübersichten
- Kontoauszüge
- Buchungen
- Medikamentenlisten
- beliebige andere Tabellen
Hierfür wird <Iterate> verwendet.
Für jede Zeile eines Datenblocks wird der Inhalt des <Iterate> einmal ausgeführt. :contentReference[oaicite:0]{index=0}
Was ist ein Datablock?
Die Grundlage eines <Iterate> ist immer ein sogenannter Datablock.
Ein Datablock ist eine tabellarische Datenstruktur, die aus mehreren Zeilen besteht.
Vereinfacht lässt sich ein Datablock wie folgt darstellen:
Datablock "Leistungen"
├── Zeile 1
├── Zeile 2
├── Zeile 3
└── Zeile 4Jede Zeile enthält wiederum mehrere Spalten.
Zeile
├── Leistungsnummer
├── Datum
├── Betrag
└── BemerkungWährend der Ausführung verarbeitet <Iterate> jede Zeile nacheinander.
Woher kommen Datablocks?
Datablocks gehören nicht automatisch zu jedem Auftrag.
Sie müssen vom aufrufenden System bereitgestellt werden.
Typische Quellen sind:
- 21c|ng
- der Prozess-Adapter
- andere angebundene Fachverfahren
Der Redakteur muss wissen,
- ob ein Auftrag Datablocks enthält und
- wie der jeweilige Datablock heißt.
Ohne diese Information kann <Iterate> nicht verwendet werden. :contentReference[oaicite:1]{index=1}
Wichtig
Ein
<Iterate>kann ausschließlich über vorhandene Datablocks iterieren.Existiert kein entsprechender Datablock oder ist dessen Name nicht bekannt, kann keine Schleife ausgeführt werden.
Grundsyntax
<Iterate Path="Leistungen">
...
</Iterate>Das Attribut Path gibt den Namen des Datablocks an, der verarbeitet werden soll. :contentReference[oaicite:2]{index=2}
Position innerhalb der Dokumentvorlage
<Iterate> kann innerhalb des <Body> auf jeder Ebene verwendet werden.
Innerhalb eines <Iterate> können sämtliche XML-Elemente verwendet werden.
Auch ein weiteres <Iterate> ist zulässig. :contentReference[oaicite:3]{index=3}
Beispielsweise:
<Body>
<Iterate Path="Leistungen">
<Block>
<Content>
...
</Content>
</Block>
</Iterate>
</Body>Zusammenspiel mit Table
<Iterate> und <Table> werden häufig gemeinsam verwendet.
Während <Iterate> die Daten eines Datablocks Zeile für Zeile verarbeitet, übernimmt <Table> die tabellarische Darstellung dieser Daten im Dokument.
Vereinfacht gilt:
Datablock
│
▼
<Iterate>
│
│ verarbeitet jede Zeile
▼
<Table>
│
│ stellt die Daten tabellarisch dar
▼
Fertige Tabelle im DokumentDie beiden XML-Elemente ergänzen sich daher ideal.
<Iterate>steuert welche Daten verarbeitet werden.<Table>steuert wie diese Daten dargestellt werden.
Ein <Iterate> kann selbstverständlich auch ohne <Table> verwendet werden.
Beispielsweise um
- einzelne Absätze,
- Aufzählungen,
- Textblöcke,
- Barcodebereiche oder
- beliebige andere Inhalte
für jede Zeile eines Datablocks zu erzeugen.
In der Praxis wird <Iterate> jedoch besonders häufig zusammen mit <Table> eingesetzt, um Listen oder tabellarische Übersichten auszugeben.
Hinweis
Das XML-Element
<Table>beschreibt ausschließlich die Darstellung einer Tabelle.Die eigentliche Verarbeitung der einzelnen Datensätze übernimmt
<Iterate>.
Attribute
| Attribut | Beschreibung |
|---|---|
| Path | Name des Datablocks, der verarbeitet werden soll. |
Neue Variablen innerhalb eines Iterate
Innerhalb eines <Iterate> stehen zusätzliche Variablen zur Verfügung.
Diese beziehen sich immer auf den aktuell verarbeiteten Datablock beziehungsweise die aktuelle Zeile. :contentReference[oaicite:4]{index=4}
| Variable | Bedeutung |
|---|---|
Tabelle.current |
Aktuelle Zeile |
Tabelle.current-index |
Laufende Nummer der aktuellen Zeile |
Tabelle.count |
Anzahl aller Zeilen |
Tabelle.blockname |
Name des Datablocks |
Tabelle.blocktitle |
Titel des Datablocks |
Tabelle.current.Spaltenname |
Wert einer bestimmten Spalte der aktuellen Zeile |
Zugriff auf Spalten
Der eigentliche Inhalt eines Datablocks wird über
Datablock.current.Spaltennameangesprochen.
Beispiel:
<Variable Path="Leistungen.current.Betrag">
</Variable>Hier wird der Wert der Spalte Betrag aus der aktuell verarbeiteten Zeile ausgegeben.
Beispiele
Einzelnen Datablock ausgeben
<Iterate Path="Tabelle1">
<Block>
<Content>
<Variable Path="Tabelle1.current.Spalte1">
</Variable>
</Content>
</Block>
</Iterate>Für jede Zeile der Tabelle wird ein neuer Block erzeugt. :contentReference[oaicite:5]{index=5}
Zwei Datablocks verarbeiten
Mehrere Datablocks können unabhängig voneinander verarbeitet werden.
<Iterate Path="Tabelle1">
...
</Iterate>
<Iterate Path="Tabelle2">
...
</Iterate>Beide Schleifen arbeiten unabhängig voneinander. :contentReference[oaicite:6]{index=6}
Alle vorhandenen Datablocks durchlaufen
Wird als Path
datablockangegeben,
werden nicht die Zeilen einer Tabelle, sondern alle vorhandenen Datablocks eines Auftrags durchlaufen. :contentReference[oaicite:7]{index=7}
Dadurch können beispielsweise unterschiedliche Tabellen gesucht oder ausgewertet werden.
Datablocks filtern
Häufig wird <Iterate> zusammen mit <If> verwendet.
Iterate
↓
If
↓
AusgabeDadurch kann geprüft werden, ob der aktuell verarbeitete Datablock der gewünschte ist.
Die Syntaxbeschreibung zeigt hierfür den Vergleich des blockname mit einem gewünschten Tabellennamen. :contentReference[oaicite:8]{index=8}
Iterate innerhalb eines Iterate
Ein <Iterate> kann innerhalb eines weiteren <Iterate> verwendet werden.
Dadurch lassen sich beispielsweise mehrere Tabellen durchlaufen und anschließend die Zeilen einer ausgewählten Tabelle ausgeben. :contentReference[oaicite:9]{index=9}
Datablocks
↓
gewünschten Datablock finden
↓
Zeilen dieses Datablocks ausgebenDenken in Schleifen
Beim Arbeiten mit <Iterate> hilft folgendes Modell:
Vor Iterate
↓
Es existiert eine Tabelle.
↓
Während Iterate
↓
Es gibt immer genau eine aktuelle Zeile.
↓
Nach Iterate
↓
Alle Zeilen wurden verarbeitet.Der Ausdruck
.currentbezieht sich deshalb immer auf genau diese aktuell verarbeitete Zeile.
Typische Einsatzgebiete
<Iterate> wird häufig verwendet für:
- Kontoauszüge
- Rechnungspositionen
- Leistungsübersichten
- Buchungslisten
- Arzneimittellisten
- Tabellen innerhalb von Serienbriefen
Best Practices
- Den Namen des Datablocks vor der Entwicklung klären.
- Aussagekräftige Spaltennamen verwenden.
- Schleifen möglichst übersichtlich halten.
- Bedingungen innerhalb der Schleife nur einsetzen, wenn sie fachlich erforderlich sind.
- Verschachtelte
<Iterate>nur verwenden, wenn sie wirklich benötigt werden.
XML-Wissen
Während einer Schleife existieren zusätzliche Variablen wie
.current.count.current-index
nur innerhalb des gerade aktiven <Iterate>.
Außerhalb der Schleife stehen diese Variablen nicht mehr zur Verfügung.
Developer-Tipp
Der schwierigste Teil bei
<Iterate>ist meist nicht die XML-Syntax.Entscheidend ist das Verständnis der Datenstruktur des Auftrags.
Klären Sie deshalb vor der Entwicklung immer,
- welche Datablocks vorhanden sind,
- wie diese heißen und
- welche Spalten sie enthalten.