# Prüfungen und Meldungen

Über dem Formular steht in den Reitern *Allgemein* und *Spalten* ein Meldungsblock.
Er wird bei jeder Änderung neu gerechnet und unterscheidet zwei Stufen:

* **Fehler** (rot) – damit funktioniert die Definition nicht.
* **Hinweise** (gelb) – die Definition läuft, tut aber nicht, was jemand erwartet.
  Der Router reicht `meta` unverändert durch; falsch wird es erst im Client, und dort
  still. Deshalb steht es hier.

Gespeichert werden kann in beiden Fällen: der Editor weist nichts ab, was das
Portalskript annimmt. Hinweise, die erst beim Schreiben entstehen (aufgeräumte leere
Einträge, ergänztes `schema`/`catalog`), kommen nach dem Speichern dazu.

## Fehler

| Meldung | Bedeutung |
|---|---|
| **Name** fehlt / ist nicht zulässig | `nameApi` benennt die Custom Property und die Route. Buchstaben, Ziffern und `_`, beginnend mit einem Buchstaben |
| **Tabelle** fehlt | ohne `nameSQL` gibt es nichts abzufragen |
| **Verbindung** fehlt | ohne `connectionId` weiß der Router nicht, welche Datenbank |
| Spalte *n* hat keinen **Namen** | eine Spalte ohne `name` ist kein Feld |
| Sortierung *n* hat keine Spalte | leerer Eintrag in `orderBy` |

## Hinweise

| Meldung | Bedeutung |
|---|---|
| Keine Spalten | die Spaltenliste ist die ganze Schnittstelle – ohne sie kann nichts gelesen oder geschrieben werden |
| Spalte ist doppelt | der Router nimmt die erste und übergeht die zweite |
| *n* leere Einträge in `columns` | Löcher aus einer Definitionsdatei; das Speichern entfernt sie |
| Spalte gibt es in der Tabelle nicht | sie fehlt in jeder Antwort |
| Der Primärschlüssel ist nicht deklariert | `keyColumns` bleibt leer, ein Client kann keine Zeile ändern oder löschen |
| Spalte ist NOT NULL ohne Standardwert, aber nicht deklariert | jedes Anlegen schlägt fehl |
| Sortierung nach einer nicht deklarierten Spalte | der Router lässt den Eintrag fallen |
| Der Werteliste fehlt die **Wertespalte** | sie wird ignoriert |
| Der Werteliste fehlt die **Tabelle** | ihr Aufruf endet mit 404 |
| Die feste Liste steht in `possibleValues` | die API liefert sie, der DEX-Client benutzt sie nicht – unter *Werteliste* übernehmen |
| View-Spalte ohne **SQL-Typ** | die API meldet `string` |
| `schema` / `catalog` ist leer | dort gehört die Datenbank hin, in der die Tabelle liegt |

## Hinweise rund um Wertelisten

Die häufigste Ursache für eine leere Auswahl im Client sind zwei Wege, die sich
gegenseitig ausschließen:

* **feste Einträge und eine Werteliste** – der Client nimmt die Werteliste,
  `meta.listItems` bleibt unbeachtet.
* **Skript und Werteliste** – der Client nimmt die Werteliste; das Skript läuft, sein
  Ergebnis bleibt liegen.
* **Skript und feste Einträge** – das Skript gewinnt.
* **feste Einträge, aber ein Typ, der keine Liste ist** – der Client wertet sie nur bei
  `list`, `multiplelist`, `combobox` und `comboboxText` aus. `popup` und `iconorlist`
  bekommen sie nicht.
* **Einträge ohne `key` oder `label`** lässt der Client weg, doppelte `key`
  überschreiben einander.
* **`meta.listScriptParams` ohne `meta.listScript`** – die Parameter werden nirgends
  übergeben. Ein verschachtelter Parameter kommt im Skript als `[object Object]` an,
  weil DOCUMENTS Parameter als Text übergibt.
* **`meta.translationPrefix` ohne Übersetzungsfilter** – der Vorsatz wird nirgends
  benutzt.