Adds 55 articles (plus 76 code samples) spanning four new domains and two existing domains, extracted from the internal Business Central review-agent prompt. Content was filtered against BCQuality's remedial-knowledge premise: each article encodes BC-specific behaviour, a CodeCop rule, a platform API semantic, or an anti-false-positive guideline that a capable LLM would otherwise get wrong. New domains: - privacy (11 articles): DataClassification inheritance semantics, the StrSubstNo-defeats-Error-telemetry-classification pitfall, Privacy Notice consent for outgoing requests, anti-false-positives for pages and in-memory data. - upgrade (11 articles): upgrade-codeunit structure, upgrade-tag lifecycle and registration, protected DB reads, DataTransfer for large datasets, InitValue semantics, enum-ordinal preservation, obsolete-workflow, first-install detection. - ui (9 articles): caption capitalization by phrase type, tooltip voice, teaching-tip vs tooltip, tour-tip conventions, character limits, banned terms, ampersand handling, title punctuation. - style (11 articles): label-suffix convention, API page naming, temporary-variable prefix, label properties (Comment/Locked), named invocations, FieldCaption in user messages, OptionCaption pairing, Error-parameter passing, `this` keyword, required parentheses, file naming. Gaps in existing domains: - performance (11 articles): production-scale table catalog (no row counts, per internal-data concern), anti-false-positive for bounded tables, guard-before-Get ordering, redundant-Get-in-OnAfterGetRecord, LockTable in read-only helpers, combined ModifyAll passes, writes in OnAfterGetRecord, SetLoadFields heuristics, temporary-table regressions, FlowField source-table widening, MaintainSQLIndex disabling SIFT. - security (2 articles): environment-specific hardcoded GUIDs, ValidateTableRelation=false on user input. Intentionally excluded: specific production P95 row-count numbers (aggregated internal telemetry); rewritten as categorical guidance on which tables to treat as production-scale without publishing sizes. All articles use `bc-version: [all]` (applies to every BC version, per the new schema sentinel). Validator passes with 0 errors / 0 warnings.
1.7 KiB
| bc-version | domain | keywords | technologies | countries | application-area | ||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
style |
|
|
|
|
Suffix every Label and TextConst with its approved usage tag
Description
CodeCop rule AA0074 requires every Label and TextConst to carry a suffix indicating how the value is consumed: Msg for Message calls, Err for Error calls, Qst for Confirm or StrMenu prompts, Tok for locked tokens (URLs, JSON keys, short literals with Locked = true), Lbl for captions and tooltips, and Txt for telemetry strings. The suffix is not decoration — it is how the compiler, linter, and reviewer detect misuse (a Tok value passed to Error, a Msg used as an error label). The cost of adopting the convention is one short suffix per declaration; the cost of ignoring it is that every reviewer has to inspect every call site to judge appropriateness.
Best Practice
Name every Label and TextConst with one of Msg, Err, Qst, Tok, Lbl, or Txt at the end. Pick the suffix that matches the consuming call, not the look of the string. When multiple suffixes are grammatically valid (Tok vs Lbl for a short caption on a locked token) the choice is a judgment call; the violation is missing a suffix or using one inconsistent with the call site.
See sample: apply-approved-label-suffixes.good.al.
Anti Pattern
CannotDeleteLine: Label 'Cannot delete this line.'; — no suffix, used with Error. Text000: Label 'Update complete'; — generic name with no suffix at all. WrongSuffixTok: Label 'Customer %1 not found.' used with Error — a Tok suffix on an error label.
See sample: apply-approved-label-suffixes.bad.al.