# Workflow-Elemente

Mit den einzelnen Workflow-Elementen bestimmst Du die Schritte und Abläufe innerhalb eines Workflows. Jedes Element definiert, was genau in einem bestimmten Abschnitt des Workflows passieren soll.

Damit ein Workflow aktiviert werden kann, müssen mindestens folgende Elemente enthalten sein:

* ein **Start-Element**
* mindestens ein **End-Element** – entweder **"Abschließen"** oder **"Fehler"**

Die verfügbaren Elemente richten sich nach der Art des Workflows: [**synchron oder asynchron**](/vario-cloud-handbuch/system/workflows.md#synchrone-und-asynchrone-workflows). Je nach Variante stehen unterschiedliche Funktionen zur Verfügung. In Elementen wie dem **Benutzerskript-Element** wird die Funktion mittels **Skript** definiert. Hier legst Du den **konkreten Ablauf** fest – z. B. Bedingungen, Berechnungen oder Aktionen wie das Erstellen eines Datensatzes. Durch das Hovern mit der Maus über ein Element wird ein **Tooltip** mit einer kurzen Beschreibung des Elements eingeblendet.

## <i class="fa-circle-play">:circle-play:</i> Start <a href="#start" id="start"></a>

Das Element "Start" kennzeichnet den **Beginn des Workflows**. Es steht für den **Workflow-Auslöser**, der beim Anlegen des Workflows definiert wurde und wird beim **Erstellen eines neuen Workflows automatisch hinzugefügt**.

## <i class="fa-circle-stop">:circle-stop:</i> Abschließen <a href="#abschliessen" id="abschliessen"></a>

Das Element "Abschließen" kennzeichnet das **Ende** eines Workflows. Im Gegensatz zum **Fehler-Element**, das einen Workflow z. B. mit einer Fehlermeldung beendet, steht das Abschließen-Element für einen **erfolgreichen Abschluss** des Ablaufs.

## <i class="fa-circle-bolt">:circle-bolt:</i> Fehler <a href="#fehler" id="fehler"></a>

Mit dem Element "Fehler" lässt sich ein **individueller Fehlerfall** definieren. Es dient als **alternative Abschlussvariante**, die nach den entsprechenden Schritten im Workflow eintreten soll – z. B. wenn bestimmte **Felder leer** bleiben.

Alternativ kann ein Fehler auch direkt **im Skript**, z. B. im **Benutzerskript-Element**, integriert werden, z. B. mit dem Befehl “***throw***“.

<figure><img src="/files/duxpd7bE4chwX888fpkp" alt="Eingebaute Fehler im Workflow-Skript" width="563"><figcaption></figcaption></figure>

Auf diese Weise lässt sich gezielt eine **Aktion verhindern**. Der ausgelöste Fehler wird anschließend als solches im **Workflow-Protokoll** vermerkt. Problemmeldungen, die auf diese Weise ausgelöst wurden, werden im System **lila** dargestellt.

<figure><img src="/files/czMaTLIelsjRHee5UXBA" alt="Workflow Fehler"><figcaption></figcaption></figure>

Weitere Informationen dazu findest Du um [**Abschnitt** “**Fehlermeldungen in Workflows**“](/vario-cloud-handbuch/system/workflows/workflow-beispiele.md#fehlermeldungen-in-workflows).

## <i class="fa-user-gear">:user-gear:</i> Benutzeraktion <a href="#benutzeraktion" id="benutzeraktion"></a>

Das Element "Benutzeraktion" fügt dem Workflow einen **manuellen Zwischenschritt** hinzu, bei dem eine **Interaktion durch den Benutzer** erforderlich ist, um den Ablauf fortzusetzen. Das **Element “Benutzeraktion”** steht nur in **asynchrone Workflows** zur Verfügung.

Typischerweise wird dem Benutzer ein **Pop-up-Fenster** mit **Auswahlmöglichkeiten** angezeigt. Erst nachdem die Aktion bestätigt oder eine Auswahl getroffen wurde, läuft der Workflow weiter.

<details>

<summary><mark style="color:$primary;"><strong>Beispiel</strong></mark> Benutzeraktion</summary>

Ein Szenario für eine Benutzeraktion ist eine **Abfrage beim Speichern eines Angebots**, ob dieses:

* einem **bereits vorhandenen Deal** zugeordnet werden soll,
* einem **neuen Deal** zugewiesen werden soll,
* oder **nicht mit einem Deal verknüpft** werden soll.

Die getroffene Auswahl wird anschließend im **nachfolgenden Benutzerskript-Element** verarbeitet, um den entsprechenden Schritt im Workflow auszuführen.

<figure><img src="/files/mSHwDMUxjx1aLPr4r07j" alt="Beispiel Benutzeraktion" width="375"><figcaption><p>Beispiel Benutzeraktion</p></figcaption></figure>

</details>

### **Reiter Allgemein**

Neben den Feldern “**Bezeichnung**” und “**Beschreibung**” stehen Dir im **Reiter “Allgemein”** folgende Optionen zur Verfügungen. Für die Aktivierung des Workflow muss eine dieser Einstellungen ausgewählt werden:

* **Zuständige Benutzer** und **Zuständige Benutzergruppe**: hier kannst Du festlegen, wer die Benutzeraktion ausführen soll, wenn dies **nicht** der Benutzer sein soll, der die Aktion ausgelöst hat.
* **Toggle “Verantwortlicher Benutzer ist ausführender Benutzer”**: ist dieser Schalter aktiviert, wird die Benutzeraktion vom **gleichen Benutzer** ausgeführt, der sie ausgelöst hat.

<figure><img src="/files/uni3PVGxs0LXHDzvSNlB" alt="Reiter Allgemein" width="563"><figcaption></figcaption></figure>

### **Reiter Benutzeraktionen**

Über den **Button “+Benutzeraktion”** kannst Du eine neue Benutzeraktion anlegen. Jede Benutzeraktion steht für eine **manuelle Entscheidung oder Eingabe**, die vom Benutzer vorgenommen werden muss, z. B. die Auswahl zwischen mehreren Optionen in einem Pop-Up-Fenster. Die Benutzeraktion kann jederzeit über das **Kreuz in der oberen rechten Ecke** des Elements wieder **entfernt** werden.

<figure><img src="/files/7KEpzFAhBKidve5UrQRU" alt="Reiter Benutzeraktionen" width="563"><figcaption></figcaption></figure>

Eine Benutzeraktion unterteilt sich in drei Teilbereiche. Dies sind die **Benutzeraktion (1)** selbst, die **Auswahlmöglichkeiten (2)** innerhalb der Benutzeraktion und die **Folgeentscheidungen (3)** in den jeweiligen Auswahlmöglichkeiten. In den folgenden Abschnitten gehen wir näher auf diese Teilbereiche und die entsprechenden Felder ein.

<figure><img src="/files/CueIcPrnugZmZWaXr2BN" alt="Bereiche im Reiter Benutzeraktionen" width="563"><figcaption></figcaption></figure>

#### Bereich Benutzeraktion

Innerhalb einer Benutzeraktion kannst Du aus **drei Strukturierungsvarianten** wählen:

* **Einfaches Eingabefeld oder Toggle**: Der Benutzer muss einen Wert eintragen (z. B. Text, Datum, Zahl) oder eine Option aktivieren.
* **Suchdialog**: Der Benutzer wählt einen bestehenden Datensatz aus einem bestimmten Bereich der VARIO Cloud, z. B. eine Adresse oder einen Artikel.
* **Auswahlmöglichkeiten mit Folgeentscheidungen:** Der Benutzer trifft eine Auswahl zwischen **mehreren vordefinierten Optionen**. Je nach gewählter Option, kann eine **eigene Folgeentscheidung** definiert werden, anhand der das Ergebnis der Benutzeraktion weiterverarbeitet wird.

{% hint style="info" icon="lightbulb-on" %}

#### Mehrere Benutzeraktionen

Du kannst auch **mehrere Benutzeraktionen** anlegen, um **verschiedene Eingabearten** miteinander zu kombinieren. Beispielsweise lässt sich eine Benutzeraktion erstellen, in der der Benutzer **ein Datum** eingibt, und eine weitere, in der er eine von **mehreren Auswahlmöglichkeiten** trifft.

Wird **eine** dieser Benutzeraktionen als **synchron** definiert, gelten **alle Benutzeraktionen** des Workflows als synchron.
{% endhint %}

**Felder zur Benutzeraktion**

**Ergebnisname der Benutzeraktion** – Interner Kennzeichnung, unter der die Benutzeraktion im **Skript** des **nachfolgenden Elements** verwendet wird. Der Name kann **frei** gewählt werden, sollte jedoch **eindeutig** und **nachvollziehbar** sein, so dass er auch nachträglich verständlich bleibt.

**Typ** – Bestimmt den **Feldtyp** für die Eingabe, z. B. **Text, Datum** oder **Währung**. Für **Auswahlmöglichkeiten** muss “**Text**” ausgewählt sein. Bei **Suchdialogen** entfällt dieser.

**Toggle “Mehrfachauswahl”** – Ermöglicht es dem Benutzer, **mehrere Optionen gleichzeitig auszuwählen**. Nur relevant bei Auswahlfeldern.

**Toggle “Synchron”** – Gibt an, ob die Benutzeraktion **synchron** (vor sofortiger Fortsetzung des Workflows) oder **asynchron** (zeitversetzt) ausgeführt wird.

**Suchdialog** – Ermöglich die **Auswahl eines Datensatzes** aus einem VARIO Cloud Bereich (z. B. Adresse).

**Bezeichnung Benutzeraktion** – Beschreibungstext, der im **Pop-up-Fenster** über den Auswahlmöglichkeiten angezeigt wird. Beispiel: **“Deal mit Angebot verknüpfen”**.

<figure><img src="/files/9MEAqrhceoTCfyXJAloZ" alt="Bereich Benutzeraktion" width="563"><figcaption></figcaption></figure>

#### **Bereich zur Auswahlmöglichkeit**

Innerhalb einer Benutzeraktion kannst Du mehrere **Auswahlmöglichkeiten** definieren, aus denen der Benutzer im Pop-up-Fenster wählen kann. Jede Auswahlmöglichkeit steht dabei für eine Option, die zur Auswahl steht.

Im Beispiel **“Deal anlegen?”** stehen dem Benutzer folgende Optionen zur Verfügung:

* “**Zu einem bestehenden Deal zuordnen**“
* “**Zu einem neuen Deal zuordnen**“
* “**Keine Zuordnung**“

<figure><img src="/files/o14sXSmIDUDooOsPGkZy" alt="Beispiel für Auswahlmöglichkeit" width="563"><figcaption></figcaption></figure>

Über den **Button “+Auswahlmöglichkeit”** kannst Du die einzelne Optionen hinzufügen und definieren.

**Felder zur Auswahlmöglichkeit**

**Bezeichnung Auswahlmöglichkeit** – Beschreibungstext zur Auswahlmöglichkeit, der dem Benutzer in der Benutzeraktion angezeigt wird. Beispiel: “**Zu einem bestehenden Deal zuordnen**“.

**Ergebniswert des Auswahlmöglichkeit** – Interner Kennzeichnung, unter der die Benutzeraktion im **Skript** des **nachfolgenden Elements** verwendet wird. Der Name kann **frei** gewählt werden, sollte jedoch **eindeutig** und **nachvollziehbar** sein, so dass er auch nachträglich verständlich bleibt.

**Toogle “Standard”** – Legt fest, welche Option beim Öffnen des Pop-ups **standardmäßig vorausgewählt** ist. Beispiel: **“Zu einem neuen Deal zuordnen”** bei häufigem Anwendungsfall.

<figure><img src="/files/PrDnmTm2LV3VlEIt1G0Z" alt="Bereich zur Auswahlmöglichkeit" width="563"><figcaption></figcaption></figure>

#### **Bereich zur Folgeentscheidung**

Zu jeder **Auswahlmöglichkeit** kann eine **Folgeentscheidung** definiert werden. Diese wird **ausgeführt**, sobald der Benutzer die jeweilige Auswahl im Pop-up-Fenster trifft.

<details>

<summary><mark style="color:$primary;"><strong>Beispiel:</strong></mark> Folgeentscheidung zur Auswahl "Zu einem bestehenden Deal zuordnen"</summary>

Im Fall unseres Beispiels **„Deal anlegen?“** ergeben sich folgende Folgeentscheidungen:

* Wird die Auswahlmöglichkeit **„Zu einem bestehenden Deal zuordnen“** gewählt, erscheint ein **Suchfeld**, über das der Benutzer einen vorhandenen Deal auswählen kann.

<figure><img src="/files/8sNoEBbgec6TfLqAvQ0T" alt="Beispiel für Folgeentscheidung Option 1" width="563"><figcaption></figcaption></figure>

* Wird hingegen **„Zu einem neuen Deal zuordnen“** ausgewählt, öffnet sich ein **Mehrfachauswahldialog**, in dem das **Thema des neuen Deals** ausgewählt werden kann.

<figure><img src="/files/KAxdKt4UcBYmx9E13h3P" alt="Beispiel für Folgeentscheidung Option 2" width="563"><figcaption></figcaption></figure>

</details>

**Felder zur Folgeentscheidung:**

**Ergebnisname der Folgeentscheidung** – Interner Kennzeichnung, unter der die Folgeentscheidung im **Skript** des **nachfolgenden Elements** verwendet wird. Der Name kann **frei** gewählt werden, sollte jedoch **eindeutig** und **nachvollziehbar** sein, so dass er auch nachträglich verständlich bleibt.

**Typ** – Definiert den Feldtyp der Eingabe (z. B. **Text**, **Datum**, **Währung**). Wird ein **Suchdialog** verwendet, legt der Typ fest, **welcher Wert** aus dem Datensatz genutzt wird – z. B. die **ID** eines Deals (**Typ: Zahl**).

**Suchdialog** – Ermöglicht die Auswahl eines Datensatzes aus einem Bereich der VARIO Cloud – z. B. ein **bestehender Deal** oder ein **Deal-Thema**.

**Bezeichnung Folgeentscheidung** – Beschreibungstext zur Folgeentscheidung, der dem Benutzer in der Benutzeraktion angezeigt wird. Beispiel zur **Auswahlmöglichkeit “Zu einem bestehenden Deal zuordnen”**: “**Bestehenden Deal auswählen**“

<figure><img src="/files/1N5Xbl5L3yVgNgofbn0M" alt="Bereich zur Folgeentscheidung" width="563"><figcaption></figcaption></figure>

### **Ergebnisnamen und -werten im Skript integrieren**

Damit die Entscheidung, die Du in einer **Benutzeraktion** triffst, auch eine konkrete Auswirkung im Workflow hat, müssen die verwendeten **Ergebnisnamen** und **Ergebniswerte** korrekt in ein Folgeelement – zum Beispiel ein **Benutzerskript** – übernommen werden. Nur so kann der Workflow abhängig von Deiner Auswahl unterschiedliche Aktionen ausführen.

In unserem Beispiel wird das **Angebot** erst durch die Verarbeitung im Benutzerskript mit einem **bereits vorhandenen** oder einem **neuen Deal** verknüpft. Dazu werden die in der Benutzeraktion definierten **Ergebnisnamen** und **Ergebniswerte** im Skript des darauffolgenden **Benutzerskript-Elements** wie folgt integriert:

<details>

<summary><mark style="color:$primary;">Skript</mark> mit <strong>Ergebnisnamen</strong> und <strong>Ergebniswerten</strong></summary>

{% code title="Benutzeraktion für den Workflow " %}

```
import workItem from “work_item_script”;

workItem.setGuard((ctx) => {
return true;
});

workItem.setAction((ctx) => {
let crmDealService = ctx.services.crmDealService;
let crmDocumentRefService = ctx.services.crmDocumentRefService;
let documentService = ctx.services.documentService;
let userAndGroupService = ctx.services.userAndGroupService;
let utils = ctx.services.utils;

let userDecision = ctx.parameters[‘DECISION_KEY_CHECK_DEAL_TO_OFFER‘];
let documentId = ctx.parameters[‘documentId’];

if (userDecision == ‘DECISION_ANSWER_REFERENCE_TO_EXISTING_DEAL‘) {
let existingDealId = ctx.parameters[‘DECISION_ANSWER_EXISTING_DEAL_ID‘];
crmDocumentRefService.addDocumentRef(existingDealId,
‘DEAL’,
documentId);
}
else if (userDecision == ‘DECISION_ANSWER_CREATE_NEW_DEAL‘) {
let document = documentService.readById(documentId);
let dealState = crmDealService.findStartState();
let dealType = crmDealService.findTypeByLabel(‘Vertrieb’);
let dealTopicId = ctx.parameters[‘DECISION_ANSWER_NEW_DEAL_TOPIC_ID‘];
let dealTopic = crmDealService.findTopicById(dealTopicId);
let dealPriority = crmDealService.findPriorityByType(‘NORMAL’);
let currentUser = userAndGroupService.getCurrentUser();

let deal = crmDealService.getNewDto();
deal.typeRef = utils.toApiReference(dealType);
deal.stateRef = utils.toApiReference(dealState);
deal.priorityRef = utils.toApiReference(dealPriority);
deal.assignedUserRef = utils.toApiReference(currentUser);
deal.mainResponsibleUserRef = utils.toApiReference(currentUser);
deal.topicRef = utils.toApiReference(dealTopic);
deal.accountRef = utils.toApiReference(document.accountId);
deal = crmDealService.create(deal);

crmDocumentRefService.addDocumentRef(deal.id,
‘DEAL’,
documentId);
}
});
```

{% endcode %}

</details>

## <i class="fa-scroll">:scroll:</i> Benutzerskript <a href="#benutzerskript" id="benutzerskript"></a>

Mit dem **Element** **"Benutzerskript"** fügst Du dem Workflow einen automatisierten Schritt hinzu, der **ohne Benutzerinteraktion** ausgeführt wird. Die Ausführung erfolgt anhand eines individuell definierten **Skripts**.

### Reiter Skript

Im **Reiter “Skript**” steht Dir ein integrierter **JavaScript-Editor** zur Verfügung, in dem Du das Skript für das **Benutzerskript-Element** bearbeiten kannst. Hier kannst Du auf verschiedene **Utility-Funktionen**, **Parameter** und **Services** zugreifen und diese gezielt einsetzen, um den gewünschten Ablauf im Workflow zu steuern.

Im **Feld “Skript-Modul”** kannst Du eines der unter dem [**Menüpunkt “Skripte”**](/vario-cloud-handbuch/system/skripte.md) **gespeicherten Skripte** auswählen. So musst Du den Skripttext nicht bei jedem Element neu verfassen und kannst zentrale Skripte bei Bedarf gezielt anpassen oder erweitern.

Wenn Du **kein** Skript aus der Liste **auswählst**, muss der Skript direkt im Element **manuell** eingetragen werden, um das Element speichern zu können.

<figure><img src="/files/tHmljzevjCRzpEjLMmtT" alt="Reiter Skript" width="563"><figcaption></figcaption></figure>

Im Skript eines **Benutzerskript-Elements** stehen Dir verschiedene **Funktionen** und **Objekte** zur Verfügung, mit denen Du den Ablauf des Workflows gezielt steuern kannst. Hier ein Überblick über die wichtigsten Begriffe:

<table data-header-hidden><thead><tr><th width="211">Begriff</th><th>Beschreibung</th></tr></thead><tbody><tr><td><em><strong>setGuard</strong></em> (optional)</td><td>Definiert eine <strong>Bedingung</strong>, unter der der Workflow ausgeführt werden soll. Beispiel: nur bei bestimmtem Ländercode.</td></tr><tr><td><em><strong>return true</strong></em></td><td>Gibt innerhalb der <em><strong>setGuard</strong></em> an, dass die definierte Aktion <strong>immer ausgeführt</strong> wird.</td></tr><tr><td><em><strong>return false</strong></em></td><td>Gibt innerhalb der <em><strong>setGuard</strong></em> an, dass die definierte Aktion <strong>nie ausgeführt</strong> wird.</td></tr><tr><td><em><strong>setPrepare</strong></em> (optional)</td><td>Hier können <strong>Variablen</strong> mit Parametern befüllt werden, die später in <em><strong><code>setAction</code></strong></em> verwendet werden.</td></tr><tr><td><em><strong>setAction</strong></em></td><td>Definiert die <strong>eigentliche Aktion</strong>, die im Workflow ausgeführt werden soll.</td></tr><tr><td><em><strong>ctx</strong></em></td><td>Bietet Zugriff auf verschiedene <strong>Kontextinformationen</strong>, die sich je nach Workflow-Auslöser unterscheiden können.</td></tr><tr><td><em><strong>ctx</strong></em>.<em><strong>availableinput</strong></em></td><td>Zugriff auf die für den Workflow <strong>verfügbaren Parameter</strong>, <strong>je nach Auslöser</strong> (z. B. die Aufgaben-ID bei einem Workflow mit dem Auslöser "Nach dem Speichern einer Aufgabe").</td></tr><tr><td><em><strong>ctx.instanceDetails</strong></em></td><td>Zugriff auf Informationen zur <strong>aktuellen Workflow-Instanz</strong>.</td></tr><tr><td><em><strong>ctx.parameters</strong></em></td><td>Zugriff auf <strong>vordefinierte Parameter</strong>, z. B. Vorgängerbeleg oder vorherige Datensatzversion. Anders als bei <em><strong>availableinput</strong></em> können diese erweitert werden, z. B. durch C-Units.</td></tr><tr><td><em><strong>ctx.parameters['previousDocument']</strong></em></td><td>Zugriff auf die <strong>vorherige Version des Beleges</strong> für Workflows mit den Auslösern "<strong>Vor dem Speichern</strong>", "<strong>Nach dem Speichern</strong>", "<strong>Bei Beginn der Bearbeitung</strong>" und "<strong>Bei Synchronisierung" von Belegen</strong>.</td></tr><tr><td><em><strong>ctx.parameters['sourceDocumentId']</strong></em></td><td>Zugriff auf die <strong>ID des Ursprungsbelegs</strong> für einen Workflow mit dem Auslöser <strong>Übernahme von Belegen</strong>.</td></tr><tr><td><em><strong>ctx.services</strong></em></td><td>Zugriff auf die für den Workflow zur Verfügung stehenden Verarbeitungsmethoden, mit denen wiederum auf auf die <strong>Geschäftsobjekte</strong> in der VARIO Cloud, z. B. Adressen oder Artikel, zugegriffen werden kann.<br>Beispiel: <em><strong>ctx.services.accountService.create</strong></em> = Adresse anlegen</td></tr><tr><td><em><strong>ctx.services.logger.info(…)</strong></em></td><td>Fügt einen selbst definierten Hinweis zum <a href="/pages/y2JAbPuipC4vdP9skhNv"><strong>Log des Elements</strong> </a>hinzu.</td></tr><tr><td><em><strong>ctx.services.vqlService</strong></em></td><td>Ausführung einer <strong>VQL-Abfrage</strong> um im Workflow auf das Ergebnis dieser zugreifen zu können.</td></tr></tbody></table>

{% hint style="info" icon="lightbulb-on" %}

#### Tips zur Verfassung des Skipts

* Im **JavaScript-Editor** im Reiter “**Skript”** steht Dir eine **Autovervollständigung** zur Verfügung, die Dir alle verfügbaren **Kontextobjekte** (`ctx.`) und **JavaScript-Methoden** auflistet.
  * Beim Navigieren durch die Vorschläge mit den **Pfeiltasten** wird jeweils ein **Tooltip** mit einer Kurzbeschreibung des gewählten Objekts oder Befehls eingeblendet.

<img src="/files/bH5VI4ZaSBzix67q0Tpj" alt="Tips zur Verfassung des Skipts" data-size="original">

* Du kannst eigene Funktionen **außerhalb** von `setAction` definieren und anschließend **innerhalb** von `setAction` verwenden.
* Zudem kannst Du **Konstanten** definieren, um z. B. **Feldnamen e**indeutig zu benennen.
* Mit der Tastenkombination **Strg+F** kann die Suchfunktion im Skript geöffnet werden, um nach einem Wert im Skript zu suchen.
* In den **C-Units** verschiedener Bereiche gibt die **Spalte “Version”** an, wie oft ein Datensatz bereits bearbeitet wurde. Diese Information kann in Workflows genutzt werden, um bestimmte Schritte **abhängig von der Bearbeitungsversion** auszuführen. Wenn z. B. Zusatzfelder nicht direkt beim Anlegen eines Datensatzes ausgefüllt werden, kannst Du Workflow-Schritte so steuern, dass sie erst **ab einer bestimmten Versionsnummer** greifen – also z. B. erst, wenn der Datensatz ein zweites Mal gespeichert wurde. Weitere Informationen dazu findest Du [**hier**](/vario-cloud-handbuch/grundlagen-and-konzepte/konfigurierbare-tabellen-c-units/selektionen-konfigurieren.md#reiter-spalten).
  {% endhint %}

### Reiter Parameter

Im **Reiter “Parameter”** kannst Du über “**+Parameter**” zusätzliche Parameter anlegen, die im Skript verwendet werden können. Dabei stehen Dir zwei Optionen zur Verfügung:

* **Fester Wert:** Du kannst ein festen **Parameter** anlegen, der aus einem **Text**, einer **Zahl** oder einem **booleschen Wert** besteht.
* **Selektionsergebnis**: Du kannst das Ergebnis einer **vorhandenen Selektion** verwenden. Dafür muss die Selektion den **Toggle “Workflow”** aktiviert haben, damit diese in einem Workflow verfügbar ist. Weitere Informationen dazu findest Du [**hier**](/vario-cloud-handbuch/grundlagen-and-konzepte/konfigurierbare-tabellen-c-units/selektionen-konfigurieren.md#fur-workflow).

Über die **Symbole** <img src="/files/tpNBGR2T7Yilv1t59giX" alt="Parameter mit Selektion" data-size="line">/ <img src="/files/Wa50lNsi5chj7C4VjbDY" alt="Parameter mit Fester Wert" data-size="line"> kannst Du zwischen beide Optionen **wechseln**.

<figure><img src="/files/WB1OgQo4keQXBlEo2LNM" alt="Reiter Parameter" width="563"><figcaption></figcaption></figure>

**Felder zur Parametereinrichtung**

**Name** – Interne Kennzeichnung des Parameters, der im **Skript** verwendet wird. Der Name kann **frei** gewählt werden, sollte jedoch **eindeutig** und **nachvollziehbar** sein.

**Wert** – Der **feste Wert**, der dem Parameter zugewiesen wird und im Workflow bzw. Skript verwendet werden kann.

**Datentyp** – Legt fest, **welche Art von Wert** im Feld “Wert” angegeben werden kann. Zur Auswahl stehen: **Text**, **Zahl** und **Boolesch**.

**Selektion** – Hier kannst Du eine im voraus angelegte Selektion auswählen. **Voraussetzung**: Toggle **“Workflow**” ist aktiv.

**Pfad** – Gibt den **Spalten- oder Feldnamen** aus den **C-Unit-Einstellungen** an, der bestimmt, **welcher Wert aus der Selektion** für den Parameter übernommen wird.\
Die benötigten Bezeichnungen kannst Du im **Support-Modus** der Selektion über den **Toggle “Originale C-Unit Bezeichnungen anzeigen”** einsehen.

## <i class="fa-circle-question">:circle-question:</i> Abfrage <a href="#abfrage" id="abfrage"></a>

Das Element "Abfrage" teilt den Workflow in **mehrere** mögliche **Pfade** auf. Welcher Pfad ausgeführt wird, hängt von der im Element definierten **Bedingung** ab.

Im Beispiel-Workflow **“Lieferungs- und Zahlungsmodalitäten für Angebote“** wird eine Abfrage eingesetzt, um zu prüfen, ob der neu angelegte Beleg ein **Angebot** ist:

* **Wenn ja**, wird der Pfad über das **Benutzerskript-Element „Füllung von Zahlungs- und Liefermodalitäten“** geführt.
* **Wenn nein**, verzweigt der Workflow direkt zum **Warten-Element**, das die verschiedenen Pfade wieder zusammenführt.

Mit der Abfrage steuerst Du also gezielt, **welcher Ablauf im Workflow** abhängig von definierten Bedingungen durchlaufen wird.

<figure><img src="/files/gNhQDQZNt6I9H9w6f8lW" alt="Abfrage"><figcaption></figcaption></figure>

### Reiter Skript

Im **Reiter “Skript”** des Abfrage-Elements steht Dir ein integrierter **JavaScript-Editor** zur Verfügung. Dort definierst Du eine **Bedingung**, deren **Ergebnis als Zeichenkette** (`string`) zurückgegeben wird. Jede zurückgegebene Zeichenkette entspricht **einer möglichen Abzweigung**, die Du im Reiter **“Abzweigungen”** anlegen kannst. Auf Basis des Rückgabewerts wird der entsprechende Pfad im Workflow **fortgeführt**. Die möglichen Abzweigungen legst Du im Skript mit **`setSplit()`** fest.

**Hinweis:** Weitere Informationen zum Aufbau und zur Funktionsweise des Skripts findest Du im vorherigen Abschnitt zum **Benutzerskript**.

<figure><img src="/files/QnHDPymHfswcZTTF2btM" alt="Reiter Skript" width="563"><figcaption></figcaption></figure>

### Reiter Parameter

Wie beim **Benutzerskript-Element** kannst Du auch im Reiter **“Parameter”** des Abfrage-Elements über “**+ Parameter”** zusätzliche **Werte** anlegen, die im Skript verwendet werden können. Dabei stehen Dir zwei Optionen zur Verfügung:

* **Fester Wert:** Du kannst ein festen **Parameter** anlegen, der aus einem **Text**, einer **Zahl** oder einem **booleschen Wert** besteht.
* **Selektionsergebnis**: Du kannst das Ergebnis einer **vorhandenen Selektion** verwenden. Dafür muss die Selektion den **Toggle “Workflow”** aktiviert haben, damit diese in einem Workflow verfügbar ist. Weitere Informationen dazu findest Du [**hier**](/vario-cloud-handbuch/grundlagen-and-konzepte/konfigurierbare-tabellen-c-units/selektionen-konfigurieren.md#weitere-optionen).

Über die **Symbole** <img src="/files/tpNBGR2T7Yilv1t59giX" alt="Parameter mit Selektion" data-size="line">/ <img src="/files/Wa50lNsi5chj7C4VjbDY" alt="Parameter mit Fester Wert" data-size="line"> kannst Du zwischen beide Optionen **wechseln**. Weitere Informationen zu den **einzelnen Feldern** findest Du im **vorherigen Abschnitt**.

### Reiter Abzweigungen

Im **Reiter “Abzweigungen”** kannst Du die gewünschten **Pfad-Abzweigungen** hinzufügen und diese **entsprechend der Rückgabewerte** im Skript benennen.\
Jede hier angelegte Abzweigung stellt einen **möglichen Verlauf** im Workflow dar, abhängig vom Ergebnis der Bedingung im Skript.

## <i class="fa-merge">:merge:</i> Warten (eins) <a href="#warten-eins" id="warten-eins"></a>

Das Element "Warten (eins)" dient dazu, **mehrere Pfade**, die zuvor durch ein **Abfrage-Element** entstanden sind, wieder **zusammenzuführen**.

Sobald **einer der Pfade** das Warten-Element erreicht, wird der Workflow **fortgesetzt** – ohne darauf zu warten, dass auch die anderen Pfade abgeschlossen sind.

## <i class="fa-circle-pause">:circle-pause:</i> Warten (alle)

Ähnlich wie beim Element **“Warten (eins)”** werden mit "Warten (alle)" mehrere zuvor verzweigte **Pfade** wieder **zusammengeführt**.

**Unterschied:** Der Workflow wird **erst** dann fortgesetzt, wenn **alle** angebundenen Pfade vollständig abgeschlossen sind.

## <i class="fa-traffic-light-stop">:traffic-light-stop:</i> Warten (indirekt) <a href="#warten-indirekt" id="warten-indirekt"></a>

Mit dem Element "Warten (indirekt)" kannst Du im Workflow einen **Zwischenstopp** einbauen, der den Ablauf **temporär pausiert**. Die **Fortsetzung** erfolgt **asynchron**, sobald ein **bestimmtes Signal**, eine **Bedingung** oder ein **Zeitpunkt** eintritt. Das **Element “Warten (indirekt)”** steht nur in **asynchrone Workflows** zur Verfügung.

Diese Bedingungen werden – ähnlich wie im Abfrage-Element – im **Reiter “Skript”** definiert und im Reiter **“Fortsetzungssignale”** angelegt. Es muss **mindestens ein Fortsetzungssignal** vorhanden sein, damit der Workflow mit dem Element “Warten (indirekt)” aktiviert werden kann. Es können jedoch beliebig viele Fortsetzungssignale hinzugefügt werden.

## <i class="fa-clock">:clock:</i> Timeout <a href="#timeout" id="timeout"></a>

Mit dem Element "Timeout" lässt sich eine **feste Wartezeit** im Workflow einbauen. Im Feld **“Timeout (in Millisekunden)”** gibst Du die gewünschte **Zeitspanne** an, über die der Workflow **pausiert** werden soll. Erst **nach Ablauf dieser Zeit** wird der Workflow **automatisch fortgesetzt**.

Das **Element “Timeout”** steht nur in **asynchrone Workflows** zur Verfügung.

## <i class="fa-arrow-progress">:arrow-progress:</i> Unter-Workflow <a href="#unter-workflow" id="unter-workflow"></a>

Mit dem Element "Unter-Workflow" kannst Du einen **bereits angelegten Unter-Workflow** auswählen und in den aktuellen Workflow **einfügen**. Das ist besonders hilfreich, wenn **wiederkehrende Abläufe** in mehreren Workflows verwendet werden oder wenn Du komplexe Prozesse **übersichtlich strukturieren** möchtest.

{% hint style="info" icon="message-exclamation" %}

#### Asynchrone Unter-Workflows nicht in synchrone Workflows einsetzbar

Ein **asynchroner Unter-Workflow** kann nicht in einen **synchronen Workflow** eingebunden werden, da sich die verfügbaren Elemente unterscheiden.
{% endhint %}

Weitere Informationen zur Erstellung und Verwendung von Unter-Workflows findest Du im [**Abschnitt “Unter-Workflows”**](/vario-cloud-handbuch/system/workflows/workflows-erstellen.md#unter-workflows).

## <i class="fa-circle-question">:circle-question:</i> Abfrage der Dokumentkategorien

Das Element **"**&#x41;bfrage der Dokumentkategorien" ist eine **vordefinierte Variante** des klassischen Abfrage-Elements. Es dient dazu, den Workflow **abhängig von der Belegkategorie** in **mehrere Pfade** aufzuteilen.

Im Gegensatz zum regulären Abfrage-Element ist das Skript bereits **vorkonfiguriert**. Im **Reiter “Abzweigungen**” sind die **gängigen Belegkategorien** bereits als **vordefinierte Abzweigungen** angelegt. Diese kannst Du je nach Bedarf **bearbeiten, anpassen** oder **erweitern**.

<figure><img src="/files/oOJAc1moEoyOCtQM4LgZ" alt="Abfrage der Dokumentkategorien" width="563"><figcaption></figcaption></figure>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://help.vario-software.de/vario-cloud-handbuch/system/workflows/workflow-elemente.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
