Fields
The fields of a class are its typed properties. Each field has a name, a data type and optional constraints. A class has its own fields plus every field it inherits.
Definition
{
"name": "lastName",
"dataType": "TEXT",
"required": true
}
| Property | Type | Default | Description |
|---|---|---|---|
name | string | — | Field name, lowerCamelCase. Must be unique within the class, inherited fields included. |
dataType | ValueDataType | TEXT | The type of value this field stores. |
required | boolean | false | If true, the field must have a value. |
multiple | boolean | false | If true, the field stores a list of values. |
enabled | boolean | true | If false, the field exists in the model but is hidden from the UI. |
hidden | boolean | false | If true, the field is stored but never shown in the UI. |
unique | boolean | false | If true, no two objects of this class can have the same value for this field. |
historyEnabled | boolean | false | If true, the field keeps its earlier values, each with the date until which it was valid. Cannot be combined with multiple. |
list | QualifiedName | — | For LIST data type: reference to a StandardList definition. See Lists. |
defaultValue | any | — | Fallback default for auto-generated forms. Applied server-side on create when no value is provided. Values that cannot be parsed for the field's data type are silently ignored. |
indexed | boolean | per data type | Whether the field is included in the general search. By default every data type is, except LONGTEXT, JSON, ARRAY, FILE, IMAGE and SECRET. A SECRET field is never indexed. See Search. |
Naming rules
A field name is lowerCamelCase: a lowercase letter followed by letters and digits (lastName, vatNumber2). It never contains _ — names starting with _ belong to the platform's own properties (_class, _creationDate, _modificationDate), and _ also separates a field name from the suffix of a query parameter (amount_from). A model with a field name that breaks this rule is refused.
Field names must be unique within the effective class, including all inherited fields. name is declared once, on commons.item, and inherited by every class: do not declare it again.
The name field
commons.item defines a required field called name. This is the display name of every object. All classes inherit this field. It is typically overridden by a formula that computes it from other fields.
For example, commons.person computes name as:
{
"field": "name",
"template": "{{firstName}} {{lastName}}"
}
Display name: nameField
By default an object's display name is its name field. A class can point at another field with nameField:
{
"version": 1,
"class": "my-project.vessel",
"kind": "BASIC",
"inherits": "commons.item",
"nameField": "registrationCode",
"fields": [
{ "name": "registrationCode", "required": true }
]
}
Data types
See Data Types for the full reference.
Examples
A minimal text field:
{ "name": "jobTitle" }
A required text field:
{ "name": "lastName", "required": true }
An optional date field, disabled by default:
{ "name": "birthdate", "dataType": "DATE", "enabled": false }
An email field:
{ "name": "emailAddress", "dataType": "EMAIL" }
A field that stores a list of values:
{ "name": "tags", "multiple": true }
A field backed by a predefined list:
{ "name": "status", "dataType": "LIST", "list": "my-project.contractStatus" }
A field with a schema-level default (used in auto-generated forms):
{ "name": "hoursPerWeek", "dataType": "INTEGER", "defaultValue": 40 }
Default values
defaultValue on a field is a schema-level fallback applied by the platform when an auto-generated form creates a new object and the field has no value. It is only relevant when no explicit layout exists — forms built with an OBJECT_FORM_DASHBOARD layout should set defaults there instead using FIELD.defaultValue, which takes priority.