Zum Hauptinhalt springen

Schleifensteuerung

Aktuelle Konfiguration des Tasks Controllo loop im Workflow Designer
  • Aufgabentyp: loop-control

Die Aufgabe Schleifensteuerung ist ein spezialisiertes Flusselement, das es ermöglicht, komplexe Schleifen zu erstellen, ähnlich einer while-Konstruktion in der Programmierung. Im Gegensatz zur Aufgabe Wiederholen, die nur die unmittelbar vorhergehende Aktion wiederholt, fungiert die Schleifensteuerung als Sprungpunkt (goto) und ermöglicht die Erstellung von Schleifen, die eine Sequenz mehrerer Aufgaben beinhalten.

Konfiguration

Die Konfiguration definiert die Grenzen und die zeitliche Abfolge der Schleife.

  • Maximalanzahl von Iterationen: Die maximale Anzahl von Durchläufen, die die Schleife durchführen kann. Dies kann manuell oder über einen dynamischen Parameter (z. B. #>parametro_num<#) festgelegt werden.
  • Intervall zwischen Iterationen (s): Die Wartezeit in Sekunden zwischen dem Ende eines Durchlaufs und dem Beginn des nächsten.

Schleifenarchitektur

Für einen korrekten Betrieb erfordert die Schleife eine spezifische Drei-Komponenten-Architektur:

  1. Schleifenkörper: Eine oder mehrere Aktionen (Aufgaben), die wiederholt ausgeführt werden müssen (z. B. E-Mail senden, Variable aktualisieren).
  2. Aufgabe vor der SCHLEIFENSTEUERUNG: Die letzte Aufgabe innerhalb des Schleifenkörpers muss Folgendes aufweisen:
    • Eine spezielle Bedingung vom Typ "SCHLEIFE": Solange dieser Ausdruck WAHR ist, wird der Fluss zur Aufgabe Schleifensteuerung weitergeleitet, um die Schleife fortzusetzen. Wird die Bedingung "SCHLEIFE" FALSCH, folgt der Fluss einem dieser alternativen Pfade oder beendet den Workflow und verlässt die Schleife endgültig.
  3. Aufgabe "Schleifensteuerung": Der Motor der Schleife. Wenn sie den Fluss empfängt, erhöht sie ihren Zähler und leitet ihn an die erste Aufgabe des Schleifenkörpers weiter.

Detaillierte Funktionsweise

Bei jedem Durchlauf verläuft der Fluss wie folgt:

  1. Die Aktionen im Schleifenkörper werden ausgeführt.
  2. Die "Aufgabe vor der SCHLEIFENSTEUERUNG" evaluiert ihre Bedingungen.
  3. Wenn die Bedingung "SCHLEIFE" WAHR ist, geht der Fluss zur "Schleifensteuerung", die ihn zurück zum Anfang leitet.
  4. Wenn die Bedingung "SCHLEIFE" FALSCH ist, verlässt der Fluss die Schleife über einen anderen Pfad.

Beispiel 1

Dies ist das Standard-Szenario. Die Schleife endet, weil eine logische Bedingung erfüllt ist.

Ausführungsfluss (basierend auf dem letzten Screenshot):

  1. Variablen deklarieren setzt eine Variable x a "0".
  2. Der Workflow führt E-Mail Out v.2 aus, dann erhöht Variablen setzen den Wert der Variable x von 1.
  3. Entscheidung: Die Aufgabe Variablen setzen evaluiert ihre Ausgänge:
  • Die Bedingung "SCHLEIFE" x == "hello" ist FALSCH.
  1. Verlassen der Schleife: Der Fluss folgt dem Pfad x != "hello" und fährt fort zu Task E-Mail End. Die Schleife wird korrekt unterbrochen, und die "Schleifensteuerung" wird nie erreicht.

Beispiel 2: Unendliche Schleife bis zum Limit (While True Logik)

Dieses Szenario dient dazu, eine Aktion eine vordefinierte Anzahl von Malen auszuführen. Hier existiert keine logische Abbruchbedingung oder sie ist immer wahr.

Ausführungsfluss:

  1. Variablen deklarieren setzt eine Variable x auf "0".
  2. Der Fluss führt die Sequenz E-Mail Out v.2 -> Variablen setzen aus, die den Wert der Variable x um 1 erhöht.
  3. Die Aufgabe Variablen setzen hat eine "SCHLEIFE"-Bedingung, die in diesem Szenario immer wahr ist.
  4. Der Fluss geht zur "Schleifensteuerung".
  5. Die "Schleifensteuerung" leitet den Fluss zurück zum Anfang, zu E-Mail Out v.2.
  6. Dieser Prozess wiederholt sich. Die Schleife ist beabsichtigt und kontrolliert.
  7. Die "Schleifensteuerung" stoppt nur, wenn ihr interner Zähler das Limit der Iterationen (festgelegt auf 10) erreicht. An diesem Punkt wird die Aufgabe FEHLGESCHLAGEN mit der Meldung "Maximum Number of Iterations Reached (10)".

Ausgabe-Parameter

  • loopCount: Ein Zähler, der die Nummer der aktuellen Iteration zurückgibt. Dieser Wert beginnt bei 0 und ist entscheidend für die Erstellung von Abbruchbedingungen basierend auf der Anzahl der durchgeführten Zyklen (z. B. #>Controllo loop.loopCount<# < 5).
  • result: Enthält nur in dem Fall eine beschreibende Textnachricht, dass der Zyklus durch das maximale Limit zwangsweise unterbrochen wurde (z. B. "Maximum Number of Iterations Reached (10)").
  • resultJson: Stellt das Ergebnis der Task-Ausführung im JSON-Format dar und enthält allgemeine Informationen, Konfigurationen und Ausführungsdetails.

Wichtige Hinweise

  • Die Iterationen beginnen bei 0. Folglich führt ein Iterationslimit von 2 zu 3 Iterationen (0, 1 und 2).
  • Der Task bleibt im Status FEHLGESCHLAGGEN, nachdem die Iterationen erschöpft sind.

Beispiel für ResultJson

{
"run_info": {
"status": "Completed",
"run_result": "Success"
},
"output_parameters": {
"exitStatus": "0"
}
}