Author 7 remedial BCQuality knowledge articles plus good/bad AL samples (21 files) covering AL master-table and data-model design: - data-modeling: master No. from number series in OnInsert; use codeunit "No. Series" not obsolete NoSeriesManagement; setup table is a singleton; set Last Date Modified in OnModify and OnRename; enforce Blocked in referencing code not in the master. - style: ApplicationArea required on page controls (AS0062). - appsource: object affixes prevent collisions (AS0011). Clean-room authored from own BC knowledge; specifics verified against public sources only (learn.microsoft.com, microsoft/BCApps). Introduces two new domains (data-modeling, appsource). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1.5 KiB
| bc-version | domain | keywords | technologies | countries | application-area | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
data-modeling |
|
|
|
|
Refresh Last Date Modified in both OnModify and OnRename
Description
Master tables carry a non-editable Last Date Modified field of type Date. It records when the record last changed and is refreshed by table triggers, not by the user. The refresh must happen in both OnModify and OnRename.
The reason is a BC-specific trap: renaming a record changes its primary key and fires OnRename — it does not fire OnModify. A table that updates Last Date Modified only in OnModify therefore leaves a stale date behind every rename. Downstream logic that keys on this field (incremental sync, integration deltas, "changed since" reports) then silently skips the renamed record. Assign Today (the system date), not WorkDate, because the field reflects the real modification moment.
Best Practice
Both OnModify and OnRename set "Last Date Modified" := Today();, and the field is declared Editable = false so only the triggers maintain it.
See sample: set-last-date-modified-in-onmodify-and-onrename.good.al.
Anti Pattern
Only OnModify assigns Last Date Modified. After a rename the value is stale, and any process that trusts it to detect changes misses the record.
See sample: set-last-date-modified-in-onmodify-and-onrename.bad.al.