bcquality/microsoft/knowledge/privacy/avoid-strsubstno-prebuild-before-error.md
Jesper Schulz-Wedde 2b5550c346
Some checks failed
Validate knowledge index / validate-index (push) Has been cancelled
Validate AL review fixtures / validate-review-fixtures (push) Has been cancelled
Validate frontmatter and structure / validate (push) Has been cancelled
Improve partner onboarding and documentation navigation (#174)
Lead with a complete plugin quick start and add task-oriented usage, troubleshooting, customization, and contribution guides. Preserve the broader plugin framing, correct conflicting contract guidance, support Agents folder reviews, and align repository validation. Convert existing sample references to clickable links without changing knowledge rules.

Co-authored-by: Jesper Schulz-Wedde <jesper.schulzwedde@microsoft.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
2026-09-09 17:31:03 +02:00

1.5 KiB

bc-version domain keywords technologies countries application-area
20..
privacy
strsubstno
error
telemetry
pii
prebuild
text-variable
al
w1
all

Pass a Label directly as the first Error argument

Description

Error method trace telemetry includes the AL error string only when the first Error argument is a Label or TextConst. Wrapping a label in StrSubstNo, or concatenating labels or text, produces a dynamic Text first argument. In that case the actual string is not emitted as the telemetry message; the platform emits its generic guidance instead. CodeCop AA0231 flags both shapes because the label identity and data-classification context are lost.

Best Practice

Declare the complete message as a Label or TextConst and pass it directly to Error, followed by substitution values. The client receives the formatted message while telemetry retains the static message template without using the dynamic values as its message. Independently review whether each substitution value is appropriate to show to the current user.

See sample: avoid-strsubstno-prebuild-before-error.good.al.

Anti Pattern

Error(StrSubstNo(CustomerInvalidErr, Customer."No.")) and Error(HeaderErr + DetailErr) both make the first argument dynamic. They reduce error telemetry quality; they do not cause that composed string to be logged verbatim as the telemetry message.

See sample: avoid-strsubstno-prebuild-before-error.bad.al.