Ü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"]