Zum Inhalt springen

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 4

Jede Zeile enthält wiederum mehrere Spalten.

Zeile

├── Leistungsnummer
├── Datum
├── Betrag
└── Bemerkung

Wä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 Dokument

Die 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.Spaltenname

angesprochen.

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

datablock

angegeben,

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


Ausgabe

Dadurch 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 ausgeben

Denken 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

.current

bezieht 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.
Zuletzt aktualisiert am