Zum Inhalt springen

Eigenschaften

Eigenschaften definieren die Spalten in Ihrer Datenbanktabelle und wie sie in der Admin-UI gerendert werden. Jede Eigenschaft hat einen type, der Folgendes bestimmt:

  • Den Datenbank-Spaltentyp (über Drizzle-Schema-Generierung)
  • Die Formularfeld-Komponente
  • Den Tabellenzellen-Renderer
  • Die Validierungsregeln
Typ Beschreibung PostgreSQL-Spalte
string Text, Select, Markdown, Datei-Upload, URL, E-Mail standardmäßig text; varchar, char oder uuid mit columnType
number Ganzzahl, Dezimalzahl, Währung integer, numeric, bigint, serial
boolean True/False-Umschalter boolean
date Datum, Datum/Uhrzeit, Zeitstempel timestamp, date
array Geordnete Liste von Werten Ein natives Array (text[], integer[], numeric[], boolean[]), wenn of eine einzelne String-, Number- oder Boolean-Property ist; sonst jsonb
map Schlüssel-Wert-Objekt jsonb
geopoint Breitengrad/Längengrad-Paar jsonb
reference Eingebettete Referenz auf eine andere Entität Der Primärschlüsseltyp des Ziels (speichert dessen ID)
relation SQL-Fremdschlüssel-Beziehung Verwendet das relations-Array
vector Embedding, für Nearest-Neighbour-Suche VECTOR(n) (pgvector)
binary Rohdaten-Bytes, gelesen und geschrieben als Base64 bytea

Alle Eigenschaftstypen teilen diese Optionen:

Eigenschaft Typ Beschreibung
type string Erforderlich. Datentyp (siehe oben)
name string Anzeigebezeichnung. Standardmäßig der Eigenschaftsschlüssel, formatiert – publishDate → “Publish Date”. Setzen Sie ihn, wenn diese Ableitung nicht passt: "URL" statt “Url”.
description string Hilfetext, der unter dem Feld angezeigt wird
defaultValue any Standardwert für neue Entitäten. Ein Literal – ein String, eine Zahl, ein Boolean, ein Datum, eine Enum-ID oder ein map/array-Dokument – wird auch zum DEFAULT der Spalte, sodass auch eine Zeile, die nicht über das Admin-Panel eingefügt wird (die REST-API, ein Seed, psql), diesen Wert erhält
databaseDefault boolean | SqlExpression Seit 0.25 Die Datenbank füllt die Spalte, wenn ein Create sie leer lässt: eine Spalte NOT NULL DEFAULT <expression> wie gen_random_uuid() oder nextval(…). Ein required-Feld mit dieser Option darf bei einem Create weggelassen werden, vom Admin-Formular wie von der API, und ein beim Create gesendetes null bleibt der Datenbank überlassen; beim Bearbeiten bleibt es erforderlich, und der generierte Insert-Typ macht es optional. Geben Sie den Ausdruck in der Template-Form an, die isId annimmt, databaseDefault: "sql`gen_random_uuid()`", und der Schema-Planer schreibt ihn als DEFAULT der Spalte, sodass rebase db push ihn beibehält. true deklariert einen anderswo geschriebenen DEFAULT und schreibt keinen, sodass ein Push plant, ihn zu entfernen. „Import from table“ und rebase schema introspect setzen den Ausdruck, den sie lesen
validation object Validierungsregeln
propertyConfig string Registrierter Eigenschafts-Konfigurationsschlüssel
columnName string Expliziter Datenbankspaltenname (umgeht die snake_case-Konvertierung)
callbacks PropertyCallbacks Hooks für afterRead- und beforeSave-Transformationen
excludeFromApi boolean Diese Spalte niemals auf der API-Oberfläche erwähnen, in keiner Richtung – für einen Passwort-Hash oder ein Verifizierungstoken. Der Wert wird serverseitig weiterhin geschrieben und kann abgefragt werden; er wird aus jeder von der API ausgelieferten Zeile entfernt, für jeden Aufrufer einschließlich Admins und Service-Keys, und er fehlt in den generierten Typen Row, Insert und Update sowie im OpenAPI-Schema. Syntax-Zucker für access: { read: [], write: [] } – beides ist derselbe Mechanismus, und das Setzen von beidem für dieselbe Eigenschaft wird beim Start abgelehnt
access { read?: string[]; write?: string[] } Wer dieses einzelne Feld lesen und schreiben darf, nach Rolle. Eine weggelassene Liste delegiert an die Sicherheitsregeln der Zeile; [] bedeutet niemand über die API; eine Rollenliste umfasst diese Rollen plus admin. Ein nicht lesbares Feld ist in Antworten nicht vorhanden statt null, und ein Schreibzugriff, der ein nicht beschreibbares Feld benennt, führt zu einem 400-Fehler. Siehe Feldzugriff
metadata Record<string, unknown> Alles, was Ihr eigener Code an eine Eigenschaft anhängen muss. Rebase liest dies nicht; es bleibt bei der Serialisierung unverändert erhalten
dynamicProps function Dynamischer Eigenschafts-Builder (siehe Bedingte Felder). Nur Admin-Formular – wird von der API oder Datenbank nicht erzwungen.
conditions PropertyConditions Deklarative JSON Logic-Bedingungen. Nur Admin-Formular – wird von der API oder Datenbank nicht erzwungen.

UI-bezogene Optionen sind unter dem Unterobjekt admin verschachtelt:

price: {
type: "number",
name: "Price",
admin: {
readOnly: true,
columnWidth: 120,
hideFromCollection: false
}
}
Eigenschaft Typ Beschreibung
admin.readOnly boolean Bearbeitung verhindern
admin.disabled boolean | PropertyDisabledConfig Deaktivieren mit optionalem Tooltip
admin.filledByServer boolean Der Server befüllt das Feld, wenn ein neuer Datensatz es leer lässt (ein beforeSave-Hook). Das Formular lässt eine Erstellung ohne dieses Feld durch; beim Bearbeiten bleibt es erforderlich, und die eigenen Prüfungen des Servers gelten weiterhin
admin.hideFromCollection boolean In der Tabellenansicht ausblenden. Nur Darstellung: Die verknüpften Zeilen einer ausgeblendeten Relationseigenschaft sind weiterhin in den Listen-Read eingebettet (siehe Relationen)
admin.columnWidth number Spaltenbreite in Pixeln (Tabellenansicht)
admin.span 1 | 2 | 3 | 4 Feldbreite im vierspaltigen Formularraster
admin.Field React.ComponentType Eigene Feldkomponente
admin.Preview React.ComponentType Eigene Tabellenzellen-Komponente
admin.Filter React.ComponentType Eigenes Filterfeld für diese Eigenschaft. Hat Vorrang vor dem Sammlungs-Override Collection.FilterField und dem integrierten typbasierten Feld
admin.filterOperators WhereFilterOp[] Schränkt die beim Filtern dieser Eigenschaft angebotenen Operatoren ein. Die angebotene Menge ist die Schnittmenge aus den Fähigkeiten der Engine, den Standardwerten des Typs und dieser Liste – Sie können nur einschränken, niemals einen Operator hinzufügen, den die Engine nicht ausführen kann. [] deaktiviert das Filtern für diese Eigenschaft
admin.customProps unknown Alles, was Ihr eigenes Field oder Preview benötigt. Rebase reicht dies unverändert durch

Die Objektform von admin.disabled. Das Steuerelement bleibt sichtbar und ausgegraut, was der Unterschied zu admin.readOnly ist – der Betrachter kann die Struktur dessen sehen, was er nicht ausfüllen darf.

Eigenschaft Typ Beschreibung
disabledMessage string Grund, warum diese Eigenschaft deaktiviert ist, angezeigt für den Benutzer. Ohne diesen erklärt ein ausgegrautes Steuerelement nichts
clearOnDisabled boolean Setzt den Wert auf null, wenn die Eigenschaft deaktiviert wird, damit keine veraltete Angabe mit der Entität gespeichert wird
hidden boolean Blendet das Feld vollständig aus, während es deaktiviert ist, anstatt es auszugrauen

Der Typ string ist der vielseitigste – je nachdem, welche Optionen Sie setzen, wird er als unterschiedliche Widgets gerendert.

Ein einfaches einzeiliges Texteingabefeld.

name: {
type: "string",
name: "Name",
validation: { required: true, min: 2, max: 200 }
}

Setzen Sie admin.multiline, um das Feld als Textarea zu rendern. Dies ändert, wie das Feld gezeichnet wird, nicht, was die Spalte enthält; daher befindet es sich im admin-Block zusammen mit den übrigen Darstellungsoptionen.

description: {
type: "string",
name: "Description",
admin: { multiline: true }
}

Setzen Sie admin.markdown, um einen vollständigen Markdown-Editor mit Toolbar zu rendern.

body: {
type: "string",
name: "Blog text",
admin: { markdown: true }
}

Setzen Sie email: true, um eine E-Mail-Formatvalidierung hinzuzufügen und mit einem E-Mail-Symbol zu rendern.

email: {
type: "string",
name: "User email",
email: true,
validation: { required: true }
}

Setzen Sie url: true, um eine URL-Formatvalidierung hinzuzufügen und mit einem Link-Symbol zu rendern.

website: {
type: "string",
name: "Amazon link",
url: true
}

Setzen Sie storage, um eine Datei-Upload-Dropzone zu rendern. Die Spalte bleibt ein String – in sie wird der Schlüssel des Objekts im Bucket geschrieben:

avatar: {
type: "string",
name: "Main image",
storage: { storagePath: "avatars", acceptedFiles: ["image/*"] }
}

Alle Optionen innerhalb von storage und die Mehrdatei-Form desselben Feldes finden Sie unter Datei-Uploads.

Setzen Sie enum, um ein Auswahl-Dropdown zu rendern. Weitere Informationen finden Sie unter Enum-Werte.

category: {
type: "string",
name: "Category",
enum: [
{ id: "electronics", label: "Electronics", color: "blueDark" },
{ id: "clothing", label: "Clothing", color: "pink" },
]
}

Mehrere Werte aus einer festen Menge sind ein Array eines Enum-Strings, kein Flag auf einem einzelnen Wert: Die Spalte enthält mehrere Werte, daher ist die Eigenschaft, die sie beschreibt, das Array. Es ist eine einzelne Postgres-Spalte, ein text[], statt eines Joins: Ein Array, dessen of eine einzelne String-Property ist, erhält standardmäßig ein natives Array, und das columnType unten sagt es nur ausdrücklich.

locales: {
type: "array",
name: "Available locales",
columnType: "text[]",
of: {
type: "string",
name: "Locale",
enum: [
{ id: "es", label: "Spanish", color: "pink" },
{ id: "en", label: "English", color: "blueLight" },
{ id: "fr", label: "French", color: "purpleLight" },
]
}
}
Eigenschaft Typ Beschreibung
admin.multiline boolean Als Textarea rendern
admin.markdown boolean Als Markdown-Editor rendern
email boolean Validierung des E-Mail-Formats
url boolean Validierung des URL-Formats
storage StorageConfig Datei-Upload aktivieren – siehe Datei-Uploads
enum EnumValues Als Auswahl-Dropdown rendern
columnType "varchar" | "text" | "char" | "uuid" Die Datenbankspalte. Standardmäßig text oder uuid, wenn isId dies vorgibt. text für unbegrenzte Strings, char für feste Breite
isId boolean | string Markiert die Eigenschaft als Primärschlüssel und bestimmt, wer ihn befüllt: "manual" (Sie selbst), "uuid" (gen_random_uuid()) oder jeder andere String, der unverändert als SQL-Standardausdruck der Spalte verwendet wird – direkt (nanoid()) oder in Template-Form ("sql`nanoid()`"). Die Funktion muss existieren; hier wird nichts erstellt. "increment" ist eine Number-Strategie und bewirkt hier nichts, und "cuid" wird beim Laden der Konfiguration abgelehnt
autoValue "user_on_create" | "user_on_update" Stempelt die Spalte mit der uid des ausführenden Benutzers – nur beim Erstellen oder bei jedem Schreibvorgang. Siehe Audit-Spalten
userSelect boolean Als Benutzerauswahl rendern. Der Wert ist eine einfache String-Spalte, die die Benutzer-ID enthält – beim Eingang wird nichts aufgelöst oder geprüft. Nur Admin-Formular – wird von der API oder der Datenbank nicht erzwungen. Die Auswahl listet Namen, E-Mail-Adressen und Avatare der Benutzer für jeden auf, der die Collection beschreiben darf, über GET /api/admin/users/pick, ohne den Scope users:read. Eine Collection, deren Schreibregeln rohes SQL sind, zählt nicht, da sie sich nicht vorab beurteilen lassen: Dort können nur Inhaber von users:read auswählen.
admin.previewAsTag boolean Diesen String in der Vorschau als Tag rendern
admin.clearable boolean Symbol zum Leeren des Werts hinzufügen (auf null setzen)
admin.urlPreview PreviewType Wie ein String gerendert werden soll, der eine URL enthält: als Link oder als Inline-Vorschau für Bild, Audio oder Video. Reine Darstellung – ob der Wert eine URL ist, entscheidet das url-Flag an der Eigenschaft, aus dem der OpenAPI-Vertrag generiert wird

autoValue bei einem String ist das created_by / updated_by-Gegenstück derselben Option bei einem Date:

createdBy: {
type: "string",
name: "Created by",
autoValue: "user_on_create",
admin: { readOnly: true }
},
updatedBy: {
type: "string",
name: "Updated by",
autoValue: "user_on_update"
}

Der Wert stammt aus dem Aufrufkontext, niemals aus dem Request-Body – der Treiber überschreibt alles, was übermittelt wurde, sodass ein Aufrufer sich nicht als jemand anderes ausgeben kann, indem er das Feld mitsendet. Eine Spalte, deren Wert der Aufrufer bereitstellt, ist keine Audit-Spalte.

Ohne agierenden Benutzer – bei einer anonymen Anfrage, einem Service-Token oder einem Seed-Skript – wird die Spalte auf null gesetzt. In Kombination mit validation: { required: true } wird daraus stattdessen ein 400-Fehler: Eine Collection, die darauf besteht zu wissen, wer eine Zeile geschrieben hat, kann keine anonymen Schreibzugriffe akzeptieren.

Es gibt keinen Fremdschlüssel. Die UID ist ein String, der Benutzerspeicher kann eine völlig andere Datenbank sein, und ein gelöschter Benutzer darf den Audit-Trail nicht mit sich reißen – deklarieren Sie eine Relation, wenn Sie den Join wünschen.

price: {
type: "number",
name: "Price",
validation: { required: true, min: 0 }
}
quantity: {
type: "number",
name: "Quantity",
columnType: "integer" // Store as integer
}

Zahlenfelder werden als Standard-Texteingabefeld mit numerischer Validierung gerendert.

Eigenschaft Typ Beschreibung
enum EnumValues Als Select mit numerischen Werten rendern. Im Gegensatz zu einem String-Enum wird hierbei kein Postgres-Enum-Typ erstellt – die Spalte bleibt NUMERIC oder INTEGER, sodass das Panel die Werte anbietet, die Datenbank sie jedoch nicht erzwingt
columnType string "integer", "real", "double precision", "numeric", "bigint", "serial", "bigserial". Standardmäßig integer, wenn validation.integer oder isId besagt, dass der Wert ganzzahlig ist, andernfalls numeric
precision / scale number Gesamtzahl der signifikanten Stellen und Nachkommastellen bei einer numeric-Spalte – NUMERIC(10, 2). Geldbeträge ohne diese Angaben sind ein unbegrenztes NUMERIC, das alles speichert, was der Aufrufer gesendet hat, und später nicht ohne Umschreiben der Spalte eingeschränkt werden kann
isId boolean | string Markiert die Eigenschaft als Primärschlüssel: "manual", "increment" oder jeder andere String, der unverändert als SQL-Standardausdruck der Spalte verwendet wird. "increment" ist immer INTEGER GENERATED BY DEFAULT AS IDENTITY – ein daneben stehender columnType wird mit einer Warnung ignoriert, da jeder Fremdschlüssel, der auf einen numerischen Schlüssel verweist, INTEGER ist und ein breiterer Schlüssel von schmaleren Spalten referenziert werden würde
admin.clearable boolean Symbol zum Leeren des Werts hinzufügen (auf null setzen)
admin.format NumberFormatOptions Schreibt die Zahl als Währung, Prozentsatz oder mit festen Dezimalstellen aus. Fehlt diese Angabe, wird der Rohwert dargestellt – eine Zahl in der Datenbank wird so angezeigt, wie sie in der Datenbank steht

Reine Darstellung. Der gespeicherte Wert ändert sich nie – eine gerundete Anzeige bleibt in der Spalte und in der API die vollständige Zahl.

Eigenschaft Typ Beschreibung
style "decimal" | "currency" | "percent" Standardmäßig "decimal". "currency" erfordert currency
currency string ISO-4217-Code – "EUR", "USD". Das Setzen impliziert style: "currency", daher genügt im Regelfall ein Schlüssel
locale string BCP-47-Tag. Standardmäßig das Gebietsschema des Panels, wodurch derselbe Betrag für einen Leser als 1,234.50 und für einen anderen als 1.234,50 angezeigt wird
minimumFractionDigits number Mit mindestens so vielen Nachkommastellen auffüllen – 2 formatiert 5 als 5.00
maximumFractionDigits number Auf höchstens so viele Nachkommastellen runden. Ändert nicht den gespeicherten Wert
notation "standard" | "compact" "compact" rendert 12000 als 12K. Nützlich in einer schmalen Tabellenspalte
active: {
type: "boolean",
name: "Selectable",
defaultValue: true
}

Booleans werden als Umschalter (Toggle Switch) gerendert.

Setzen Sie mode: "date", um eine Datumsauswahl ohne Uhrzeit anzuzeigen.

event_date: {
type: "date",
name: "Expiry date",
mode: "date"
}

Der Standardmodus "date_time" beinhaltet sowohl Datum als auch Uhrzeit.

arrival_time: {
type: "date",
name: "Arrival time",
mode: "date_time"
}

Verwenden Sie autoValue, um Zeitstempel beim Erstellen oder Aktualisieren automatisch zu setzen.

createdAt: {
type: "date",
name: "Created At",
autoValue: "on_create",
admin: { readOnly: true }
}
updatedAt: {
type: "date",
name: "Updated At",
autoValue: "on_update"
}

on_update ist ein Datenbank-Trigger, nicht nur ein Stempel auf Anwendungsebene. Rebase schreibt die Spalte bei jedem Speichervorgang – sodass ein beforeSave-Hook den neuen Wert sieht – und richtet einen BEFORE UPDATE-Trigger ein, der sie für alle anderen schreibt. Ohne den Trigger würde ein Seed-Skript, ein Migrations-Backfill oder eine in psql korrigierte Zeile dazu führen, dass die Spalte behauptet, die Zeile habe sich nicht geändert; alles, was sie liest, um zu entscheiden, was neu indiziert oder erneut gesendet werden soll, würde diese Zeile überspringen.

Der Trigger wird in .rebase/sql/triggers.sql generiert und von rebase db push sowie beim Start durch die Schema-Prüfung angewendet – Atlas kann ihn aus demselben Grund nicht verwalten, aus dem es die Volltextsuch-Helfer nicht verwalten kann.

Eigenschaft Typ Beschreibung
mode "date" | "date_time" Nur Datum oder Datum + Uhrzeit (Standard: "date_time"). Bestimmt das Widget; die Spalte ist in beiden Fällen dieselbe. Nur Admin-Formular – wird von der API oder der Datenbank nicht erzwungen.
autoValue "on_create" | "on_update" Zeitstempel automatisch setzen. on_create ist ein DEFAULT now(); on_update ist ein BEFORE UPDATE-Trigger sowie ein Stempel auf Anwendungsebene, sodass ein direktes UPDATE aus einem Seed oder einer Migration die Spalte ebenfalls aktualisiert
columnType "timestamp" | "date" | "time" Die Datenbankspalte. Standardmäßig timestamp mit Zeitzone. Eine date-Spalte wird als Tag ausgewählt und angezeigt, was auch immer mode sagt; eine time-Spalte als reine Tageszeit in UTC ohne Tag (sie wird als diese Uhrzeit am 1970-01-01 übertragen)
timezone string In welcher Zeitzone die Auswahl den Wert liest und schreibt. Nur Admin-Formular – wird von der API oder der Datenbank nicht erzwungen.
admin.clearable boolean Symbol zum Leeren des Werts hinzufügen (auf null setzen)

Die beiden zusammengesetzten Typen – eine wiederholbare Liste und ein strukturiertes Objekt, beide als JSONB gespeichert, es sei denn, ein natives Postgres-Array passt. Wiederholungen, Block-Editoren, Gruppen, Schlüssel-Wert-Editoren und alle Optionen, die beide annehmen, finden Sie unter Arrays und Maps.

Ein Breitengrad/Längengrad-Paar, gespeichert als jsonb – { latitude, longitude }, was dem entspricht, was der generierte TypeScript-Typ, das OpenAPI-Schema und das Formularfeld beschreiben.

location: {
type: "geopoint",
name: "Location"
}

Schreibvorgänge haben dieselbe Struktur oder verwenden einen GeoPoint aus @rebasepro/types: new GeoPoint(41.4036, 2.1744).

Es gibt keine weiteren Optionen über die hinaus, die jede Eigenschaft hat. Die Spalte ist räumlich nicht indiziert, und es gibt keinen Distanzoperator zum Filtern: Ein Geopoint ist ein Wert, den Sie speichern und anzeigen, nicht einer, nach dem Sie suchen. Modellieren Sie dafür die beiden Zahlen als eigene Spalten.

Referenzen verknüpfen mit Entitäten in einer anderen Collection. Sie werden als Vorschaukarte gerendert, die die Details der referenzierten Entität anzeigt.

client: {
type: "reference",
name: "Related client",
path: "clients",
admin: {
previewProperties: ["first_name", "last_name", "email"]
}
}

Unter Postgres ist eine reference ein Fremdschlüssel wie jeder andere und folgt daher derselben ON DELETE-Regel wie eine belongsTo-Relation: optional ist SET NULL, erforderlich ist RESTRICT. Siehe Relationen.

Diese gelten sowohl für reference- als auch für relation-Eigenschaften.

Eigenschaft Typ Beschreibung
admin.fixedFilter FilterValues Filtert die im Auswahl-Widget angebotenen Entitäten
admin.widget "select" | "dialog" Welches Widget die zugehörige Entität auswählt (nur Relationen)
admin.includeId boolean Zeigt die ID der zugehörigen Entität in der Vorschau an (Standard: true)
admin.includeEntityLink boolean Zeigt einen Link an, der die zugehörige Entität öffnet (Standard: true)
admin.previewProperties string[] Welche Eigenschaften des Ziels in der Vorschau angezeigt werden (max. 3)
admin.renderInForm boolean Rendert eine Many-Relation als Auswahl innerhalb des Formulars zusätzlich zu dem Tab, den sie bereits erhält. Standardmäßig false: Die Entitätsansicht listet die zugehörigen Zeilen bereits als Tab auf, sodass die beiden Oberflächen von Haus aus redundant sind. Keine Auswirkung auf eine To-One-Relation, die keinen Tab erhält

Eine Embedding-Spalte für die Nearest-Neighbour-Suche. Nur Postgres.

embedding: {
type: "vector",
name: "Embedding",
dimensions: 1536
}
Eigenschaft Typ Beschreibung
dimensions number Erforderlich. Länge des Vektors. Kompiliert zu VECTOR(n).
index VectorIndexConfig | false Wie der ANN-Index aufgebaut wird. Wenn weggelassen, ein HNSW-Index für Kosinus-Distanz. false erstellt keinen.

Ein ANN-Index wird zusammen mit der Spalte erstellt, sodass vectorSearch approximativ und schnell ist anstatt eines exakten Scans. Er ist für Kosinus-Distanz ausgelegt, womit vectorSearch misst, sofern Sie kein distance übergeben – ein Index bedient genau einen Operator, sodass eine l2-Abfrage für einen Kosinus-Index stillschweigend auf einen Scan zurückfällt. method (hnsw oder ivfflat), distance (eine oder mehrere), m, efConstruction und lists befinden sich alle auf index. Über 2000 Dimensionen kann pgvector keinen der beiden Indextypen erstellen, daher bleibt die Spalte unindiziert und der Start meldet dies.

Fragen Sie ihn mit .vectorSearch() ab, wo auch beschrieben wird, was für die Installation von pgvector erforderlich ist und wie der Index optimiert wird. Für gewöhnliche btree-, GIN- und BRIN-Indizes auf beliebigen Collections siehe Indizes.

Rohdaten-Bytes, gespeichert als bytea. Werte passieren die API als Base64-Strings – einschließlich defaultValue.

signature: {
type: "binary",
name: "Signature"
}

Große Dateien gehören in den Speicher (Storage), nicht in eine Spalte: Ein bytea wird im Ganzen mit der Zeile gelesen und geschrieben.

Enum-Werte, Validierungsregeln und bedingte Felder haben eine eigene Seite: Validierung und Bedingungen.