Verfügbar ab Version 8.2.0
Inhalt
Schleifen sind ein fortgeschrittenes Element der Ablaufsteuerung, mit dem Sie eine Reihe von Aktionen mehrfach ausführen können, möglicherweise mit unterschiedlichen Daten. Wenn Ihr Formular beispielsweise ein sich wiederholendes Eingabefeld für E-Mails enthält, können Sie für jede eingegebene E-Mail einmal eine E-Mail senden.
formcycle bietet drei verschiedene Arten von Schleifen. Eine einfache Schleife und zwei erweiterte Schleifen:
- Schleife (Liste): Ermöglicht die Iteration über eine vordefinierte Liste von Elementen, z. B. wiederholte Formularelemente oder durch Kommata getrennte Werte.
- Kopf- und fußgesteuerte Schleife: Ermöglicht es Ihnen, über eine Bedingung manuell zu entscheiden, wann die Schleife angehalten werden soll.
Weiter unten finden Sie eine ausführliche Beschreibung dieser verschiedenen Schleifenarten. Im Folgenden werden einige bemerkenswerte Punkte zu Schleifen im Allgemeinen erläutert.
Platzhalter
Wie Sie vielleicht wissen, können Sie Platzhalter wie [%$sql_statement.RESULT] verwenden, um auf die Werte zuzugreifen, die von einer Workflow-Aktion namens sql_statement bereitgestellt werden. Solche Ergebnisplatzhalter sind verfügbar, nachdem eine Aktion erfolgreich ausgeführt wurde.
Schleifen liefern ebenfalls ein Ergebnis, das die Anzahl der Durchläufe der Schleife enthält. Schleifen liefern aber auch Daten, während die Schleife (und die darin enthaltenen Aktionen) ausgeführt werden, auf die Sie mit [%$schleifen_name.CURRENT%] zugreifen können.
Bei allen Schleifen können Sie über [%$schleifen_name.CURRENT.index%] auf den Index des aktuellen Schleifen-Iterators zugreifen (0 für die erste Iteration, 1 für die zweite Iteration usw.). Bei einigen Schleifen, wie z.B. der for-each-Schleife, können Sie auch auf die Daten des aktuellen Elements über [%$schleifen_name .CURRENT.item%] zugreifen.
Dateien aus vorigen Aktionen
Bei den meisten Workflow-Aktionen, bei denen Sie Dateien auswählen können (z. B. Datei ausliefern), können Sie auch eine vorherige Aktion, die Dateien erstellt (z. B. PDF-Datei befüllen), als Dateiquelle auswählen. Bei der Verwendung innerhalb einer Schleife müssen Sie zwischen zwei verschiedenen Fällen unterscheiden, je nach der relativen Position der beiden Aktionen:
- Sowohl die Aktion, die die Dateien bereitstellt, als auch die Aktion, die die Dateien verbraucht, befinden sich in derselben Schleife: Es wird nur die Datei aus der aktuellen Schleifeniteration verwendet.
Sie können z. B. eine Aktion Word-Datei befüllen gefolgt von einer E-Mail-Aktion in dieselbe Schleife einfügen und das generierte Word-Dokument als Anlage für die E-Mail auswählen. Dann wird bei jeder Schleifeniteration ein Word-Dokument erzeugt und an die gesendete E-Mail angehängt. - Die Aktion, die die Datei verbraucht, befindet sich außerhalb der Schleife, die die Aktion enthält, die die Dateien bereitstellt: Alle Dateien, die von der Aktion erzeugt werden, werden verwendet.
Sie können beispielsweise über ein wiederholtes Fieldset iterieren und eine Aktion Word-Datei befüllen innerhalb einer Schleife verwenden, um ein Word-Dokument mit den Formulardaten zu erstellen, die für jede Wiederholung des Fieldsets übermittelt wurden. Dann können Sie eine Datei-Ausliefern-Aktion nach der Schleife platzieren und die Aktion "Word-Datei-Befüllen" als Dateiquelle auswählen. Dadurch wird ein Download mit allen Word-Dokumenten aus allen Schleifenwiederholungen erstellt.
Schleifenwiederholungen manuell anhalten
Der häufigste Anwendungsfall ist die Schleife (Liste) (in der Programmierung for-each-Schleife genannt), die eine vordefinierte Liste von Elementen durchläuft. Normalerweise wollen Sie diese Schleife bis zum Ende laufen lassen und nicht manuell stoppen. Für die kopf- und fußgesteuerte Schleife (in der Programmierung while- und do-while-Schleife genannt) sowie für einige fortgeschrittene Anwendungsfälle der for-each-Schleife möchten Sie vielleicht mehr Kontrolle darüber haben, wann und wie die Schleifenwiederholungen angehalten oder übersprungen werden sollen. formcycle bietet zwei Workflow-Aktionen, mit denen Sie dies erreichen können:
- Break (Schleife beenden) -- Wenn eine Break-Aktion ausgeführt wird, hält sie die aktuelle Schleife vollständig an und springt an das Ende der Schleife. Alle weiteren Iterationen werden übersprungen.
- Continue (nächster Schleifendurchgang) -- Wenn eine Continue-Aktion ausgeführt wird, überspringt sie die aktuelle Schleifeniteration, springt an den Anfang der Schleife zurück und fährt mit der nächsten Schleifeniteration fort.
Sie können diese Aktionen direkt in einer Schleife verwenden, aber normalerweise wollen Sie eine Schleife nur dann anhalten oder überspringen, wenn eine bestimmte Bedingung erfüllt ist. Um dies zu erreichen, können Sie Ablaufsteuerungsaktionen wie Fallunterscheidung oder Bedingung verwenden und die Break- oder Continue-Aktion in einen der Zweige der Ablaufsteuerung einfügen.
Diese beiden Aktionen müssen innerhalb einer Schleife platziert werden, da sonst ein Validierungsfehler auftritt, wenn Sie versuchen, den Workflow zu speichern.
Standardmäßig wird die nächstgelegene Schleife, die eine Break- oder Continue-Aktion enthält, angehalten oder übersprungen. Optional können Sie bei beiden Aktionen ein Schleifenziel auswählen. Bei verschachtelten Schleifen mit einer Schleife innerhalb einer anderen Schleife können Sie diese Funktion verwenden, um die äußere Schleife aus der inneren Schleife heraus anzuhalten oder zu überspringen.
Bewegen Sie den Mauszeiger über die Unterbrechungs- oder Fortsetzungsaktion, um das Schleifenziel zu markieren, auf das sich diese Aktion auswirkt.
Beschränkungen
- Schleifen können unbegrenzt verschachtelt werden (eine Schleife in eine andere Schleife legen).
- Die Gesamtzahl der Aktionen, die während der Ausführung eines Workflows ausgeführt werden können, ist durch formcycle begrenzt. Diese Grenze ist eine konfigurierbare systemweite Einstellung, die (derzeit) auf 2000 festgelegt ist. Wenn zu viele Aktionen als Ergebnis einer Schleife ausgeführt werden, bricht formcycle den Workflow ab. Dies ist eine Sicherheitsmaßnahme, um Endlosschleifen zu verhindern. Wenn Sie die for-each-Schleife verwenden, brauchen Sie sich in der Regel keine Gedanken über dieses Problem zu machen, da diese Art von Schleife keine Endlosschleifen zulässt. Wenn Sie die erweiterten while- oder do-while-Schleifen verwenden und an die Aktionsgrenze stoßen, müssen Sie möglicherweise überprüfen, ob Ihre Schleife ein klar definiertes Ende hat.
Schleifenarten
Listenschleife
Mit der Listenschleife können Sie eine Quelle mit einer Liste von Elementen auswählen und die Aktionen innerhalb der Schleife einmal für jedes Element ausführen. Diese Schleife wird manchmal auch For-Each-Schleife genannt.
Listenschleifen sind die gebräuchlichste Art von Schleifen und sollten nach Möglichkeit verwendet werden. Ziehen Sie die nachfolgend beschriebenen erweiterten Schleifentypen nur dann in Betracht, wenn eine Listenschleife Ihren Anforderungen nicht genügt. Die beiden wichtigsten Vorteile der Listenschleife gegenüber den erweiterten Schleifen sind:
- Einfache Bedienung -- Sie wählen einfach die Elemente aus, über die Sie iterieren möchten. Das aktuelle Element ist bei jedem Durchlauf der Schleife verfügbar, ohne dass Sie mit benutzerdefinierten Ausdrücken, Skripten oder Plugins auf dieses Element zugreifen müssen.
- Wohldefiniertes Ende -- Sobald das letzte Element erreicht wurde, stoppt die Listenschleife. Bei fortgeschrittenen Schleifen müssen Sie eine benutzerdefinierte Bedingung festlegen, wann die Schleife angehalten werden soll. Versehentliche Fehler in dieser Bedingung können dazu führen, dass die Schleife ewig läuft, was Ressourcen verbraucht, die Ausführung anderer Arbeitsabläufe verhindert und die Zeit für das Senden eines Formulars verlängert.
Die folgenden Listen-Quellen sind derzeit verfügbar:
(allgemein)
- Formularfeldwiederholungen
- Wählen Sie ein Formularfeld, einen Container oder ein Fieldset aus, der im Formular-Designer als wiederholt markiert wurde. Sie können auch ein Formularfeld innerhalb eines wiederholten Containers auswählen. Die Schleife iteriert dann über jede vorhandene Wiederholung.
Während der Schleife kann auf das aktuelle Element über den Platzhalter [%$loop_name.CURRENT.Element%] zugegriffen werden und enthält die Werte aller Elemente innerhalb dieser Wiederholung. Wenn Sie beispielsweise über ein wiederholtes Fieldset namens fsPersonendaten iterieren und dieses Fieldset die Eingabefelder tfVorname und tfNachname enthält, verweisen [%$loop_name.CURRENT.item.tfVorname%] und [%$loop_name.CURRENT.item.tfNachname%] auf den aktuellen Wert für den Vornamen bzw. den Nachnamen.
Wenn Sie diese Art von Schleife verwenden, werden außerdem alle Verweise auf Formularfelder zu dem Wert der aktuellen Wiederholung aufgelöst. In Fortsetzung des obigen Beispiels ergibt der Formularplatzhalter [%tfVorname%] den Vornamen der aktuellen Wiederholung, wenn er in einer Aktion innerhalb der Schleife verwendet wird.
Die Aktion HTTP-Request bietet zum Beispiel eine Option, mit der Sie die Werte eines Formularfeldes in die Anfrage aufnehmen können. Eine Schleife über wiederholte Formularfelder wirkt sich auch auf solche Aktionen aus: Innerhalb der Schleife werden nur die Werte der aktuellen Wiederholung in die HTTP-Anfrage aufgenommen. Dies gilt auch für die Aktion Formularwerte ändern: Bei Verwendung innerhalb einer Schleife werden nur die Werte der aktuellen Wiederholung geändert. - Formularfeldwerte
- Wählen Sie ein Formularfeld aus, das mehrere Werte enthalten kann, z. B. ein Kontrollkästchen. Die Schleife iteriert dann über jeden Wert.
Während der Schleife ist das aktuelle Element über den Platzhalter [%$loop_name.CURRENT.item.values%] zugänglich und enthält alle Werte für den aktuellen Index aus allen vorhandenen Wiederholungen. Wenn das Element nicht wiederholt wird, gibt es nur einen Wert, auf den Sie über [%$loop_name.CURRENT.item.values[0]%] zugreifen können.- Beispiel: Angenommen, es gibt ein Auswahlfeld mit dem Namen selHobbies und den folgenden Optionen:
- Wert: 1, Anzeigename: Lesen
- Wert: 2, Anzeigename: Schwimmen
- Wert: 3, Anzeigename: Wandern
- Formularfeldwiederholung 1: Lesen, Wandern
- Formularfeldwiederholung 2: Schwimmen
- Formularfeldwiederholung 3: Lesen, Schwimmen, Wandern
- Schleifenwiederholung 1
- [%$Schleife über alle Kinder.CURRENT.item.values['tfNameKind'][0]%] ist "Anton"
(entspricht [%tfNameKind%]) - [%$Schleife über alle Kinder.CURRENT.item.values['selHobbies'][0]%] ist "1" ("Lesen")
- [%$Schleife über alle Kinder.CURRENT.item.values['selHobbies'][1]%] ist "3" ("Wandern")
- [%$Schleife über alle Kinder.CURRENT.item.values['selHobbies'][2]%] wird nicht aufgelöst
- [%$Schleife über alle Kinder.CURRENT.item.values['tfNameKind'][0]%] ist "Anton"
- Schleifenwiederholung 2
- [%$Schleife über alle Kinder.CURRENT.item.values['tfNameKind'][0]%] ist "Berta"
(entspricht [%tfNameKind%]) - [%$Schleife über alle Kinder.CURRENT.item.values['selHobbies'][0]%] ist "2" ("Schwimmen")
- [%$Schleife über alle Kinder.CURRENT.item.values['selHobbies'][1]%] wird nicht aufgelöst
- [%$Schleife über alle Kinder.CURRENT.item.values['selHobbies'][2]%] wird nicht aufgelöst
- [%$Schleife über alle Kinder.CURRENT.item.values['tfNameKind'][0]%] ist "Berta"
- Schleifenwiederholung 3
- [%$Schleife über alle Kinder.CURRENT.item.values['tfNameKind'][0]%] ist "Cäsar"
(entspricht [%tfNameKind%]) - [%$Schleife über alle Kinder.CURRENT.item.values['selHobbies'][0]%] ist "1" ("Lesen")
- [%$Schleife über alle Kinder.CURRENT.item.values['selHobbies'][1]%] ist "2" ("Schwimmen")
- [%$Schleife über alle Kinder.CURRENT.item.values['selHobbies'][2]%] ist "3" ("Wandern"
- [%$Schleife über alle Kinder.CURRENT.item.values['tfNameKind'][0]%] ist "Cäsar"
- Zeichengetrennte Werte
- Geben Sie eine Liste von Werten ein, die durch ein Zeichen Ihrer Wahl getrennt sind. Die Werte werden an dem konfigurierten Trennzeichen geteilt, und die Schleife durchläuft dann jeden Wert. Während der Iteration verweist der Platzhalter [%$loop_name.CURRENT.item%] auf den aktuellen Wert.
In der Regel werden Sie einen Platzhalter verwenden wollen, die eine Liste von Werten enthält, die aufgeteilt werden müssen. Standardmäßig werden die Werte durch Kommas getrennt, aber es gibt mehrere Optionen, mit denen Sie die Aufteilung der Werte anpassen können. Oben finden Sie eine Liste mit Beispielwerten, die veranschaulichen, wie die Werte formatiert werden müssen, damit sie richtig aufgeteilt werden. Die folgenden Optionen sind verfügbar: - Trennzeichen -- Das Zeichen, das die Werte begrenzt, z. B. ein Komma (,) oder Semikolon (;).
- Steuerzeichen und Zeilenumbrüche als Trennzeichen behandeln -- Wenn aktiviert, werden Zeilenumbrüche und andere Steuerzeichen als Trennzeichen zwischen Werten behandelt. Wenn deaktiviert, werden Zeilenumbrüche und Steuerzeichen in den Wert einbezogen.
- Öffnendes/schließendes Anführungszeichen -- Zeichen, die verwendet werden können, um einen Wert in Anführungszeichen zu setzen, der Sonderzeichen enthält, wie z. B. ein einfaches (') oder doppeltes (") Anführungszeichen. Sie können auch unterschiedliche öffnende und schließende Zeichen verwenden, z. B. wenn Sie Werte in spitzen Klammern setzen, wie <Element 1>, <Element 2>, <Element 3>.
- Zweimaliges Anführungszeichen fügt wörtliches Anführungszeichen ein -- Wenn diese Option aktiviert ist, wird ein wiederholtes Anführungszeichen innerhalb eines Anführungswertes als wörtliches Anführungszeichen behandelt. Zum Beispiel: "Romeo sagte: "Ich liebe dich""." Wenn deaktiviert, wird das erste Anführungszeichen als Ende des Anführungszeichens und das nächste Anführungszeichen als Beginn eines neuen Anführungszeichens behandelt.
- Escape-Zeichen -- Das Zeichen, das verwendet werden kann, um Sonderzeichen innerhalb eines in Anführungszeichen gesetzten Wertes zu vermeiden, wie z. B. ein Backslash (\). Das obige Beispiel könnte auch so geschrieben werden: "Romeo sagte: \"Ich liebe dich\"."
- Leerzeichen am Anfang und Ende jedes Wertes entfernen -- Wenn aktiviert, werden Leerzeichen am Anfang und Ende jedes Wertes entfernt.
- Leere Werte entfernen -- Wenn aktiviert, werden leere Werte weggelassen. Kann in Kombination mit der obigen Option verwendet werden, um Werte auszulassen, die nur aus Leerzeichen bestehen.
- Leere Werte entfernen -- Wenn aktiviert, werden leere Werte weggelassen. Kann in Kombination mit der obigen Option verwendet werden, um Werte auszulassen, die nur aus Leerzeichen bestehen.
- Zeilen zeichengetrennter Werte
- Ähnlich zu dem obigen (zeichengetrennte Werte), erlaubt es aber, über mehrere Zeilen (Reihen) zu iterieren, wobei jede Zeile wiederum aus mehreren zeichengetrennten Werten besteht. Damit lässt sich etwa eine CSV-Datei durchlaufen. Während der Iteration verweist der Platzhalter [%$loop_name.CURRENT.item%] auf die aktuelle Zeile.
- Erste Zeile als Kopfzeile behandeln -- Wenn aktiviert, wird die erste Zeile (erste Reihe) als Kopfzeile behandelt und ist nicht in den iterierten Zeilen enthalten. Die Werte in der Kopfzeile geben den Namen der jeweiligen Spalte an. Falls die Kopfzeile beispielsweise die Wert ID, name und email enthält, dann kann mit den Platzhaltern [%$loop_name.CURRENT.item.ID%], [%$loop_name.CURRENT.item.name%] und [%$loop_name.CURRENT.item.email%] auf den Wert der entsprechende Spalte in der aktuellen Zeile zugegriffen werden. Ist diese Option deaktiviert, kann der Spaltenindex als Name verwendet werden: [%$loop_name.CURRENT.item.0%] (1. Spalte) oder [%$loop_name.CURRENT.item.1]%] (2. Spalte).
- Trennzeichen -- Das Zeichen, das die Werte begrenzt, z. B. ein Komma (,) oder Semikolon (;).
- Steuerzeichen und Zeilenumbrüche als Trennzeichen behandeln -- Wenn aktiviert, werden Zeilenumbrüche und andere Steuerzeichen als Trennzeichen zwischen Werten behandelt. Wenn deaktiviert, werden Zeilenumbrüche und Steuerzeichen in den Wert einbezogen.
- Öffnendes/schließendes Anführungszeichen -- Zeichen, die verwendet werden können, um einen Wert in Anführungszeichen zu setzen, der Sonderzeichen enthält, wie z. B. ein einfaches (') oder doppeltes (") Anführungszeichen. Sie können auch unterschiedliche öffnende und schließende Zeichen verwenden, z. B. wenn Sie Werte in spitzen Klammern setzen, wie <Element 1>, <Element 2>, <Element 3>.
- Zweimaliges Anführungszeichen fügt wörtliches Anführungszeichen ein -- Wenn diese Option aktiviert ist, wird ein wiederholtes Anführungszeichen innerhalb eines Anführungswertes als wörtliches Anführungszeichen behandelt. Zum Beispiel: "Romeo sagte: "Ich liebe dich""." Wenn deaktiviert, wird das erste Anführungszeichen als Ende des Anführungszeichens und das nächste Anführungszeichen als Beginn eines neuen Anführungszeichens behandelt.
- Escape-Zeichen -- Das Zeichen, das verwendet werden kann, um Sonderzeichen innerhalb eines in Anführungszeichen gesetzten Wertes zu vermeiden, wie z. B. ein Backslash (\). Das obige Beispiel könnte auch so geschrieben werden: "Romeo sagte: \"Ich liebe dich\"."
- Leerzeichen am Anfang und Ende jedes Wertes entfernen -- Wenn aktiviert, werden Leerzeichen am Anfang und Ende jedes Wertes entfernt.
- Leere Werte entfernen -- Wenn aktiviert, werden leere Werte weggelassen. Kann in Kombination mit der obigen Option verwendet werden, um Werte auszulassen, die nur aus Leerzeichen bestehen.
- Leere Zeilen entfernen -- Wenn aktiviert, werden leere Zeilen ausgelassen. Leere Zeilen sind solche, welche nur aus Leerzeichen bestehen und keinerlei Trennzeichen enthalten.
- Zeilenumbrüche -- Gibt an, welche Arten von Zeilenumbrüchen erkannt werden sollen. Bei Zweifeln über diese Option sollten alle Auswahlmöglichkeiten aktiviert gelassen werden.
- JSON-Wert (Workflow-Aktions-Resultat)
- Geben Sie eine Zeichenfolge ein, die einen gültigen JSON-Wert darstellt. Die Schleife iteriert dann über jedes Element dieses JSON-Werts. Führende und nachfolgende Leerzeichen in der Zeichenkette werden ignoriert.
Ein häufiger Anwendungsfall sind die Ergebnisse von Workflow-Aktionen. Alle Workflow-Aktionen geben ihr Ergebnis als JSON-Wert zurück. Mit der Aktion Datenbank-Statement können Sie zum Beispiel eine SQL-Abfrage ausführen, um Daten aus einer Datenbank abzurufen. Sie gibt eine Liste von Zeilen mit den erhaltenen Daten zurück. Um über jede Ergebniszeile zu iterieren, können Sie eine Listenschleife mit einer JSON-Datenquelle verwenden und den Platzhalter [%$sql_statement.RESULT.rows$%] als JSON-Wert eingeben.
Das genaue Verhalten hängt vom Typ des JSON-Wertes ab:- JSON-Objekt -- Iteriert über jeden Eintrag im Objekt. [%$loop_name.CURRENT.key%] zeigt auf den Namen der aktuellen Eigenschaft, [%$loop_name.CURRENT.item%] auf ihren Wert.
- JSON-Array -- Iteriert über jedes Element im Array. [%$loop_name.CURRENT.item%] zeigt auf das aktuelle Element.
- JSON-Primitiv (null, boolean, number, string) -- Führt eine einzelne Schleifeniteration mit diesem Primitiv als Wert von [%$loop_name.CURRENT.item%] durch. Dies wird aus Konsistenzgründen bereitgestellt, aber beachten Sie, dass Sie normalerweise entweder über ein Objekt oder ein Array iterieren sollten.
- Ungültiges JSON - Es wird keine Iteration durchgeführt und ein Soft Error (Warnung) wird protokolliert.
- Liste von Dateien
- Wählen Sie eine oder mehrere Dateien aus. Die Schleife iteriert dann über jede Datei. Innerhalb der Schleife können Sie die Schleifenaktion als Dateiquelle auswählen.
Dies ist vor allem für Aktionen nützlich, die nur eine einzige Datei zulassen. Sie könnten zum Beispiel eine Liste von PDF-Dateien auswählen, die Sie durchlaufen wollen, dann eine Aktion PDF-Datei befüllen innerhalb der Schleife platzieren und die Schleife als das zu füllende PDF-Dokument auswählen. Auf diese Weise können Sie jedes PDF-Dokument mit Werten füllen. Dies wäre sonst nicht möglich, da die Aktion "PDF ausfüllen" nur die Auswahl einer einzigen Datei zulässt.
Wenn der Benutzer die Hobbys Lesen und Wandern auswählt, wird die Schleife über die Werte von selHobbies 2-mal ausgeführt. Beim ersten Mal ergibt der Platzhalter [%$loop_name.CURRENT.item.values[0]%] den Wert "1", beim zweiten Mal den Wert "3".
Nehmen wir an, das Formularfeld selHobbies wurde in einem wiederholenden Container namens divKinder erstellt und der Benutzer hat 3 Wiederholungen mit folgenden Werten angelegt:
Im Workflow wurde für die Verarbeitung eine Schleife mit dem Namen "Schleife über alle Kinder" angelegt, die über alle Formularfeldwiederholungen des Feldes divKinder iteriert:
Innerhalb der Schleife werden die Daten in eine Textdatei geschrieben. Das Bild zeigt einige mögliche Platzhalter:
Dann führt die Schleife die untergeordneten Aktionen 3 Mal aus, mit den folgenden Werten:
Diese Listen-Quelle kann auch mit der Quelle Formularfeldwiederholung kombiniert werden: Zuerst wird eine Schleife über die Wiederholung von selHobbies erstellt. Innerhalb dieser Schleife kann dann eine verschachtelte Schleife über die Werte von selHobies eingefügt werden. Auf diese Weise ist es möglich, auf jeden Wert für jede Wiederholung einzeln zuzugreifen und andere Workflow-Aktionen durchzuführen. Im obigen Beispiel würde die äußere Schleife dreimal durchlaufen, einmal für jede Wiederholung. Die innere Schleife über die Feldwerte würde eine variable Anzahl von Wiederholungen durchführen, abhängig von der Anzahl der ausgewählten Optionen für diese Wiederholung (2 für die erste Wiederholung, 1 für die zweite Wiederholung, 3 für die dritte Wiederholung). Insgesamt würden die Aktionen innerhalb der Schleife also 6 Mal ausgeführt werden.
Außerdem werden bei dieser Art von Schleife alle Verweise auf Formularfelder auf den Wert des aktuellen Indexes aufgelöst. In Fortsetzung des obigen Beispiels: Wenn das Formularfeld nicht wiederholt wird und der Benutzer die Hobbys Lesen und Wandern auswählt, führt die Schleife die enthaltenen Aktionen 2-mal aus. Beim 1. Mal wird der Formularplatzhalter [%selHobbies%] zu "1" ausgewertet, beim zweiten Mal zu "3". Sie können auch Formularfunktionen verwenden, um auf den Anzeigenamen der Option zuzugreifen: [%selHobbies.lsttxt()%] ergibt beim ersten Mal Lesen und beim zweiten Mal Wandern.
Wie bei zeichengetrennten Werten kann der Wert mit den Zeilen von einem Platzhalter bezogen werden. Zusätzlich ist es möglich, auch eine Datei direkt auszuwählen, etwa eine Formular- oder Mandantdatei mit CSV-Inhalt.
Standardmäßig werden die Werte durch Kommas getrennt, aber es gibt mehrere Optionen, mit denen Sie die Aufteilung der Werte anpassen können. Oben finden Sie eine Liste mit Beispielwerten, die veranschaulichen, wie die Werte formatiert werden müssen, damit sie richtig aufgeteilt werden. Die verfügbaren Optionen sind ähnlich zum obigen Typ:
(fortgeschritten)
Liste von Anhängen- Wählen Sie einen oder mehrere Anhänge aus. Die Schleife iteriert dann über jeden Anhang. Innerhalb der Schleife können Sie die Schleifenaktion als Dateiquelle auswählen.
Dies ist eine erweiterte Listenquelle. Bei den meisten Aktionen muss eine beliebige Datei ausgewählt werden, unabhängig vom Ursprung der Datei. Einige spezielle Aktionen erfordern die Auswahl eines Anhangs (Vorgang). Solche Aktionen können mit dieser Elementquelle kombiniert werden, um sie einmal für jeden Anhang aus einer Liste von Anhängen auszuführen.
Kopf- und fußgesteuerte Schleife
Die kopf- und fußgesteuerten Schleifen sind fortgeschrittene Schleifen, die manchmal auch als manuelle Schleifen bezeichnet werden.
Bei diesen Schleifen können Sie eine benutzerdefinierte Bedingung festlegen. Die Schleife wird dann so lange ausgeführt, wie die Bedingung erfüllt ist. Erst, wenn die Bedingung nicht mehr erfüllt ist, endet die Schleife. Dies macht manuelle Schleifen zwar recht vielseitig, birgt aber auch die Gefahr von Endlosschleifen, wenn solche Schleifen falsch konfiguriert sind. Wir empfehlen Ihnen, wenn möglich eine Listenschleife zu verwenden und nur dann auf manuelle Schleifen zurückzugreifen, wenn dies unbedingt erforderlich ist. Bitte beachten Sie, dass formcycle eine Obergrenze für die Anzahl der Aktionen festlegt, die während einer einzelnen Workflow-Ausführung ausgeführt werden können, um eine Überlastung des Systems zu verhindern. Wenn diese Grenze erreicht ist, wird der Workflow mit einem Fehler abgebrochen.
Als Vorbedingung für Schleifen, die nicht ewig laufen, müssen Sie eine Bedingung festlegen, deren Ergebnis sich zwischen verschiedenen Schleifeniterationen ändern kann. Sie könnten z. B. einen Platzhalter verwenden, die auf den aktuellen Wert eines Zählers verweist, und diesen Zähler innerhalb der Schleife inkrementieren. Alternativ können Sie auch eine Tautologie als Bedingung verwenden (=wird immer als wahr ausgewertet) und eine Bedingung oder einer Fallunterscheidung in die Schleife einfügen, der eine Break-Aktion enthält, die dann die Schleife beendet.
Zwei Arten von manuellen Schleifen sind verfügbar:
- Kopfgesteuerte Schleife - Die Bedingung steht am Anfang der Schleife. Wenn die Schleife ausgeführt wird, beginnt sie mit der Überprüfung der Bedingung. Wenn die Bedingung beim ersten Mal nicht erfüllt ist, werden die Aktionen innerhalb der Schleife nie ausgeführt. Entspricht der while-Schleifenanweisung in der Programmierung ( while (condition) statement )
- Fußgesteuerte Schleife - Die Bedingung steht am Ende der Schleife. Wenn die Schleife ausgeführt wird, beginnt sie mit der Ausführung der Aktionen innerhalb der Schleife. Die Bedingung wird erst am Ende überprüft. Im Gegensatz zur kopfgesteuerten Schleife werden die Aktionen innerhalb der Schleife immer mindestens einmal ausgeführt. Entspricht der do-while-Schleifenanweisung in der Programmierung ( do statement while (condition) ).
Nehmen wir an, wir haben einn Zähler namens Schleifenvariable eingerichtet, der zu Beginn den Wert 0 hat:
Im Workflow haben wir eine Verarbeitung mit einer kopfgesteuerten Schleife:
Zu Beginn der Verarbeitung wird geprüft, ob der Zähler kleiner oder gleich 10 ist. Ist dies der Fall wird der "Ja"-Zweig ausgeführt. In diesem Zweig wird eine Ausgabedatei erzeugt und der Zähler muss hochgezählt werden. Würde der Zähler auf seinem Wert 0 verbleiben, würde, da vor dem nächsten Schleifendurchgang wieder auf kleiner oder gleich 10 abgefragt wird, die Verarbeitung endlos fortgesetzt werden. Durch das Hochzählen z.B. um +1 wird der "Ja"-Zweig aber genau 11 Mal durchlaufen. Erst dann wird in den "Nein"-Zweig geschaltet und die Dateien werden ausgeliefert.
Die 11 erstellten Dateien haben folgende Inhalte:
- 1. Datei: 0 : 0
- 2. Datei: 1 : 1
- 3. Datei: 2 : 2
- 4. Datei: 3 : 3
- 5. Datei: 4 : 4
- 6. Datei: 5 : 5
- 7. Datei: 6 : 6
- 8. Datei: 7 : 7
- 9. Datei: 8 : 8
- 10. Datei: 9 : 9
- 11. Datei: 10 : 10
Erst wenn der Zähler namens Schleifenvariable den Wert 11 hat, schlägt die Prüfung auf kleiner oder gleich 10 fehl und die Schleife wird durch den "Nein"-Zweig verlassen.
Setzt man für die Verarbeitung eine fußgesteuerte Schleife ein und setzt den Zähler auf 0 zurück ...
werden wiederum die 11 Dateien mit ihren Inhalten wie bei der kopfgesteuerten Schleife erstellt.
Wird die Verarbeitung aber nochmals ausgeführt, wobei der Zähler jetzt auf 10 steht, wird aber eine weitere Datei mit dem Inhalt "0 : 11" erstellt, da die Prüfung auf kleiner oder gleich 10 erst am Ende der Schleifenverarbeitung erfolgt. Die kopfgesteuerte Schleife würde keine weitere Datei ausliefern und auch den Zähler nicht hochsetzen, da der "Ja"-Zweig nicht ausgeführt wird.
War dieser Artikel hilfreich?
Das ist großartig!
Vielen Dank für das Feedback
Leider konnten wir nicht helfen
Vielen Dank für das Feedback
Feedback gesendet
Wir wissen Ihre Bemühungen zu schätzen und werden versuchen, den Artikel zu korrigieren