SubFlow
Verwende den SubFlow-Trigger, wenn du einen Flow brauchst, den andere Flows als Schritt aufrufen können – wie eine Funktion. SubFlows sind wiederverwendbare Bausteine: Du definierst gemeinsame Logik einmal (z. B. „Debitorennummer normalisieren“, „Adresse validieren“, „Compliance-Benachrichtigung versenden“) und jeder andere Flow kann sie inline mit typisierten Eingaben und Ausgaben aufrufen.
Ein SubFlow läuft nicht von selbst. Es gibt keinen Zeitplan, kein Datensatzereignis, keinen Webhook – die einzige Art, ihn auszuführen, ist der SubFlow-ausführen-Schritt eines anderen Flows.
Was passiert, wenn der Flow läuft
- Der SubFlow-ausführen-Schritt eines aufrufenden Flows wertet seine konfigurierten Eingabebindungen aus (Konstanten, Variablenreferenzen, SmartField-Ausdrücke) und übergibt die Werte an den SubFlow.
- AutoFlow lädt die fixierte veröffentlichte Version des SubFlows, projiziert die Eingaben in den SubFlow-Rumpf, als wären sie Trigger-Outputs, und beginnt mit der Schrittabarbeitung.
- Schritte innerhalb des SubFlows laufen in derselben Transaktion wie der aufrufende Flow – ohne Commit-Grenze dazwischen. Was der SubFlow schreibt, ist für spätere Schritte des Aufrufers sichtbar; tritt auf einer der beiden Seiten ein Fehler auf, wird der gesamte Aufruf als eine Einheit zurückgerollt.
- Der SubFlow endet mit einem SubFlow-Output zurückgeben-Schritt, der typisierte Ausgabewerte bündelt und an den aufrufenden SubFlow-ausführen-Schritt zurückgibt.
- Der aufrufende Flow läuft mit den Outputs des SubFlows weiter, die als Variablen am SubFlow-ausführen-Schritt verfügbar sind.
Zeitbasierte Aufschiebeschritte (Schlafen, Polling) sind innerhalb eines SubFlows nicht erlaubt. Der Aufrufer wartet synchron; eine Pause mittendrin würde ihn blockieren. Verwende Aufschieben nur im aufrufenden Flow vor oder nach dem SubFlow-ausführen-Schritt.
Trigger konfigurieren
| Feld | Erforderlich | Funktion |
|---|---|---|
| SubFlow-Beschreibung | Ja | Wird im Picker angezeigt, wenn dieser SubFlow als Schritt in einem anderen Flow hinzugefügt wird. Wähle eine Verb-Phrase, die beschreibt, was Aufrufer erhalten (z. B. „Debitorennummer normalisieren“, nicht „CustNo-Trigger“). |
| Eingabeparameter | Nein | Jede Zeile deklariert einen Parameter, an den Aufrufer einen Wert binden müssen (oder können). |
Eingabeparameter
Jeder Eingabeparameter hat:
- Name – nur Buchstaben, Ziffern und Unterstriche. Keine Leerzeichen. Den Namen sieht der aufrufende Flow, wenn er den Wert bindet.
- Typ –
ValueoderReference. Value-Parameter nehmen am Aufrufort jedes Literal, jede Variable oder jeden SmartField-/SmartFormula-Ausdruck an (Zahlen und Datumswerte werden als Text auf der Leitung übergeben). Reference-Parameter nehmen eine SmartField-Datensatzreferenz; ist eine Tabellennr. in der Zeile gesetzt, ist der Selektor des aufrufenden Flows auf Datensätze dieser Tabelle eingeschränkt, sonst wird jeder Datensatz akzeptiert. - Erforderlich – ist es gesetzt, muss der Aufrufer einen Wert binden. Ist es nicht gesetzt, ist ein nicht gebundener Parameter standardmäßig leer.
Ein SubFlow mit null Eingabeparametern ist in Ordnung – das ist die richtige Form für einen SubFlow, der den BC-Zustand direkt liest, ohne dass Aufrufer Werte mitgeben (z. B. „Tägliche Zusammenfassungs-E-Mail senden“).
Rekursion und Tiefe
Ein SubFlow darf andere SubFlows aufrufen und sich (direkt oder indirekt) sogar selbst aufrufen. Laufzeit-Rekursion ist erlaubt; eine statische Zykluserkennung beim Veröffentlichen findet bewusst nicht statt – sie wäre brüchig und würde legitime Anwendungsfälle wie SubFlow-basierte Baumtraversierung blockieren.
Endlose Rekursion wird durch einen einzigen Tiefenzähler pro Ausführung begrenzt, standardmäßig auf 32. Die Grenze ist konfigurierbar unter AutoFlow Setup → SubFlows → Maximale SubFlow-Schachtelungstiefe. Wird die Grenze überschritten, schlägt der aufrufende Schritt mit einer klaren Fehlermeldung fehl, die die Aufrufkette nennt.
Fehler werden weitergereicht
Trifft der SubFlow auf einen Fehler-Schritt (oder wirft ein anderer Schritt eine Ausnahme), wird der Fehlschlag verpackt und an den aufrufenden SubFlow-ausführen-Schritt zurückgegeben als:
Fehler in SubFlow "<name>": <ursprüngliche Meldung>
Die gesamte Transaktion wird zurückgerollt, einschließlich allem, was der SubFlow geschrieben hat – partieller Zustand kann also nie nach außen dringen. Damit ist ein Fehlerschritt im SubFlow der idiomatische Weg, einen ungültigen Aufruf zurückzuweisen (natürlicher, als einen validate=false-Output zu liefern und vom Aufrufer zu verlangen, ihn zu prüfen).
Logging
Der SubFlow hat kein eigenes Ausführungsprotokoll. Seine inneren Schritte erscheinen verschachtelt unter dem aufrufenden SubFlow-ausführen-Schritt im Ausführungsprotokoll des übergeordneten Flows, sodass der gesamte Aufrufbaum an einer Stelle lesbar ist.
Blockfarbe auf einen Blick
Im Editor nutzt der SubFlow-Trigger die übliche gelbe Trigger-Palette – er ist ein Trigger wie jeder andere. Der SubFlow-ausführen-Schritt am Aufrufort verwendet eine grüne Palette und dasselbe subtask-Icon-Glyph (in der grünen Strichvariante), sodass du auf einen Blick erkennst, wo ein anderer Flow die Logik dieses SubFlows komponiert.
Output an den Aufrufer zurückgeben
Jeder SubFlow endet mit einem SubFlow-Output zurückgeben-Schritt, der über die Essentials-Palette verfügbar ist. Er bündelt typisierte Ausgabewerte, gibt sie an den aufrufenden SubFlow-ausführen-Schritt zurück und beendet die Ausführung des SubFlows.
Es ist ein terminierender Schritt – ein nachfolgender Schritt führt beim Veröffentlichen zu einem Fehler.
Ein SubFlow, der nichts zurückgibt – also keine Ausgabeparameter deklariert –, ist in Ordnung. Der aufrufende SubFlow-ausführen-Schritt projiziert dann einfach keine Outputs.
Was passiert, wenn „SubFlow-Output zurückgeben" läuft
- Der Runner wertet den Wert-Ausdruck jedes Ausgabeparameters im Kontext des SubFlows aus (Variablen, SmartFields, Formeln).
- Die Werte werden dem aufrufenden SubFlow-ausführen-Schritt als benannte Outputs signalisiert, typisiert als
ValueoderReferencegemäß der Parameterdeklaration. - Die Ausführung des SubFlows endet. Die Kontrolle kehrt zum Aufrufer zurück, der mit den Outputs als Variablen am SubFlow-ausführen-Schritt fortfährt.
Tritt im SubFlow ein Fehler auf, bevor der Output-Schritt erreicht wird, werden keine Outputs zurückgegeben – der Fehler wird stattdessen an den aufrufenden SubFlow-ausführen-Schritt weitergereicht und die gesamte gemeinsame Transaktion wird zurückgerollt. Werte, die du sonst zurückgegeben hättest, werden schlicht nicht erzeugt. Genau dieses Verhalten ist passend für SubFlows, die validieren: Ein Fehlerschritt weist den Aufruf sauber zurück, und der Aufrufer entscheidet, wie er reagiert (erneut versuchen, protokollieren usw.).
SubFlow-Output zurückgeben konfigurieren
Füge SubFlow-Output zurückgeben zum Flow hinzu und fülle die Konfigurationskarte aus.
Beschreibung
Block-Beschriftung im Editor.
Ausgabeparameter
Eine Zeile pro zurückzugebendem Wert. Jede Zeile hat Name, Typ und einen Wert-Ausdruck.
- Name – der Name, unter dem der aufrufende Flow den Output am SubFlow-ausführen-Schritt sieht. Wähle ihn passend zu dem, worauf der Aufrufer zugreift (z. B.
NormalizedNo,IsValid,Total). - Typ –
ValueoderReference. Value-Outputs erscheinen am aufrufenden Schritt als reine Text-Variable; der Aufrufer kann sie direkt in Ausdrücken verwenden oder bei Bedarf neu parsen. Reference-Outputs (mit optionaler Einschränkung über Tabellennr.) erscheinen als Datensatzreferenz, die der Aufrufer in ein datensatzbezogenes SmartField binden kann. Der Wert reist in beiden Fällen als Text auf der Leitung; der Typ teilt dem SmartField-Selektor des aufrufenden Schritts mit, was zu erwarten ist. - Wert – ein Ausdruck (Variablenreferenz, SmartField, Formel), der den Output liefert. Die Engine löst Referenzen unmittelbar vor der Schrittausführung auf.