Managing Fields

Editing and retiring definitions, the change-history dialog, the usage and impact report, deleting without destroying data, the 18-column spreadsheet export, and the two read-only reference screens.

Once fields exist, the Custom Fields screen is where they are looked after: edited, retired, audited, measured and exported. This page covers each of those, and the two read-only reference screens that answer "what types exist" and "what record types can I attach to".

The row menu

Every field in the list has a row menu with eight actions. Each needs its own permission, so a role may see some and not others.

ActionWhat it doesPermission
EditOpens the definition form, populated from the field's full detail.custom-fields.update
Option setsAttaches, configures or detaches a shared versioned option set for Select or MultiSelect fields.custom-field-option-sets.view
Visibility rulesOpens the conditional visibility rule dialog to configure show-or-hide rules evaluated against sibling fields.custom-field-visibility-rules.view
Convert value typeOpens a dialog to convert the field's value type: pick a target from the types it can safely become, confirm if the conversion is lossy, and roll back afterwards if needed.custom-fields.update
Version history & draftsOpens the version history drawer: read the chain of versions, mint a new draft, or publish or discard one already minted.custom-fields.view
HistoryLists every recorded change to the field's definition, newest first, with who and when.custom-fields.view
Usage & impactReports how many answers the field holds, broken down by record type, and whether deleting it would destroy data.custom-fields.view
DeleteDeletes the definition — refused first if it holds answers, until you confirm explicitly.custom-fields.delete

Editing a definition

Editing opens the same form as creating, with the permanent settings shown but not editable: record type, key, value type and scope. Everything else can be changed, and the changes take effect on the next form somebody opens.

If the detail behind the Edit button fails to load, the form deliberately does not open, and you get a message instead. That is a safeguard rather than an inconvenience: the list row does not carry the options, the placeholders or the validator, so opening a form populated from it and saving would silently erase all three.

Visibility rules administration

Visibility rules allow fields to be shown or hidden dynamically on record forms based on the values of sibling custom fields on the same record type. When a rule is active, client-side forms and server-side validation evaluate the conditions deterministically.

OperatorCondition evaluatedExample trigger
EqualsThe controlling field's value exactly matches the target value.Show Kit Size when Staff Role equals Coach.
Does not equalThe controlling field has any value other than the target value.Show Dietary Requirements when Meal Plan does not equal None.
Is emptyThe controlling field holds no stored answer or null.Show Explanation when ID Number is empty.
Is not emptyThe controlling field has any non-null, non-empty value.Show Expiry Date when Passport Number is not empty.
In setThe controlling field's answer is one of multiple comma-separated values.Show Specialization when Department in Medical, Coaching, Analytics.
Not in setThe controlling field's answer is none of the listed values.Show General Notes when Category not in VIP, Board.
Greater thanThe numeric or date answer strictly exceeds the threshold.Show Clearance Details when Security Level greater than 3.
Less thanThe numeric or date answer is strictly below the threshold.Show Parental Consent when Age less than 18.

A field with several rules is visible only when every one of them is satisfied — a plain AND across all of them, not a contest between competing Show and Hide actions, because a rule only ever expresses one condition to be visible under. Priority orders the rules for diagnostics and display only; it never changes which rules apply. A field a rule is currently hiding is skipped by Required validation too, so a condition nobody can see never blocks a save.

Value-type conversion and rollback

Converting a field's declared value type is a separate operation, reached from its own row-menu action rather than the edit form — it changes how already-stored answers are represented, not just what future ones look like. Only nine specific type pairs are allowed; every other pair is refused outright, including any pair touching a reference type, File, Image or RichText.

Safety classSupported type pairsData preservation guarantee
LosslessText → LongText, Number → Text, Number → LongText, Percent → Text, Rating → Text, Percent → Number, Rating → NumberEvery existing value parses directly into the target type with nothing lost — a number formatted as text, or a percentage or rating re-read as a plain number.
Lossy (requires confirmation)LongText → Text, Text → NumberNeither pair truncates. LongText → Text refuses the whole operation the moment one stored value is over Text's own 4,000-character cap, naming its actual length. Text → Number refuses the whole operation the moment one stored value fails to parse as a number. Either way, a single bad row blocks every row — there is no partial conversion that changes some records and leaves others as they were.
Not offeredEvery other pair — 453 of the 462 possible, including any pair touching EntityReference, UserReference, File, Image or RichText.Refused before anything runs. A reference-shaped or media-shaped value has no meaningful text or number form to convert into, and the reverse direction has nothing real to point at.

Before changing anything, the server checks every stored value against the target type in a first pass that writes nothing. If even one value would fail to convert, the whole operation is refused up front, naming every failing row, and nothing is changed — it is all-or-nothing, never a partial conversion that leaves some rows old and some new.

Field definition versions and drafts lifecycle

A definition's live scalars, options and visibility rules can be cloned into an isolated draft, then either published — replacing the live version in one step — or discarded, leaving the live version untouched either way.

StatusLifecycle meaningAvailable actions
DraftAn isolated clone of the definition as it stood at the moment it was minted — its own copy of the scalars, options and visibility rules. Not served on any record form.Publish, Discard. Nothing currently edits a draft after it is minted — a wrong clone has to be discarded and re-minted.
PublishedThe one active version currently served on every record form for this field.Create Draft (mints a new working clone), View History.
DeprecatedA former Published version, replaced when a draft was promoted. Its cloned options and rules stay attached to it but are inert — enforcement only ever reads the current Published version.Read-only audit record. Retained for historical integrity.
ArchivedA discarded draft, kept rather than deleted so its version number can never be reissued.Historical reference only.

Publishing a draft deprecates the incumbent Published version in the same save. The version number always increments, and every form load from that point serves the new Published version.

Retiring a field: deactivate or delete

These are not the same operation and the difference matters. If you are unsure, deactivate — it is the reversible one.

  • Turning Active off

    • The field stops being offered on create and edit forms
    • Every answer already stored is kept, untouched
    • It is reversible — turning Active back on restores the field as it was
    • It is recorded in history as Deactivated, and can be Reactivated later
  • Deleting the definition

    • Refused on the first attempt if the field holds any answers
    • Destroys those answers once the retention window passes, if you confirm
    • Frees the key, so a new field could later reuse it — with none of the old answers
    • Is recorded in history as Deleted, and may be Restored while it is recoverable

Definition history

The History entry in a field's row menu opens a dialog listing what has happened to that field's definition, newest first, with the person who did it and when. A change made by the system rather than a person is attributed to the system. Entries are paged, and the dialog says how many changes there are in total.

EventWhat it means
CreatedThe field was defined.
UpdatedSomething on the definition changed — a label, a flag, the validator, the options.
DeactivatedActive was turned off, retiring the field without touching its answers.
ReactivatedActive was turned back on.
DeletedThe definition was deleted and is still recoverable.
RestoredA deleted definition was brought back.
PurgedThe definition was permanently removed and is no longer recoverable. The dialog marks this one explicitly so it cannot be read as an ordinary delete.

Each entry also says which part of the field it concerns, because a field is more than a single row.

PartWhat it means
FieldThe field itself.
DefinitionThe definition record behind it.
VersionA version of the definition.
OptionOne entry in the field's options list.
Visibility ruleA conditional show-or-hide rule attached to the field, managed via the Visibility Rules dialog.

Usage and impact

The Usage & impact entry in the row menu reports what the field is actually carrying before you change or remove it. Read the whole dialog rather than one number.

What it showsWhat it means
Stored valuesHow many answers exist for this field.
Values in the legacy storeAnswers still held in the older storage from before the current value store. Counted separately so a migration in progress is visible rather than hidden.
OptionsHow many options the field's list holds, for a Select or MultiSelect field.
By record typeThe same answer count split by the kind of record holding it, so you can see where the data actually is.
Organisations holding valuesFor a global platform field, how many workspaces hold answers for it. This is the number that makes a delete genuinely consequential.
The scope notice at the topSays whether the counts below cover your workspace only or every workspace on the platform. The two differ by orders of magnitude for an inherited field, and nothing about a bare number tells you which one you are looking at.

Deleting without destroying data

Deleting a field that holds answers takes two deliberate steps. A field with no answers takes one.

  1. Open Usage & impact first

    See how many answers exist and where they are. If the number surprises you, stop here — deactivating the field is almost always the better move.
  2. Choose Delete

    If the field holds answers, the delete is refused with a conflict and the dialog explains exactly what would be lost, naming the number of stored values and the number of record types.
  3. Confirm the destructive delete

    Confirming from inside that dialog is what actually proceeds. This is a separate, explicit act rather than a second click on the same button, so a field with data cannot be removed by momentum.
  4. Or delete an empty field in one step

    A field with no answers deletes with no warning and no extra step, because there is nothing to lose.

A confirmed delete destroys the stored answers once the retention window passes, not instantly. Until then the definition may still be Restored, and history records both the delete and the restore. After the window, the answers are gone and the history entry reads as Purged.

Exporting definitions to a spreadsheet

The Export action in the Custom Fields page header downloads a spreadsheet of the definitions you can see, one row per field with headers on the first row. These are the 18 columns.

ColumnContains
Entity typeThe record type the field is defined against.
KeyThe field's machine key.
Label (EN)The English label.
Label (AR)The Arabic label, blank if none was set.
Value typeOne of the twenty-two value types.
RequiredWhether the field is required.
ActiveWhether the field is still offered on forms.
Sort orderThe field's position among the record type's custom fields.
Options (EN)The English options, for a Select or MultiSelect field.
Options (AR)The Arabic options, aligned with the English ones.
SensitivityThe classification label set on the definition.
Included in exportsThe Include in exports setting, reported as Yes or No. It is never used to filter this file — a definitions export that dropped rows would hide exactly the fields an administrator most needs to audit.
ValidatorThe attached validator, for a Text field.
Validator parameterThe validator's setting, where it takes one.
Placeholder (EN)The English placeholder hint.
Placeholder (AR)The Arabic placeholder hint.
ScopePlatform for a global field, Organisation for a workspace one.
Created (UTC)When the definition was created, in UTC.

Yes/no columns are written as the words Yes and No rather than as spreadsheet booleans, so they survive being opened in a different language and still read as intended.

The two reference screens

Both are reached from links in the Custom Fields page header, both are read-only, and both are gated behind the same view permission as the Custom Fields screen itself. Neither has a sidebar entry of its own, which is deliberate.

Value Types

A table of all twenty-two value types with, for each, a description of what it is for, whether it takes a placeholder, whether it owns an options list, and whether it supports a validator. Use it to answer "what types exist" without opening a definition form. Text is the only row showing validator support, and the four reference-shaped types (EntityReference, UserReference, File, Image) show no options list of their own — what they point at comes from another module or an upload rather than from a list you author.

Entity Types

A list of every record type a custom field can be attached to: its display name, its key, and the module that owns it.

It also shows two separate screen columns plus a status, which is not a duplication. One is what the platform claims about this application; the other is what this application actually has. The status column says whether the two agree, and a row reading Out of Sync is a real defect worth reporting — it means either a field pointed at a record type nobody can render, or a screen the platform does not know exists.