Required Data
Making a field required is easy. Making it true is the hard part: the moment you declare it, the records that already exist are still missing it. This page is about that gap — what is missing, how much of it, where the values are coming from, and the two buttons that move a field from "the application refuses it" to "the database refuses it".
Where to find it
| Screen | Where it lives | What you need |
|---|---|---|
Required data — /admin/extensions/required | Settings → Data model → Required data | Permission to see required data; each action needs its own separate permission |
The missing-data alert links straight here, and the page opens with the field the alert is about already expanded.
Two kinds of "required"
| State | What it means |
|---|---|
| The app refuses it | a new record cannot be saved without a value, straight away. Old rows are allowed to stay empty, and the page counts them |
| The database enforces it | the column itself refuses an empty value. Nothing anywhere — no import, no script, no door — can create a row without one |
The second is the destination. You get there once nothing is missing.
Reading a row
Each row names the Table and the Field, then:
- State — in the page's own words: The app refuses it — 240 old rows still empty, or Filling in — 240 left, or The database enforces it. While the old rows are still being counted it says so, with how long that will take.
- Missing — how many rows still have no value, with a bar that reads, for example, 180 of 420 rows filled (or not counted yet).
- Mode — Enforce now, or Backfill first.
- Then enforce — what happens when nothing is missing: As soon as nothing is missing, In the nightly window, or After you confirm.
- Alert — Its alert rule, or Nothing to alert about, or the reason there cannot be one.
- Last run — what the backfill job last did.
Where the values come from
Press Details on a row to expand it (Hide folds it again), then press Edit the sources. A source is how the empty rows get filled, and the page lists them in plain English:
| Source | What it does |
|---|---|
| By hand, record by record | somebody opens each record and types it |
| From the field "…" on the same table | copy from a sibling column |
| From "…" on the record it belongs to | copy from the record the row hangs off |
| A fixed value: … | the same value everywhere it is missing |
| An import that is going to bring it (…) | a named import will supply it |
Press Save the sources — this, too, asks for your password — and the backfill job fills what it can on its next run. Until a source is added, the row says No sources yet — the rows are filled in by hand, one record at a time. Fill them now does not fill anything itself — it asks the backfill job to take this column on its next pass, and the page tells you within how many seconds that is. The report afterwards, under What the last run did, says, per source, how many it filled and how many are still missing — and when a source writes nothing by itself, it says that too instead of reporting a silent success.
If some rows are unreachable, the page says what to do about it: add a fixed value to the sources and those rows get filled as well — and then the column can be enforced.
Which rows are still missing it
Missing rows lists them, with Open the record on each and Show more at the end of a long list. When the field sits on a table that hangs off a relationship rather than a contact, there is no record page to open, and the row says so: A relationship — there is no record page to open.
The case this page is the only home for
A required field on a table that hangs off a relationship can never badge a record, because there is no record to badge. The alert engine cannot evaluate a rule against it at all. So this page is the only place those missing values are ever reported — for ever, to whoever arrives a week after the field was declared. The row carries that reason as a sentence of its own, and the empty state says it too.
The two decisions
- Make the database enforce it — promotes the column. Offered when the state allows it.
- Stop requiring — relaxes it again, after you confirm. The column is no longer required, by the app or the database, and the missing-data alert stops. Nothing is deleted.
Both ask for your password: changing what the database enforces is a level-3 action.
Each button needs its own permission. When you lack some of them, the page names what you are not able to do here — for example fill the empty rows now or stop requiring a column — instead of leaving you to wonder where the buttons went.
The empty state is a good state
When nothing is required-but-unfilled, the page says so: No column is required-but-unfilled. It also explains what will appear here — when somebody makes an extension field required, it shows up with the rows still missing it, and you are notified until none are left.