Schleife abbrechen
Ereignisaktion - Kurzfassung
Zweck: Die Ereignisaktion beendet die Ausführung von Aktionen und die Iteration in einer übergeordneten Für jeden Eintrag wiederholen (Schleife) sofort, ohne die Ereignisverarbeitung insgesamt abzubrechen.
Die Schleife abbrechen-Ereignisaktion dient dazu die Iteration einer übergeordneten Für jeden Eintrag wiederholen (Schleife)-Ereignisaktion mit sofortiger Wirkung zu stoppen. Die Ereignisverarbeitung wird daraufhin nach bzw. "unterhalb" der Schleife fortgesetzt.
Falls mehrere Instanzen der Für jeden Eintrag wiederholen (Schleife)-Ereignisaktion verschachtelt verwendet werden, beendet die Schleife abbrechen-Ereignisaktion nur die Iteration auf der Ebene, in der sie ausgeführt wird. Übergeordnete Schleifen werden nicht abgebrochen.
In besonderen Fällen befindet sich die Für jeden Eintrag wiederholen (Schleife)-Ereignisaktion, die abgebrochen werden soll, in einer aufrufenden Ereignisbehandlung, die im Kontext der Schleife direkt oder indirekt die Ereignisbehandlung mit der Schleife abbrechen-Ereignisaktion auslöst.
Typischerweise wird der Abbruch der Schleife an die Auswertung eines Abbruchkriteriums geknüpft, dessen Auswertung eine Fallunterscheidung im Aktionsblock der Schleife erfordert:
Im Allgemeinen wird die Wenn Dann Sonst-Ereignisaktion eingesetzt, um die bedingte Ausführung von Ereignisaktionen (abhängig von einer Regel-Konfiguration; s. Regeltypen) darzustellen.
Die Benutzer-Rückfrage-Ereignisaktion bedient den Sonderfall, dass die Entscheidung nicht per Regel ermittelt, sondern interaktiv vom Benutzer abgefragt werden soll.
Die Try-Catch-Aktion-Ereignisaktion kann verwendet werden, um eine Schleife als Reaktion auf einen Fehler zu beenden, ohne dass die Ereignisverarbeitung insgesamt stoppt.
►HINWEIS◄ Die Variable $index dient zwar während der Ausführung einer Schleife als Schleifenzähler, steht aber nur innerhalb des Aktionsblocks zur Verfügung. Nach einem Abbruch einer Schleife durch die Schleife abbrechen-Ereignisaktion kann also nicht per direktem Lesezugriff auf die Variable $index festgestellt werden, in welcher Iteration der Abbruch ausgelöst wurde.
Konfiguration
Die Schleife abbrechen-Ereignisaktion verwendet keine Parameter.
Beispiele
Einfacher Anwendungsfall: Abbrechen einer Checkliste beim ersten nicht bestätigten Eintrag
Die Freigabe einer Tour soll nur dann ausgelöst werden, wenn der Benutzer sämtliche Schritte einer kleinen Checkliste bestätigt, die als Liste von Textwerten (String[]) in einer Variable checklist vorliegt.
Sobald der Benutzer einen Eintrag nicht bestätigt, soll die Abarbeitung der Checkliste abgebrochen werden.
Nach einem Abbruch soll eine Variable abortIndex auf die Listenposition verweisen, die nicht bestätigt wurde.
Nachfolgende Schritte sollen unabhängig von einem Abbruch der Checkliste ausgeführt werden, aber dabei die Werte der Variablen checklist und abortIndex auswerten.
Konfiguration:
Der Screenshot rechts zeigt die Für jeden Eintrag wiederholen (Schleife) für die Abarbeitung der Checkliste:
|
|
Komplexerer Anwendungsfall: Abbrechen verschachtelter Schleifen über mehrere Stufen
Eine Ereignisbehandlung soll sämtliche Adressbucheinträge und Firmenadressen, für die Lesezugriff besteht, nach Adresskontakten mit Kontakttyp "Gebäude" (BUILDING) durchsuchen, um eine "Eindeutige Liste" (Set) mit Klartextbezeichnern je Gebäude zusammenzustellen, die in einem Hinweis angezeigt werden soll.
Die maximale Anzahl der ausgegebenen Zeilen soll durch einen positiven Integer-Wert in einer Variablen (limit) begrenzt werden.
In der folgende Konfiguration wird das Durchsuchen der Adresskontakte durch zwei verschachtelte Schleifen dargestellt, von denen die äußere über Adressen iteriert und die innere über die Adresskontakte innerhalb der jeweiligen Adresse.
Sobald die "Eindeutige Liste" (Set) die maximale Anzahl an Klartextbezeichnern erreicht hat, soll die Iteration über beide Schleifenebenen abgebrochen und die Liste der gesammelten Gebäudebezeichnungen in einem Hinweis erscheinen.
Laufzeitbeispiel:
Der folgende Screenshot zeigt eine Hinweis mit einer Liste von drei "Gebäudebezeichnungen", die offensichtlich zwei unterschiedliche Firmen betreffen:
►ANMERKUNG◄ Die "Eindeutige Liste" (Set) wird hier nicht einfach als String ausgegeben, sondern per Text ersetzen noch kosmetisch überarbeitet, sonst wäre hier die übliche Listennotation ([ , , ]) zu sehen.
Konfiguration:
Der folgende Screenshot zeigt die Für jeden Eintrag wiederholen (Schleife)-Ereignisaktion für die äußere Schleife und (ganz unten) die nach Abschluss oder Abbruch der Iteration(en) auszuführende Hinweis anzeigen-Ereignisaktion für die Ausgabe.
|
|
Sonderfall: Abbrechen einer Schleife in einer aufrufenden Ereignisbehandlung
Um einen Standardprozess zum Abbrechen von Schleifen definieren zu können, wurde ein Eigenes Aktionsevent eingerichtet (hier: XF_TERMINATOR), das anstelle eines direkten Aufrufs der Schleife abbrechen-Ereignisaktion über die Eigenes Aktionsevent auslösen (Aktion)-Ereignisaktion ausgelöst werden kann.
Konkret soll beim Abbrechen einer Schleife immer dann eine Warnmeldung wie die folgende ausgegeben werden, wenn ohne den Abbruch mindestens eine weitere Iteration ausgeführt werden würde.
Konfigurationsbeispiel für den Aufruf:
Der Screenshot rechts zeigt schematisch eine Ereignisbehandlung mit einer Für jeden Eintrag wiederholen (Schleife)-Ereignisaktion, in der abhängig von einem Abbruchkriterium in einer Wenn Dann Sonst-Ereignisaktion das Eigene Aktionsevent XF_TERMINATOR für den Schleifenabbruch ausgelöst wird. Alle anderen Ereignisaktionen sind hier in Ausführen mit-Ereignisaktionen zusammengefasst, deren Beschriftung den Stellenwert für den Ablauf charakterisiert:
|
|
Konfiguration:
Der Screenshot rechts zeigt die Konfiguration für eine Ereignisbehandlung, die den Standardprozess für einen Schleifenabbruch abbilden soll:
►HINWEIS◄ Da die Schleife abbrechen-Ereignisaktion hier nicht im Kontext einer Für jeden Eintrag wiederholen (Schleife) verwendet wird, hat es keinen Sinn unterhalb weitere Ereignisaktionen anzuordnen. Diese würden niemals ausgeführt, da die Kontrolle mit dem Abbruch an die übergeordnete Schleife zurückgegeben wird. |
|
Die Meldung bei einem "echten" Abbruch wird wie rechts abgebildet über den Wert aus Sprachverwaltung-Wertauflöser definiert,, der hier ohne echten Zugriff auf die Sprachverwaltung verwendet wird (weder Bundle noch Resource sind benannt):
|
|