Überblick
Jede Entitätsspalte hat einen Feldtyp (fieldTypeCd), der bestimmt, wie Daten gespeichert, validiert, dargestellt und bearbeitet werden. Der Feldtyp wird für physische Spalten mit einem PostgreSQL-Datentyp (dbDatatype) gepaart.
Spaltentypen
Die meisten Spalten sind physische Datenbankspalten und brauchen kein columnType. Setzen Sie es nur für die folgenden Sonderfälle:
columnType | Beschreibung |
|---|---|
| (weggelassen) | Reguläre physische Datenbankspalte. Speichert einen Wert. |
R | Reference — virtuelle Spalte. Zeigt einen Wert aus einer verbundenen Entität über einen Fremdschlüssel an (N:1-Lookup). Immer mit einer versteckten FK-Spalte gepaart. |
S | Set — virtuelle Spalte. Zeigt eine Sammlung von Kind-Datensätzen an (1:N-Beziehung). |
F | Formula — virtuelle Spalte. Berechneter Wert aus einem Ausdruck. Erfordert baseDatatypeCd. |
G | Generated — physische Spalte, die von der Datenbank automatisch gepflegt wird. |
Textfelder
| Feldtyp | Anzeigename | Beschreibung |
|---|---|---|
text | Text | Einzeilige Texteingabe. Gespeichert als varchar. Verwenden Sie maxLen, um die Länge zu setzen. |
email | Text mit E-Mail-Format-Validierung. Gespeichert als varchar. | |
phone | Telefon | Text mit Telefonnummer-Format. Gespeichert als varchar. |
url | URL | Text, dargestellt als klickbarer Link. Gespeichert als varchar. |
textarea | Mehrzeiliger Text | Mehrzeiliges Textfeld. Gespeichert als text. Konfigurieren Sie defaultLines und maxLines in den Params. |
multiline | Rich Text | Rich-Text-Inhalt mit Formatierung. Gespeichert als text. |
Um eine Spalte vollständig aus der Oberfläche auszublenden, geben Sie ihr leere Flags (
""), statt einenhidden-Feldtyp zu verwenden.
Zahlenfelder
| Feldtyp | Anzeigename | Beschreibung |
|---|---|---|
number | Zahl | Numerische Eingabe. Unterstützt min/max-Validierung über Params. |
currency | Währung | Zahl mit Währungssymbol formatiert. Setzen Sie den currency-Param (z. B. „USD“, „EUR“). 2 Nachkommastellen. |
percent | Prozent | Zahl mit %-Symbol angezeigt. 2 Nachkommastellen. Standardbereich 0–100. |
Zahlen-Params
Konfigurieren Sie über column.params:
min— minimal erlaubter Wertmax— maximal erlaubter Wertcurrency— ISO-Währungscode für Währungsfelder (z. B. „USD“ wird als $ angezeigt)
Datum & Zeit
| Feldtyp | Anzeigename | Beschreibung |
|---|---|---|
date | Datum | Datums-Auswahl. Gespeichert als date. |
datetime | Datum & Zeit | Datum- und Zeit-Auswahl. Gespeichert als timestamp. |
time | Zeit | Zeit-Auswahl. Gespeichert als time. |
Boolean-Felder
| Feldtyp | Anzeigename | Beschreibung |
|---|---|---|
checkbox | Checkbox | True/false-Umschalter. |
Auswahlfelder
| Feldtyp | Anzeigename | Beschreibung |
|---|---|---|
dropdown | Dropdown | Einzelauswahl aus einer Liste von Optionen. |
flags | Flags | Mehrwert-Auswahl. Wird als Buttons oder Checkboxes angezeigt. |
tags | Tags | Frei eingebbare oder vordefinierte Tag-Eingabe. |
Optionen-Konfiguration
Dropdown- und Flags-Optionen werden in column.params.options definiert:
{
"options": ["Neu", "In Bearbeitung", "Erledigt"]
}
Oder mit Bezeichnungen, Symbolen und Farben:
{
"options": [
{ "value": "new", "label": "Neu", "color": "#3B82F6" },
{ "value": "active", "label": "Aktiv", "color": "#10B981" },
{ "value": "closed", "label": "Geschlossen", "color": "#6B7280" }
]
}
Bedingte Optionen (Option Sets)
Optionen können sich basierend auf dem Wert eines anderen Feldes ändern, mit optionSets:
{
"optionSets": {
"condition": "object_type",
"map": {
"Entity": ["S", "I", "U", "D", "C"],
"Action": ["E"],
"Report": ["E"],
"*": ["E"]
}
}
}
Beziehungsfelder
| Feldtyp | Anzeigename | Spaltentyp | Beschreibung |
|---|---|---|---|
lookup | Lookup | R (Reference) | Durchsuchbares Dropdown, das auf eine andere Entität verweist. Erstellt eine Fremdschlüssel-Beziehung. |
grid | Detail-Grid | S (Set) | Eingebettetes Grid, das Kind-Datensätze einer 1:N-Beziehung anzeigt. |
user | Anwender-Auswahl | D (Data) | Spezielles Lookup, das die Anwender-Tabelle durchsucht. |
entitylink | Entitäts-Link | D (Data) | Polymorpher Link zu einem beliebigen Entitätstyp. Gespeichert als JSON. |
Lookup-Konfiguration (FK + Reference-Pattern)
Ein Lookup braucht zwei Spalten: eine versteckte physische Fremdschlüssel-Spalte und eine virtuelle Referenz-Spalte, die das Lookup-Steuerelement rendert.
"account_id": {
"dbDatatype": "cuid",
"flags": "EM",
"orderNum": 30,
"description": "Account ID"
},
"account": {
"columnType": "R",
"fieldTypeCd": "lookup",
"flags": "VEM",
"orderNum": 35,
"description": "Konto",
"link": {
"entity": "crm.account",
"thisKey": "account_id",
"otherKey": "account_id"
}
}
Die versteckte FK speichert den Wert; die virtuelle Referenz rendert die Autocomplete und zeigt die toString-Vorlage des verlinkten Datensatzes an.
Medienfelder
| Feldtyp | Anzeigename | Beschreibung |
|---|---|---|
image | Bild | Bild-Upload mit Vorschau. |
file | Datei | Datei-Upload mit Download-Link. |
color | Farbauswahl | Farbauswahl mit Hex-Wert-Speicherung. |
Datenfelder
| Feldtyp | Anzeigename | Beschreibung |
|---|---|---|
json | JSON-Editor | Strukturierte JSON-Daten mit Syntax-Hervorhebung. |
Formel-Spalten
Formel-Spalten (Spaltentyp F) berechnen Werte aus Ausdrücken. Sie haben keine physische Datenbankspalte — Werte werden zur Laufzeit berechnet.
Synchrone Formeln
Sofort aus den lokalen Datensatzdaten ausgewertet:
[quantity] * [unit_price]— multipliziert zwei Felder[first_name] + ' ' + [last_name]— verkettet StringsIF([amount] > 1000, 'Hoch', 'Standard')— bedingte Logik
Asynchrone Formeln (Navigation)
Folgen Referenzpfaden, um Daten aus verbundenen Entitäten abzurufen:
[account_id].[industry]— holt die Branche vom verlinkten Konto[order_id].[customer_id].[name]— zwei-stufige Navigation
Asynchrone Formeln erfordern einen separaten Datenabruf und werden nach den synchronen Formeln aufgelöst.
Formel-Anforderungen
Formel-Spalten müssen angeben:
baseDatatypeCd— der Ergebnistyp (z. B. „string“, „number“)fieldTypeCd— wie das Ergebnis dargestellt wirdformula— der Ausdruckstext
Spalten-Params-Referenz
Alle Feldtypen unterstützen diese Params über column.params:
| Param | Typ | Beschreibung |
|---|---|---|
options | array | Dropdown-/Flags-Optionen |
optionSets | object | Bedingte Optionen basierend auf einem anderen Feld |
min / max | number | Validierungsgrenzen für Zahlen |
currency | string | ISO-Währungscode für Währungsfelder |
align | string | Textausrichtung-Override (left, center, right) |
gridWidth | number | Standard-Spaltenbreite in der Grid-Ansicht |
defaultLines | number | Anfängliche Textfeld-Höhe (Zeilen) |
maxLines | number | Maximale Textfeld-Höhe (Zeilen) |
limWidth | boolean | Feldbreite in Karten-/Formular-Ansicht begrenzen |
Spalten-Flags
Spalten verwenden Einzelzeichen-Flags, um das Verhalten zu steuern. Kombinieren Sie sie als einzelnen String (z. B. "VEM").
| Flag | Bedeutung |
|---|---|
V | Visible — wird in Grid- und Karten-Ansichten angezeigt |
E | Editable — Anwender kann den Wert ändern |
M | Mandatory — beim Insert erforderlich (rotes Sternchen in der Oberfläche) |
O | On insert — nur beim Insert gesetzt, danach nicht editierbar |
S | Sortable — Spalte kann sortiert werden |
G | Groupable — Spalte kann zur Gruppierung verwendet werden |
F | Filterable — Spalte erscheint in der Filter-Zeile |
C | Compact — wird in kompakten/Listen-Ansichten angezeigt |
Häufige Kombinationen:
| Kombination | Anwendungsfall |
|---|---|
"VEM" | Standard-Pflichtfeld |
"VE" | Standard-optionales Eingabefeld |
"V" | Schreibgeschützte Anzeige (Formeln, berechnete Werte) |
"EM" | Versteckte FK-Spalte (mit einer Reference gepaart) |
"" | Vollständig versteckte Systemspalte |
Flags können pro Ordner überschrieben werden, sodass dasselbe Feld in einem Ordner editierbar und in einem anderen schreibgeschützt sein kann.
Nummernsequenzen
Dokument-Entitäten (Rechnungen, Bestellungen, Angebote) können beim Insert automatisch menschenlesbare Nummern generieren. Definieren Sie eine numberSequence auf Entitäts-Ebene:
"numberSequence": {
"column": "invoice_number",
"prefixSettingCd": "invoice_number_prefix",
"defaultPrefix": "INV-",
"pattern": "{prefix}{yyyy}-{seq:3}",
"resetPeriod": "year"
}
| Property | Beschreibung |
|---|---|
column | Zielspalte, die beim Insert auto-befüllt wird |
prefixSettingCd | Modul-Einstellungs-Code für den Präfix (ordnergebunden, sodass jede Niederlassung ihren eigenen Präfix verwenden kann) |
defaultPrefix | Fallback-Präfix, wenn die Einstellung nicht konfiguriert ist |
pattern | Format-Pattern mit Platzhaltern |
resetPeriod | Wann der Zähler zurückgesetzt wird: year, month, day oder never |
Pattern-Platzhalter: {prefix}, {yyyy}, {yy}, {mm}, {dd}, {seq:N} (mit Nullen aufgefüllte Breite).
Beispiel-Output: INV-2026-001, INV-2026-002, …
Constraints
Fügen Sie CHECK-Constraints auf Entitäts-Ebene für serverseitige und clientseitige Validierung hinzu:
"constraints": {
"chk_amount_positive": {
"type": "check",
"expression": "amount IS NULL OR amount >= 0",
"message": "Betrag darf nicht negativ sein"
}
}
Constraints werden zu echten PostgreSQL-CHECK-Constraints auf der Tabelle und werden auch clientseitig über den Formel-Auswerter ausgewertet, für sofortiges UI-Feedback.
Traits
Traits fügen automatisch häufige Spalten hinzu. Geben Sie sie auf Entitäts-Ebene an — sie werden vor Ihren fields angewendet, sodass Sie einzelne Spalten bei Bedarf überschreiben können.
| Trait | Hinzugefügte Spalten |
|---|---|
identity | {entity}_id (int8 Primärschlüssel, Snowflake-ID) |
audit | created_by, modified_by, created_date, modified_date |
"traits": ["identity", "audit"]