Skip to main content

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
}
PropertyTypeDefaultDescription
namestring—Field name, lowerCamelCase. Must be unique within the class, inherited fields included.
dataTypeValueDataTypeTEXTThe type of value this field stores.
requiredbooleanfalseIf true, the field must have a value.
multiplebooleanfalseIf true, the field stores a list of values.
enabledbooleantrueIf false, the field exists in the model but is hidden from the UI.
hiddenbooleanfalseIf true, the field is stored but never shown in the UI.
uniquebooleanfalseIf true, no two objects of this class can have the same value for this field.
historyEnabledbooleanfalseIf true, the field keeps its earlier values, each with the date until which it was valid. Cannot be combined with multiple.
listQualifiedName—For LIST data type: reference to a StandardList definition. See Lists.
defaultValueany—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.
indexedbooleanper data typeWhether 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.