Custom & Computed Fields
Custom fields add data to a record without changing the application. Three kinds exist, and the difference between them is who fills them in:
| Kind | Who fills it | Example |
|---|---|---|
| Standard | a person, on the record | "Preferred contact method" |
| Calculated | the system, from a formula over this record's own fields | score * 10 + cf_bonus |
| Rollup | the system, by aggregating linked child rows | "Number of open requests" |
Calculated and rollup fields are read-only on the record and recalculate automatically whenever the data they depend on changes.
Where to find it
| Screen | Where it lives | What you need |
|---|---|---|
Custom Fields — /admin/custom-fields | Settings → Data model → Custom Fields | Permission to read custom fields; each target table has its own manage permission for writing |
Pick the table you are designing for at the top — the catalogue is per table.
Creating a standard field
Press + Add field:
- Label — what people read.
- Key — the technical name. Locked after creation.
- Field kind — Standard, Calculated or Rollup. Locked after creation.
- Data type — the kind of value it holds.
- Options — for a choice field, one per line.
- Required — the record cannot be saved without it.
- Encrypted (sensitive) — see below. Locked after creation.
- Enabled — untick and the field stops being offered without losing its data.
Encrypted fields
An encrypted field stores its values encrypted and shows them masked to anyone without the reveal permission. It must be declared at creation and cannot be turned on later.
Who a field applies to
By default a custom field applies to every contact. The Applies to section narrows it: attach one or more roles, and the field only shows on contacts holding one of them — client-only fields, staff-only fields, and so on.
Detaching every role puts it back to all contacts, and no data is deleted when you do. Roles managed at the global layer show as chips you cannot detach here.
Calculated fields
A calculated field carries a Formula. You reference this table's own columns by name, and sibling custom fields as cf_<key> — for example score * 10 + cf_bonus.
If the formula does not parse, the error tells you where — the parse position comes back from the server verbatim rather than as a generic "invalid formula".
Rollup fields
A rollup aggregates linked child rows onto this record. Its configuration is a short, fixed vocabulary:
| Setting | What it means |
|---|---|
| Source table | the child table, schema-qualified |
| Link field | the child column that points at this record |
| Record id | always the record being recalculated — filled in for you |
| Aggregate | how to combine the rows (count, sum, and so on) |
| Field | the child column being aggregated. Optional with count — set it and only non-empty values are counted |
| Filter | optional; a structured filter, so a rollup can count only some of the child rows |
The child table must be event-enabled and linked to this table by the link field — otherwise the recalculation would have nothing to notice.
Which tables may have computed fields
Calculated and rollup kinds are offered for Contacts only at the moment. The kind picker disables them elsewhere and gives the reason: a table earns computed support once its editors prove that every change triggers a recalculation. A rollup that is only sometimes right is worse than no rollup.
When a stored configuration goes bad
If a formula or rollup configuration fails validation, the field comes back disabled with the stored error shown in the editor — not silently broken, and not silently dropped. Fix it and save; a valid save brings the field back through the normal lifecycle.
Cycles and dependents
Two computed fields cannot depend on each other. If a change would create a cycle, the save is refused and the message explains the cycle in plain English.
Deleting a field that other computed fields read is refused too, and the refusal names the dependent fields — you are told what to fix, not just that you cannot proceed.
Deleting a field
Deleting is soft: stored values are kept. The field stops being offered; nothing is destroyed.