Planung, Tests & Fehlersuche
Zuletzt aktualisiert 23 May 2026

Ein fertig gebauter Workflow muss trotzdem pünktlich laufen, die Tests überstehen und Ihnen sagen, was passiert ist, wenn er sich nicht wie erwartet verhält. Zeitsteuerung, Testläufe, Aktivitätsprotokolle, Versionshistorie und die Fehler, die am meisten weh tun, alles an einem Ort.
Verzögerungen und Zeitsteuerung
Jeder Schritt hat eine Timing-Einstellung:
- Sofort läuft, sobald der Schritt erreicht wird (die Standardeinstellung).
- Nach einer Verzögerung wartet ein Intervall (Minuten, Stunden oder Tage) nach dem übergeordneten Schritt und läuft dann. Nutzen Sie das für Follow-ups: „2 Tage warten, dann eine Nachfrage senden."
- Zu einem bestimmten Datum und einer bestimmten Uhrzeit läuft zu einem festen Zeitpunkt.
Ein Schritt, der verzögert oder geplant ist, wird geparkt und pünktlich fortgesetzt. Während er wartet, hält er nichts offen, sodass Sie riesige Mengen an Datensätzen auf eine Verzögerung warten lassen können, ohne dass das in der Zwischenzeit etwas kostet.
Eingeschränkte Zeiten und übersprungene Tage
Jeder Schritt kann auf ein Zeitfenster und auf bestimmte Tage eingeschränkt werden:
- Legen Sie eine Von- und eine Bis-Zeit fest (und eine Zeitzone), sodass der Schritt zum Beispiel nur zwischen 09:00 und 17:00 Uhr läuft.
- Wählen Sie zu überspringende Tage (z. B. Wochenenden).
Ein Schritt, der außerhalb seines erlaubten Fensters fällig wird, geht nicht verloren. Er wartet in der Warteschlange und wird ausgelöst, sobald das Fenster öffnet. Zeitfenster, die über Mitternacht reichen (z. B. 22:00 bis 06:00), werden korrekt behandelt.
So halten Sie kundenseitige Nachrichten höflich, keine SMS um 3 Uhr nachts, ohne den Rest des Workflows zu verkomplizieren.
Drosselung (das Stundenlimit)
Jeder Workflow hat ein Stundenlimit (Standard 3.000) dafür, wie viele Datensätze ihn bei listen- und planungsgestützten Workflows durchlaufen. Das taktet die Massenverarbeitung, sodass eine große Population verteilt wird, statt auf einmal abgeladen zu werden.
So funktioniert die Rechnung
Der Scheduler durchsucht in einem engen Zyklus nach fälliger Arbeit. Um gleichmäßig über die Stunde zu takten, gewährt er jedem Durchlauf ein Zehntel des Stundenlimits des Workflows:
| Stundenlimit | Kontingent je Durchlauf | Durchläufe pro Stunde |
|---|---|---|
| 3.000 (Standard) | 300 Datensätze | 10 |
| 1.000 | 100 Datensätze | 10 |
| 10.000 | 1.000 Datensätze | 10 |
| < 10 | das volle Limit, aber nur einmal pro Stunde | 1 |
Ein listengestützter Workflow mit dem Standardlimit verarbeitet also etwa 300 Datensätze ungefähr alle sechs Minuten, nicht 3.000 auf einmal zur vollen Stunde. Wenn ein großer listengesteuerter Workflow „langsam" wirkt, ist das meist diese Taktung, die ihre Arbeit tut. Erhöhen Sie das Limit, wenn Sie wirklich mehr Durchsatz brauchen und die Kanäle, über die er sendet, das verkraften.
Was getaktet wird und was nicht
| Quelle | Durch das Stundenlimit getaktet? |
|---|---|
| Listen | Ja |
| Geplant | Ja |
| Datensatz-Ereignisse | Nein, reagiert auf jedes Ereignis, sobald es eintritt |
| Listener | Nein, reagiert auf jedes externe Signal, sobald es eintrifft |
| Manuell | Nein |
Datensatz-Ereignis- und Listener-Workflows werden von einzelnen Ereignissen getrieben, also gibt es nichts zu takten. Sie sind von Natur aus über den Tag verteilt.
Einen Workflow vor dem Livegang testen
Veröffentlichen Sie nie blind. Öffnen Sie den Workflow und nutzen Sie den Testlauf: Er führt den gesamten Baum gegen einen echten Datensatz Ihrer Wahl aus und zeigt Ihnen das Ergebnis jedes Schritts. Was er senden würde, was er ändern würde, welchen Zweig jede Entscheidung genommen hat.
Weil der Test die echten Schritte durchläuft, ist er der schnellste Weg, einen falschen Feldnamen, einen leeren Wert oder einen Zweig zu erwischen, der auf der falschen Seite einer Entscheidung angeschlossen ist. Testen, die Ergebnisse je Schritt lesen, beheben, erneut testen, dann veröffentlichen.
Die Aktivitätsprotokolle
Ein aktiver Workflow protokolliert, was er tut. Aus einem geöffneten Workflow sehen Sie:
| Ansicht | Was sie zeigt |
|---|---|
| Verarbeitet | Datensätze, die den Workflow durchlaufen haben, und wie |
| In Warteschlange | Datensätze, die auf eine Verzögerung oder einen Zeitplan warten |
| Logs | das Protokoll je Schritt: welcher Schritt für welchen Datensatz lief, das Ergebnis und der Fehlergrund, falls er fehlschlug |
| Aktivitätsstream | ein Live-Feed und eine Zusammenfassung der Workflow-Aktivität |
Wenn sich etwas nicht wie erwartet verhält, schauen Sie zuerst in die Logs-Ansicht. Jeder Schritt schreibt eine Zeile, einschließlich eines Fehlergrunds, wenn er fehlschlägt.
Versionen und Rollback
Jedes Mal, wenn Sie einen Workflow speichern, behält Flexie eine Version. Aus einem geöffneten Workflow:
- Versionen lässt Sie die Änderungshistorie durchsehen.
- Rollback stellt eine frühere Version wieder her, falls eine Änderung ein Problem verursacht hat.
Das macht das Bearbeiten eines aktiven Workflows sicher: Wenn sich eine Änderung falsch verhält, machen Sie ein Rollback.
Häufige Stolperfallen
| Symptom | Üblicher Grund | Lösung |
|---|---|---|
| Ein Schritt läuft nie | Er ist ein Kind einer Entscheidung, aber nicht am Ja- oder Nein-Zweig angehängt | Hängen Sie ihn an den richtigen Zweig an |
| Schritte laufen in der „falschen Reihenfolge" | Zwei als Geschwister platzierte Schritte laufen parallel, nicht nacheinander | Platzieren Sie den zweiten Schritt unterhalb des ersten, damit er ein Nachfahre ist |
| Ein späterer Schritt sieht den Wert eines früheren Schritts nicht | Der spätere Schritt ist kein Nachfahre des Schritts, der den Wert erzeugt hat | Hängen Sie ihn unter den erzeugenden Schritt um (siehe Daten weitergeben) |
| Zwei Zweige berühren beide dasselbe Feld, mit widersprüchlichen Ergebnissen | Sie laufen parallel, keiner ist „der erste" | Reihen Sie sie als übergeordnet und untergeordnet, oder teilen Sie sie in getrennte Entscheidungen, sodass nur ein Zweig läuft |
| Ein „Aktualisieren"-Trigger löst nie aus | Es wurde keine überwachte Feldänderung konfiguriert | Geben Sie an, welche Feldänderung ihn auslösen soll |
| Der „Aktualisieren"-Trigger löst zu oft aus | Zu viele überwachte Felder oder überwachte Felder, die sich aus unzusammenhängenden Gründen ändern | Engen Sie die Liste der überwachten Felder auf die ein, die Sie wirklich interessieren |
| Ein listengestützter Workflow erreicht manche Datensätze nie | Die Liste schließt sie aus, oder das Stundenlimit arbeitet die Population noch ab | Prüfen Sie die Listendefinition und die Drosselung, geben Sie ihm Zeit oder erhöhen Sie das Limit |
| Ein Massen-Workflow ist langsam | Das Stundenlimit taktet ihn | Erhöhen Sie das Limit (innerhalb der Kanalkapazität) oder nutzen Sie eine Datensatz-Ereignis-Quelle, falls passend |
| Eine Nachricht ging zu einer ungünstigen Uhrzeit raus | Keine eingeschränkten Zeiten am Sendeschritt | Fügen Sie dem Schritt ein Zeitfenster oder übersprungene Tage hinzu |
| Ein geplanter Schritt scheint zu unerwarteten Zeiten auszulösen | Eingeschränkte Zeiten oder übersprungene Tage haben ihn auf den nächsten erlaubten Zeitpunkt verschoben | Schauen Sie sich das Trigger-Datum des Schritts in der Ansicht In Warteschlange an |
| Ein Webhook schlägt zeitweise fehl | Vorübergehende Fehler ohne Wiederholung | Aktivieren Sie Wiederholungen an der Webhook-Aktion |
| Ein Webhook schlägt immer fehl | Falsche URL, falsche Methode, falsche Body-Form oder fehlende Auth auf der Gegenseite | Prüfen Sie das Log des Schritts, der Response-Body und der Statuscode werden protokolliert |
| Ein Wert ist in der Ausgabe leer | Das Feld war für diesen Datensatz leer | Sichern Sie es mit default(...), coalesce(...) oder einem {% if %} ab |
Ein Token wie {{ __data.X }} gibt leer zurück |
Entweder wurde oberhalb dieses Schritts nichts unter diesem Namen gespeichert, oder der Name ist falsch geschrieben | Bestätigen Sie, wo X geschrieben wird, und dass der schreibende Schritt ein Vorfahre des lesenden Schritts ist |
| Eine Bedingung nimmt immer den Nein-Zweig | Der linke Wert liest von der falschen Stelle. Meist ein Body-Feld, das als nacktes {{ X }} referenziert wird, obwohl es {{ __data.X }} sein sollte, oder ein Feld des aktuellen Datensatzes, das als {{ entity.X }} referenziert wird, obwohl es {{ X }} sein sollte |
Siehe Dynamische Endpunkte, Daten empfangen und Flexie Scripting, Sprachgrundlagen |
is_empty- oder is_not_empty-Regeln liefern seltsame Ergebnisse |
Das Feld ist tatsächlich NULL, nicht leer |
Verwenden Sie is_null oder is_not_null |
| Ein „Zwischen"-Datumsfilter schließt die Grenze aus | „Zwischen" ist an beiden Enden inklusiv; Sie haben ihm möglicherweise Datumsangaben statt Datums-Zeit-Werte gegeben | Verwenden Sie Datums-Zeit-Werte (2026-05-01 00:00:00 bis 2026-05-02 23:59:59) für die Erfassung eines vollen Tages |
| Datensätze tauchen in In Warteschlange auf, laufen aber nie | Sie liegen außerhalb des eingeschränkten Fensters des Schritts oder an übersprungenen Tagen | Passen Sie das Fenster an oder warten Sie, bis es öffnet |
| Der Workflow ist veröffentlicht, aber nichts passiert | Der Workflow liegt außerhalb seines Veröffentlichungsfensters | Prüfen Sie die Daten des Veröffentlichungsfensters |
| Ein Testlauf sah gut aus, aber der Live-Workflow verhält sich falsch | Testläufe laufen gegen einen ausgewählten Datensatz; Live-Daten haben Variationen, die der Test nicht abgedeckt hat | Testen Sie gegen mehrere verschiedene Datensätze, einschließlich Grenzfällen (leere Felder, sehr große Werte, fehlende Verknüpfungen) |
| Ein Lauf hat doppelte Datensätze erzeugt | Eine Aktion mit Wiederholung oder zwei Zweige, die beide erstellen | Machen Sie die Erstellung bedingt oder entfernen Sie Duplikate vor dem Erstellen mit findOne |
| Die Ausgabe hat sich nach dem Bearbeiten des Workflows unerwartet geändert | Eine neue Version ist live; das alte Verhalten steckt in einer früheren Version | Nutzen Sie Versionen zum Vergleichen und Rollback, falls nötig |
| KI-gebaute Workflows haben Entscheidungen mit derselben wiederholten Bedingung | Die KI bevorzugt explizite Bedingungen je Zweig | Fassen Sie zu einer Entscheidung mit AND oder OR zusammen, falls einfacher |
Eine Checkliste vor der Veröffentlichung
- Richtiger Datensatztyp und richtige Quelle für den echten Trigger?
- Bei Aktualisieren-Triggern: Sind die überwachten Feldänderungen gesetzt?
- Sind die Ja- und Nein-Zweige jeder Entscheidung korrekt verbunden?
- Sind Schritte, die von früherer Ausgabe abhängen, Nachfahren dieser Schritte?
- Haben kundenseitige Sendungen Zeitfenster, wo angebracht?
- Gegen einen echten Datensatz getestet und sehen die Ergebnisse je Schritt richtig aus?
- Veröffentlichungsfenster gesetzt, falls er nur für einen Zeitraum aktiv sein soll?
Nächste Schritte
- Überblick: die Übersicht des Bereichs.
- Dynamische Endpunkte: Workflows, die durch eingehende Web-Anfragen ausgelöst werden.