SmartControls
SmartFields liefern dir die Werte in deinem Flow, und SmartFormulas berechnen daraus Zahlen. SmartControls gehen einen Schritt weiter: Mit ihnen kann ein einzelnes Textfeld entscheiden, was es ausgibt und einen Block für jeden Eintrag einer Liste wiederholen.
Du schreibst sie inline – direkt in jedes Textfeld, das ohnehin SmartFields akzeptiert: einen E-Mail-Text, einen HTTP-Request-Body, ein erzeugtes XML- oder JSON-Dokument. Es gibt zwei:
{#if … #}– einen Textabschnitt nur dann einfügen, wenn eine Bedingung wahr ist.{#for {{liste}} #}– einen Textabschnitt für jedes Element einer Liste wiederholen.
Die Bedingung bzw. die Liste wird beim Ausführen des Schritts aufgelöst – genau wie ein SmartField-Token – und der Control-Block expandiert in den fertigen Text.
\{#if … #} – bedingter Inhalt
{#if <Bedingung> #}wird bei wahr gezeigt{#else #}sonst{#endif #}
Die <Bedingung> ist ein SmartFilter – derselbe Ja/Nein-Ausdruck wie im Entscheidungs-Schritt, mit denselben Operatoren (=, !=, >, ~, &, |, !, …). SmartField-Tokens in der Bedingung werden vor der Auswertung aufgelöst.
Alternativen verkettest du mit {#elseif … #}, einen Auffangzweig gibst du mit {#else #} an. Jeder Block endet mit {#endif #}.
Guten Tag, Ihre Bestellung wird {#if {{order.total}} >= 1000 #}bevorzugt behandelt und heute versandt{#elseif {{order.total}} > 0 #}gerade vorbereitet{#else #}vorerst zurückgestellt{#endif #}.
Lässt du den {#else #}-Zweig weg und trifft keine Bedingung zu, gibt der Block einfach nichts aus.
\{#for {{liste}} #} – für jeden Eintrag wiederholen
{#for {{vendors}} #}<line>{{vendors.name}}</line>{#endfor #}
{{vendors}} ist die Liste, die du durchläufst – ein Sammlungs-SmartField wie das Ergebnis eines Schritts „Datensätze finden" oder einer Sammlung. Innerhalb der Schleife verwendest du denselben Namen weiter, um die Felder jedes Eintrags zu erreichen: {{vendors.name}}, {{vendors.no}} usw. Du musst keine eigene Schleifenvariable erfinden – die SmartField-Auswahl kennt vendors bereits und vervollständigt dir {{vendors.name}}.
Für die obige Liste mit zwei Einträgen expandiert der Block zu:
<line>Alpha GmbH</line><line>Beta AG</line>
Einträge nummerieren
Hänge [i] an die Liste an, um einen Zähler zu erhalten, und verwende ihn mit {{i}}. Er beginnt bei 1.
{#for {{vendors}}[i] #}{{i}}. {{vendors.name}}
{#endfor #}
Verschachteln
Eine Schleife kann in einer anderen stehen. Die innere Liste wird über den aktuellen Eintrag der äußeren Schleife erreicht – um also die Bankkonten jedes Eintrags zu durchlaufen, iterierst du {{vendors.bankaccounts}}:
{#for {{vendors}} #}
{{vendors.name}}
{#for {{vendors.bankaccounts}} #}
{{vendors.bankaccounts.iban}}
{#endfor #}
{#endfor #}
Da die innere Liste an den äußeren Eintrag gebunden ist, kannst du nur entlang einer Beziehung verschachteln (vendors → vendors.bankaccounts); eine unabhängige Liste lässt sich innerhalb der Schleife nicht neu starten.
Zeilen mit nur einem Control-Tag verschwinden
Du darfst jedes {#for #}, {#endfor #}, {#if #}, {#endif #} auf eine eigene Zeile setzen, damit die Vorlage lesbar bleibt. Eine Zeile, die nur einen Control-Tag (plus Leerraum) enthält, wird vollständig aus der Ausgabe entfernt – sie hinterlässt keine Leerzeile. Aus dieser Vorlage:
<vendors>
{#for {{vendors}} #}
<vendor>{{vendors.name}}</vendor>
{#endfor #}
</vendors>
wird also eine kompakte Ausgabe ohne Lücken:
<vendors>
<vendor>Alpha GmbH</vendor>
<vendor>Beta AG</vendor>
</vendors>
Zeilen, die neben einem Tag echten Inhalt haben, bleiben unverändert.
Tipps
- Bedingungen sind SmartFilters. Alles, was du in der Bedingung eines Entscheidungs-Schritts schreiben kannst, funktioniert in einem
{#if #}– die vollständige Operatorliste findest du unter SmartFilters. Setze Text in einfache Anführungszeichen ('DE') und''für „leer". - Verwende den Listennamen in der Schleife weiter.
{#for {{vendors}} #}…{{vendors.name}}. Benenne ihn nicht um – der Selektor, den die Auswahl anbietet, ist genau der, der funktioniert. - Achte auf Leerraum. Leerzeichen und Zeilenumbrüche innerhalb eines Blocks sind Teil der Ausgabe. Setze strukturelle Tags auf eigene Zeilen (sie verschwinden) und rücke die Inhaltszeilen so ein, wie sie erscheinen sollen.
- Frei kombinierbar. SmartFields, SmartFormulas und SmartControls funktionieren im selben Feld – ein
{#for #}-Block kann{{tokens}},[[formeln]]und verschachtelte{#if #}-Blöcke enthalten.
Wo sie vorkommen
SmartControls können inline in jedem Textfeld einer Schritt-Konfiguration vorkommen – E-Mail-Texte, HTTP-Request-Bodies, Parser-Eingaben, erzeugte Dokumente usw. Überall, wo ein SmartField-Token ({{ … }}) erlaubt ist, ist auch ein {#if #}- oder {#for #}-Block erlaubt.