Files
Workflow/tasks/foreach_parallel.md

38 lines
2.0 KiB
Markdown

# `foreach_parallel` — Parallele Multi-Instanz über eine Liste
**Zweck:** Führt die Kind-Tasks für JEDES Listenelement unabhängig aus — im Gegensatz zu `loop_foreach` blockiert ein wartendes Element nicht die übrigen. Optional mit Abschlussbedingung: Sind z. B. 80 % der Elemente fertig, werden die restlichen storniert.
**Parameter**
| Name | Pflicht? | Default | Beschreibung |
|---|---|---|---|
| `items` | **ja** | — | Quelle der Elemente: Kontext-Array, JSON-String oder CSV (wie `loop_foreach`) |
| `as` | nein | `item` | Variablenname des aktuellen Elements |
| `completion_condition` | nein | — | Abbruchbedingung `a op b` (`>=`,`<=`,`>`,`<`,`==`,`!=`); Variablen `{{fertig}}`, `{{gesamt}}` |
| `rest` | nein | `cancel` | Bei erfüllter Bedingung: `cancel` (Rest stornieren) oder `weiter` (Rest zu Ende laufen) |
| Kind-Tasks | **ja** | — | `<task>`-Elemente direkt im Element; je Listenelement eigener Zustand |
**Eingangswerte:** Die Liste unter `<items>`; je Element `{{<as>}}`, `{{<as>_index}}` und bei Objekt-Elementen flache Felder `{{<as>_feld}}`.
**Ausgangswerte:**
- `<task_id>_fertig` — Anzahl komplett abgeschlossener Elemente
- `<task_id>_gesamt` — Gesamtanzahl
- `<task_id>_storniert` — Anzahl stornierter Elemente (bei `rest=cancel`)
- pro fertigem Element: `<task_id>_<index>_<var>` mit dessen Ergebnisvariablen
**XML-Beispiel**
```xml
<task type="foreach_parallel" id="stellungnahmen">
<config>
<items>{{empfaenger_json}}</items>
<as>person</as>
<completion_condition>{{fertig}} >= 3</completion_condition>
<rest>cancel</rest>
</config>
<task type="webhook" id="fp_call"></task>
</task>
```
**Hinweis (Engine-Grenze):** Gedacht für automatische Kind-Tasks (`webhook`, `email`, PDF-Verarbeitung, `signal_wait`, `wait_until` …). Interaktive Formulare pro Element funktionieren nur eingeschränkt, weil die Engine pro Aufruf nur eine Formularseite ausliefern kann — für Mehrpersonen-Eingaben stattdessen `quorum` verwenden.