bcquality/custom/knowledge/style/intrinsic-al-functions-must-use-modern-casing.md

2 KiB

bc-version domain keywords technologies countries application-area
all
style
casing
intrinsic-function
built-in-function
message
error
confirm
strsubstno
legacy
c-al
pascalcase
al
w1
all

Intrinsic AL function calls use modern casing, not legacy ALL-CAPS

Description

AL is case-insensitive, so MESSAGE(...), ERROR(...), CONFIRM(...), and STRSUBSTNO(...) compile and run identically to Message(...), Error(...), Confirm(...), and StrSubstNo(...). Modern AL — the VS Code tooling's default formatter output, Microsoft's own current samples, and the BCApps codebase — writes intrinsic/built-in function calls in the casing Microsoft assigns to the function's declared name (typically PascalCase). ALL-CAPS calls are a holdover from classic C/AL (C/SIDE) and signal code that has not been modernized, even though it compiles and runs correctly.

This is a distinct concern from CodeCop AA0241 (lowercase-reserved-keywords), which governs reserved keywords (if, begin, var, for, ...) and explicitly excludes identifiers and function calls. Intrinsic function names are identifiers, not keywords, so AA0241 does not catch ALL-CAPS intrinsic function calls — which is exactly why the pattern survives unflagged from old training material and legacy modules into new development.

Best Practice

Message('%1 records updated.', Count);
if not Confirm('Delete %1?', false, CustomerNo) then
    exit;
Error(StrSubstNo('%1 must not be blank.', FieldCaption("No.")));

Anti Pattern

MESSAGE('%1 records updated.', Count);
IF NOT CONFIRM('Delete %1?', FALSE, CustomerNo) THEN
    EXIT;
ERROR(STRSUBSTNO('%1 must not be blank.', FieldCaption("No.")));

ALL-CAPS intrinsic function calls (MESSAGE, ERROR, CONFIRM, STRSUBSTNO, CALCDATE, COPYSTR, and similar) trip no current CodeCop diagnostic, but they are a reliable signal that a code block was copied from old C/AL material, a pre-2018 upgrade, or outdated training content rather than written or reviewed against current AL conventions.