bcquality/microsoft/knowledge/data-modeling/master-table-no-from-number-series-in-oninsert.md
Jesper Schulz-Wedde 18cb503540 Add data-modeling and appsource knowledge articles (MICROSOFT layer)
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>
2026-07-01 11:00:05 +02:00

1.9 KiB

bc-version domain keywords technologies countries application-area
all
data-modeling
no-series
primary-key
code20
oninsert
autoincrement
number-assignment
al
w1
all

A master table's No. primary key comes from a number series in OnInsert

Description

In Business Central, a master table (Customer, Vendor, Item, and any custom equivalent) uses a single primary-key field named No. of type Code[20]. It is populated from a number series — configured on the feature's application-area setup table — inside the table's OnInsert trigger, but only when No. is still blank (so a user may still type a manual number when the series allows it). The record also keeps a non-editable No. Series Code[20] field recording which series produced the number.

This is not an Integer AutoIncrement key, a GUID, or the SystemId. Those are surrogate/system identifiers that users never see and cannot quote; BC's whole document flow — lookups, filtering, printed references, telephone support — depends on a short, human-readable, business-controlled No.. Use the modern assignment API described in use-no-series-codeunit-not-noseriesmanagement.md.

Best Practice

No. Code[20] is the sole primary key; a non-editable No. Series Code[20] field records the source series. OnInsert checks if "No." = '', reads the setup table, TestFields the configured series, stores it in No. Series, and assigns No. from the series.

See sample: master-table-no-from-number-series-in-oninsert.good.al.

Anti Pattern

An Integer AutoIncrement (or GUID / SystemId) primary key used as the business key, with no OnInsert number assignment. Records get an opaque identifier no user can reference, and the master no longer participates in the standard numbering and manual-entry behavior every other BC master follows.

See sample: master-table-no-from-number-series-in-oninsert.bad.al.