bcquality/microsoft/knowledge/data-modeling/dimension-management-wiring.md
Michael Dieringer fa3d04c56c Fix dimension-management-wiring.md: ValidateShortcutDimCode and CreateDim
do not exist on the current DimensionManagement codeunit

Verified against microsoft/BCApps: the real master-table validation
procedure is ValidateDimValueCode (or ValidateShortcutDimValues when a
DimSetID is also needed), and the real document-side inheritance
procedure is GetDefaultDimID, not CreateDim. Caught from Jesper
Schulz-Wedde's review thread, which had been partially hidden by
GitHub's comment folding.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-21 22:25:27 +02:00

1.8 KiB

bc-version domain keywords technologies countries application-area
all
data-modeling
dimensions
dimensionmanagement
global-dimension
shortcut-dimension
default-dimension
validatedimvaluecode
getdefaultdimid
al
w1
all

Wire dimension support through DimensionManagement, not ad hoc fields

Contributions welcome — open a PR to refine or extend this article.

Description

Adding dimension support to a custom master or document table is not just a matter of adding a Code[20] field. Business Central expects a specific set of hooks into Codeunit "Dimension Management" so a dimension value is validated, persisted as a Default Dimension record, and flows through to transactions the same way it does for every standard table. Skipping any one hook produces a field that looks correct in the designer but silently fails to save, validate, or carry through to postings.

Best Practice

A master table should validate its dimension fields through ValidateDimValueCode (or ValidateShortcutDimValues when a DimSetID is also needed) and SaveDefaultDim, and create/delete the matching Default Dimension records in OnInsert/OnDelete. A document table should add Shortcut Dimension fields validated the same way, and call GetDefaultDimID to pull inherited dimension values from the related master record whenever the field that attaches the document to that master changes.

See sample: dimension-management-wiring.good.al.

Anti Pattern

Adding a dimension-looking field with only a TableRelation to Dimension Value, and no call into DimensionManagement at all. The field accepts input but never becomes a real Default Dimension record, so it does not validate against blocked values and does not flow into postings.

See sample: dimension-management-wiring.bad.al.