# Skripte

In diesem **Menüpunkt** kannst Du eigene Skripte für Deine Workflows anlegen und zentral verwalten. Diese Skripte lassen sich anschließend gezielt einzelnen Workflow-Elementen zuweisen, ohne dass sie für jedes Element neu erstellt werden müssen. Das sorgt für eine **saubere Struktur** und erleichtert die **konsistente** Verwendung von Skripten.

## Skript-Gruppen

Im **Bereich “Skript-Gruppen”** kannst Du Gruppen anlegen, um Deine Skripte thematisch zu strukturieren. So behältst Du auch bei einer größeren Anzahl von Skripten den Überblick. Über den **grünen Pfeil** neben einer Gruppe kannst Du die darin enthaltene Skripte aufklappen und einsehen.

Mit dem **Button “+Freies Skript”** bzw. **“+Vordefiniertes Skript”** innerhalb einer geöffneten Gruppe legst Du direkt ein neues Skript an, das automatisch dieser Gruppe zugeordnet wird.

<figure><img src="/files/jnxZbuWmVtvnJHUEoNiU" alt=""><figcaption></figcaption></figure>

Sobald Du ein Skript einer Gruppe zuordnest, wird es nicht mehr im darunterliegenden **Bereich “Skripte”** angezeigt, sondern **ausschließlich unter der jeweiligen Skript-Gruppe**.

## Freie Skripte

Im **Bereich “Freie Skripte”** werden ausschließlich die Skripte angezeigt, die **keiner Skript-Gruppe** zugeordnet sind.

<figure><img src="/files/GW1gf4oMlE5agZ68DgXp" alt=""><figcaption></figcaption></figure>

Über die **Buttons “+Freies Skript”** und **“+Vordefiniertes Skript”** kannst Du ein **neues Skript** anlegen. Neben einer **Bezeichnung** und einer optionalen **Beschreibung** gibst Du im **Feld “Domäne”** den Bereich an, in dem das Skript verwenden werden soll.

Folgende Bereiche stehen Dir **als Domäne** zur Verfügung:

* **App**: Skripte können im Zusammenhang von installierte Apps unter **System/Apps** im [**Reiter “Skripte”**](/vario-cloud-handbuch/system/apps.md#Skripte) verwendet werden und stehen dort innerhalb der jeweiligen App-Funktionalität zur Verfügung.
* **Bibliothek**: Skripte können mit dieser Domäne beispielsweise als **Entwurf** gespeichert werden, ohne dass sie in einem bestimmten Bereich auswählbar sind. Diese Domäne eignet sich zur **Vorbereitung** oder **Archivierung** von Skripten.
* **Import/Stapelverarbeitung**: Skripte mit dieser Domäne können für **vordefinierte** und **individuelle Stapel-Aktionen** in verschiedenen Bereichen verwendet werden. Zusätzlich können sie für die [**manuelle Skriptverarbeitung**](broken://pages/ff3104c05679837052970881604412aa75670f4d#Manuelle-Skriptverarbeitung) unter **System/Import** eingesetzt werden.
* **Undefiniert**: Skripte können auch mit dieser Domäne beispielsweise als Entwurf gespeichert werden, ohne in einem bestimmten Bereich auswählbar zu sein. Diese Domäne eignet sich ebenfalls zur **Vorbereitung** oder **Archivierung** von Skripten.
* **Workflow Intermediate-Event**: Skripte können unter **System/Workflows** im [**Element “Warten (indirekt)”**](https://help.vario-software.de/vario-cloud-handbuch/system/pages/8c60fabaa2ba339b0ac75e00e9d08e0e6d1f243b#Warten-\(indirekt\)) verwendet werden.
* **Workflow Split-Gateway**: Skripte stehen unter **System/Workflows** im [**Element “Abfrage”**](broken://pages/8c60fabaa2ba339b0ac75e00e9d08e0e6d1f243b#Abfrage) zur Verfügung.
* **Workflow-Skript**: Skripte können unter **System/Workflows** im [**Element “Benutzerskripte”**](broken://pages/8c60fabaa2ba339b0ac75e00e9d08e0e6d1f243b#Abfrage) eingebunden werden.

### Freie und Vordefinierte Skripte

Freie und vordefinierte Skripte unterscheiden sich darin, wie nachträgliche Anpassungen an dem Skript gespeichert werden. Freie Skripte können jederzeit über den **Button “Bearbeiten”** beliebig bearbeitet und gespeichert werden.

<figure><img src="/files/zDidaZhawYNctxuDKiWA" alt=""><figcaption></figcaption></figure>

Bei vordefinierten Skripten stehen Dir zwei unterschiedliche **Bearbeitungsoptionen** zur Verfügung:

* **Bearbeiten**: Hierüber kannst Du **Änderungen** oder **Ergänzungen** vornehmen. Es lassen sich jedoch nur solche Anpassungen bearbeiten oder löschen, die über diesen Button erstellt wurden.
* **Vorgabedaten ändern**: Über diese Option bearbeitest Du das **Ursprungsskript** sowie alle Änderungen, die ebenfalls über **“Vorgabedaten ändern”** vorgenommen wurden. Änderungen über den Button **“Bearbeiten”** sind in dieser Ansicht nicht sichtbar.

Mit dem **Button “Vorgabedaten zurücksetzen”** entfernst Du **alle Anpassungen**, die über **“Bearbeiten”** vorgenommen wurden. Das Skript wird dabei auf das **Ursprungsskript** bzw. auf den **letzten Stand** zurückgesetzt, der über **“Vorgabedaten ändern”** gespeichert wurde.

{% hint style="warning" %}
**Skript über “Vorgabedaten ändern” anpassen**

Wenn Du ein Skript über den **Button “Vorgabedaten ändern”** bearbeitest, können **nur** das **Ursprungsskript** sowie Änderungen, die ebenfalls über **“Vorgabedaten ändern”** vorgenommen wurden, angepasst werden. Anpassungen, die über den **Button “Bearbeiten”** durchgeführt wurden, sind in dieser Ansicht nicht sichtbar und werden beim Speichern **überschrieben**.
{% endhint %}

### Verfassung des Skripts

Im **Bereich “Skript”** kannst Du dann Deinen Skript zusammensetzen. Dieser kann bei der Auswahl des Skripts in einem Element beliebig angepasst und erweitert werden. Aus diesem Grund sind diese Skripte besonders nützlich, um **Skriptbestandteile** zu speichern, die in **mehreren Elementen** benötigt werden.

{% hint style="info" %}
**JavaScript-Kenntnisse erforderlich**

Für das Erstellen und Bearbeiten von Workflows sind Kenntnisse in der Programmiersprache **JavaScript** erforderlich. Die **Workflows greifen direkt in die Abläufe von VARIO Cloud ein** – **fehlerhafte** Workflows können daher zu unerwünschtem Verhalten oder Störungen im System führen. Prüfe Deine Workflows daher sorgfältig, bevor Du sie aktivierst.

Mithilfe der integrierten **Protokolle und Logs** zu den Workflows lassen sich solche Fehler zwar nachvollziehen, dennoch ist **technisches Verständnis erforderlich**, um sie gezielt zu beheben.
{% endhint %}

Über **“+ Workflow”** kannst Du einen neuen Workflow anlegen. Bestehende Workflows lassen sich über das Aktionsmenü auch als **JSON-Datei importieren**.

<figure><img src="/files/oun92ibAjEiOVkoNRiKn" alt=""><figcaption></figcaption></figure>

Für die Verfassung des **Skripts** stehen Dir innerhalb des **Skripts** verschiedene **Tools** zur Verfügung.

{% hint style="info" %}
Detaillierte Informationen zum Scripting stehen dir in unseren **Developer Docs** zur Verfügung.

<a href="/spaces/c4t1oyM8fVQlSUxoXJsW" class="button secondary">Developer Docs (Scripting)</a>
{% endhint %}

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:

| Begriff                                | Beschreibung                                                                                                                                                                                                                                                                                                   |
| -------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `_setGuard_` (optional)                | Definiert eine **Bedingung**, unter der der Workflow ausgeführt werden soll. Beispiel: nur bei bestimmtem Ländercode.                                                                                                                                                                                          |
| `_return true_`                        | Gibt innerhalb der `_setGuard_` an, dass die definierte Aktion **immer ausgeführt** wird.                                                                                                                                                                                                                      |
| `_return false_`                       | Gibt innerhalb der `_setGuard_` an, dass die definierte Aktion **nie ausgeführt** wird.                                                                                                                                                                                                                        |
| `_setPrepare_` (optional)              | Hier können **Variablen** mit Parametern befüllt werden, die später in `_setAction_` verwendet werden.                                                                                                                                                                                                         |
| `_setAction_`                          | Definiert die **eigentliche Aktion**, die im Workflow ausgeführt werden soll.                                                                                                                                                                                                                                  |
| `_ctx_`                                | Bietet Zugriff auf verschiedene **Kontextinformationen**, die sich je nach Workflow-Auslöser unterscheiden können.                                                                                                                                                                                             |
| `_ctx.availableInput_`                 | Zugriff auf die für den Workflow **verfügbaren Parameter**, je nach Auslöser (z. B. die Aufgaben-ID bei einem Workflow mit dem Auslöser “Nach dem Speichern einer Aufgabe”).                                                                                                                                   |
| `_ctx.instanceDetails_`                | Zugriff auf Informationen zur **aktuellen Workflow-Instanz**.                                                                                                                                                                                                                                                  |
| `_ctx.parameters_`                     | Zugriff auf **vordefinierte Parameter**, z. B. Vorgängerbeleg oder vorherige Datensatzversion. Anders als bei `_availableinput_` können diese erweitert werden, z. B. durch C-Units.                                                                                                                           |
| `_ctx.parameters['previousDocument']_` | Zugriff auf die **vorherige Version des Beleges** für Workflows mit den Auslösern “Vor dem Speichern”, “Nach dem Speichern”, “Bei Beginn der Bearbeitung” und “Bei Synchronisierung” von Belegen.                                                                                                              |
| `_ctx.parameters['sourceDocumentId']_` | Zugriff auf die **ID des Ursprungsbelegs** für einen Workflow mit dem Auslöser **Übernahme von Belegen**.                                                                                                                                                                                                      |
| `_ctx.services_`                       | <p>Zugriff auf die für den Workflow zur Verfügung stehenden Verarbeitungsmethoden, mit denen wiederum auf die <strong>Geschäftsobjekte</strong> in der VARIO Cloud, z. B. Adressen oder Artikel, zugegriffen werden kann.<br>Beispiel: <code>*ctx.services.accountService.create*</code> = Adresse anlegen</p> |
| `_ctx.services.logger.info(...)_`      | Fügt einen selbst definierten Hinweis zum [**Log des Elements**](https://help.relaunch.vario-software.de/vario-cloud-handbuch/vario-cloud-handbuch/system/vario-cloud-moduluebersicht/#Workflow-Protokolle-und-Logs) hinzu.                                                                                    |
| `_ctx.services.vqlService_`            | Ausführung einer **VQL-Abfrage**, um im Workflow auf das Ergebnis dieser zugreifen zu können.                                                                                                                                                                                                                  |

### Tipps zur Verfassung des Skripts

* 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.

  <figure><img src="/files/uLK98pl4dsIS0XDomT99" alt=""><figcaption></figcaption></figure>
* 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 eindeutig** 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**](https://help.relaunch.vario-software.de/vario-cloud-handbuch/vario-cloud-handbuch/c-units/#Reiter-'Spalten').

### ERP-Berechtigungen

Über die ERP-Berechtigungen kannst Du sowie bei Dashboards und Selektionen festlegen, wer auf die Skripte zugreifen und diese bearbeiten kann. Dir stehen dabei folgende Optionen zur Verfügung:

**Lesen und Bearbeiten** – **Alle Benutzer** können auf das Skript **zugreifen** und es **bearbeiten**.

**Nur Lesen** – **Alle Benutzer** können das Skript **einsehen**, aber **nicht bearbeiten**. Über die **Felder “Benutzer (Lesen und Bearbeiten)”** und **“Benutzergruppe (Lesen und Bearbeiten)”** kannst Du einzelnen Benutzern und Benutzergruppen **zusätzliche Bearbeitungsrechte** zuweisen.

**Individuell** – Mit dieser Option kannst Du gezielt festlegen, **welche Benutzer und Benutzergruppen** ein Skript **nur einsehen** dürfen und **welche zusätzlich Bearbeitungsrechte** erhalten. Wenn Du z. B. im **Feld “Benutzer (Lesen und Bearbeiten)”** ausschließlich Deinen eigenen Benutzernamen auswählst, ist das Skript **nur für Dich sichtbar** und **bearbeitbar**. Benutzer **ohne** zugewiesene **Zugriffsrechte** haben **keinen Zugriff** auf das Skript – sie können es weder einsehen noch bearbeiten.

## Angelegte Skripte verwenden

Wenn Du im **Menüpunkt “Workflows”** ein Element hinzufügst, bei dem ein Skript verwendet werden kann, z. B. Abfrage- oder Benutzerskript-Element, kannst Du im **Reiter “Skript”** im **Feld “Skript-Modul”** ein vorhandenes Skript auswählen. Je nach Bedarf können diese dann weiter angepasst und erweitert werden. Weitere Informationen zu den Workflows findest Du auf der [**Handbuchseite “Workflows”**](/vario-cloud-handbuch/system/workflows.md).

<figure><img src="/files/csl5mRyKc2SmiXkIwmwm" alt=""><figcaption></figcaption></figure>

## HTTP-Whitelist

Mit dieser Funktion steht Dir eine **neue Verwaltungsoberfläche für die HTTP-Whitelist** des SecureHttpClients zur Verfügung. Über diese Whitelist steuerst Du gezielt, zu welchen externen Zielen HTTP-Anfragen (z. B. aus Skripten) erlaubt sind. Nur Adressen, die hier hinterlegt sind, können vom System angesprochen werden. Das erhöht die Sicherheit deutlich, da unerlaubte oder unbekannte Zieladressen automatisch blockiert werden.

Du kannst Whitelist-Einträge flexibel anlegen, bearbeiten, deaktivieren und löschen. Dabei werden drei Typen unterstützt: **Domain** (z. B. `api.example.com`), um alle Anfragen an eine Domain zu erlauben, **URL** für exakt definierte Zieladressen sowie **URL-Pattern**, mit denen Du mithilfe von Mustern (engl. *Pattern*) und Platzhalterzeichen (engl. *Wildcards*) ganze URL-Bereiche freigeben kannst.

<figure><img src="/files/TkZXFG5GskR2TnMl3qx7" alt="HTTP-Whitelist"><figcaption><p>Beispiele mit verschiedenen Typen (Domain, URL, URL-Pattern)</p></figcaption></figure>

{% hint style="info" %}
**Wichtiger Hinweis**

Die Funktion steht Dir **nur zur Verfügung**, wenn Du über die **Berechtigung “Skriptverwaltung”** verfügst. Diese Berechtigung sollte ausschließlich an **Personen mit entsprechenden Kenntnissen** vergeben werden, da hier aktiv in die Prozesslogik eingegriffen wird.&#x20;
{% endhint %}


---

# 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/skripte.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.
