Approvals
A record can now require approval before it moves. You declare when an approval is needed and who approves it — everyone on the list, or any one of them.
While an approval is open the record is read-only. Everyone can still read it, an administrator is never blocked, and a journal entry can always be added.
Each approver finds their own task — and only their own — in a new Self service area, and answers it from there. A rejection asks why, and the reason is kept with the task. Once the approval is decided the record is free again, and the tasks nobody got to answer stop asking for a decision that has already been made.
Relating two tables
A new Many to many module relates two tables through an intermediate one, declared like any other relation. On a record it appears as a related list showing the columns of the table it points at. The + creates a record there with this one already linked, and the button beside it links and unlinks records that already exist.
Your records show their names
A table now declares which of its fields names its records. Relation labels, pickers, filter values and board cards all read that declaration instead of guessing what looks like a name — so renaming a field is enough to change what everyone sees.
And no screen shows an internal identifier where a name belongs. When there is no name to show, it says so instead of printing a key.
Screens tell you what happened
An action now answers what it did, not just that it was fired: when a rule blocks it, you get the rule's message instead of a tick and a record that did not move.
An action can also ask for what it needs before running.
A list that could not load no longer claims a reason it cannot know. Dialogs take the keyboard and close with Escape. Board cards show the first three columns you chose. And a board embedded in a public page renders as a board.
Views of your own work
My incidents, My changes to approve, My demands and My problems find your records again.
Also fixed
Reading a stored value that cannot be decrypted now answers with an error instead of taking the page down with it.