> For the complete documentation index, see [llms.txt](https://docs.ninox.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.ninox.com/ninox-scripting/de/automate-your-workflows/work-with-functions/system-and-flow-control.md).

# System und Ablaufsteuerung

Funktionen für System und Ablaufsteuerung helfen dir, Timing und umgebungsspezifisches Verhalten zu steuern. Du kannst ein Skript pausieren, Rohwerte prüfen und den App-Kontext erkennen.

In diesem Kapitel lernst du, wie du:

* Timing in einem laufenden Skript steuerst.
* die aktuelle App-Umgebung und den Datenbankstatus prüfst.

<table><thead><tr><th width="233.96484375">Funktion (A-Z)</th><th>Aufgabe</th></tr></thead><tbody><tr><td><code>eval()</code></td><td>Führt einen Text als Ninox Skript aus.</td></tr><tr><td><code>ninoxApp()</code></td><td>Gibt den aktuellen Client- oder App-Kontext zurück</td></tr><tr><td><code>raw()</code></td><td>Gibt die interne Textdarstellung zurück</td></tr><tr><td><code>sleep()</code></td><td>Pausiert ein Skript kurz</td></tr></tbody></table>

## Timing und Ausführungsreihenfolge steuern

Nutze diese Funktionen, wenn eine Aktion erst nach einer anderen ausgeführt werden soll.

### Ein Skript kurz pausieren <a href="#pause-a-script-with-sleep" id="pause-a-script-with-sleep"></a>

Nutze `sleep()`, damit Ninox eine angegebene Anzahl Millisekunden wartet, bevor das Skript weiterläuft.

Nutze es, wenn du:

* eine kurze Verzögerung vor einer Folgeaktion einbauen willst.
* Timing-Probleme in einem UI-Ablauf vermeiden willst.
* kurz warten willst, bis sich ein anderer Prozess stabilisiert.
* einen Hinweis oder eine Warnung anzeigen willst, bevor der nächste Schritt läuft.

`sleep(number)`

* `number` die Verzögerung in Millisekunden

`sleep()` gibt keinen Wert zurück.

#### Schauen wir uns einige Beispiele an:

```ninox
sleep(2000)
```

Pausiert das Skript für 2 Sekunden.

Tipps:

* Halte Verzögerungen so kurz wie möglich.
* Nutze eine Verzögerung nur, wenn der Ablauf sie wirklich braucht.

## Rohwerte und Bereichsgrenzen prüfen

Nutze diese Funktionen, wenn du den zugrunde liegenden Wert oder die Startgrenze eines Dauer- oder Bereichskontexts brauchst.

### Den Rohwert prüfen <a href="#inspect-the-raw-value" id="inspect-the-raw-value"></a>

Nutze `raw()`, um die interne rohe Textdarstellung eines Werts zurückzugeben.

Nutze es, wenn du:

* formatierten Text in seine rohe Textform umwandeln willst.
* den internen Wert hinter einem Farbfeld lesen willst.
* formatierte Inhalte in Dialogen oder E-Mails wiederverwenden willst.
* die Rohform mit der angezeigten Form vergleichen willst.

`raw(any)`

* `any` der Wert, den du in Rohform zurückgeben willst

`raw()` gibt einen String zurück.

#### Schauen wir uns einige Beispiele an:

```ninox
raw('My sample text')
```

Gibt den Inhalt eines formatierten Textwerts als unformatierten Text mit HTML-Tags zurück.

```ninox
dialog("Hello", raw('Dialog text'), ["Yes", "No"])
```

Zeigt einen Dialog mit dem Inhalt des formatierten Textfelds `Dialog text`.

```ninox
raw(Color)
```

Gibt den internen Farbwert zurück, zum Beispiel `#EC87E2`.

Tipps:

* Nutze `raw()`, wenn du die interne Textdarstellung des Systems brauchst.
* Das ist nützlich für formatierte Textfelder, Dialoge und E-Mails.
* Du kannst das Ergebnis später wieder mit `html()` formatieren.

### Text als Logik ausführen und Daten mit `eval()` prüfen

Nutze `eval()`, um Text als Ninox Skript auszuführen.

Damit erstellst du dynamische Ausdrücke. Verwende zum Beispiel Namen von Tabellen, Feldern und Variablen, die sich zur Laufzeit ändern.

`eval(string, nid)`

* `string` Text mit Berechnungen oder einem Ninox Skript
* `nid` Datensatz, auf den das Skript angewendet wird

#### Schauen wir uns einige Beispiele an:

```
eval(manuelle_formel, this) 
```

Gibt `20` zurück, wenn das Feld "Manuelle Formel" im aktuellen Datensatz `14 + 6 \* 0.5 \* 2` enthält.

<pre><code><strong>let myTabelle := "rechnungen"; 
</strong>eval("sum((select " + myTabelle + ").betrag)", this)
</code></pre>

Gibt die Summe aller Beträge in der Tabelle "Rechnungen" zurück.

```
let myText := "alert(""Das ist ein Test."")"; 
eval(myText, this)
```

Zeigt eine Meldung mit dem Text "Das ist ein Test." an.

```
let myFeld := "vollstaendiger_name"
eval(myFeld, this) 
```

Gibt den Wert "Toni Kim" aus dem Feld "Vollständiger Name" zurück. Bei einem Auswahlfeld gibt die Funktion den Index des Werts zurück.

```
let myAuswahl := "Auswahlfeld";
eval("text(" + myAuswahl + ")", this)
```

Gibt den Textwert der gewählten Option eines Auswahlfelds zurück.

```
let myTabelle := "kontakte";
let myFeld := text(Auswahlfeld);
let myAktuellerName := eval("text(" + myFeld + ")", this);
cnt(eval("select " + myTabelle + " where " + myFeld + " = " + myAktuellerName, this))
```

Gibt die Anzahl der Datensätze in der Tabelle "Kontakte" zurück, deren Feld "Vollständiger Name" dem gewählten Feldwert im aktuellen Datensatz entspricht. Nutze diesen Ansatz für dynamische Duplikatsuchen, wenn `myFeld` aus einem Auswahlfeld stammt.

## App-Kontext und Datenbankstatus erkennen

Nutze diese Funktionen, wenn dein Skript auf den aktuellen Client oder den Schutzstatus der Datenbank reagieren soll.

### Mit `ninoxApp()` die aktuelle App erkennen <a href="#inspect-the-app-context" id="inspect-the-app-context"></a>

Nutze `ninoxApp()`, um zu prüfen, wo dein Skript ausgeführt wird.

Nutze es, wenn du:

* Verhalten je nach Client anpassen willst.
* client-spezifische Workflows diagnostizieren willst.

`ninoxApp()`

`ninoxApp()` gibt einen String zurück, der die aktuelle Umgebung kennzeichnet.

Mögliche Rückgabewerte sind:

* `client`
* `server`

#### Schauen wir uns einige Beispiele an:

```ninox
ninoxApp() = "client"
```

Gibt einen String zurück, der zeigt, wo das Skript läuft.

Tipps:

* Nutze `ninoxApp()`, um zu prüfen, ob UI-Funktionen ausgeführt werden können. Das ist nicht der Fall, wenn das Ergebnis `server` ist.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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, and the optional `goal` query parameter:

```
GET https://docs.ninox.com/ninox-scripting/de/automate-your-workflows/work-with-functions/system-and-flow-control.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
