bcquality/microsoft/knowledge/events/initialize-ishandled-to-false-before-publishing.md
wenjiefan 5f1cff2fb6 Refine self-improvement review guidance
Narrow IsHandled, label-scope, UI-handler, checkpoint, and bulk-operation guidance to evidence-backed false-positive boundaries.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
2026-08-18 11:17:14 +02:00

1.8 KiB

bc-version domain keywords technologies countries application-area
all
events
ishandled
initialization
deterministic
onbefore
reset
integration-event
control-flow
al
w1
all

Reset IsHandled before publishing only when its value can carry over

Description

A routine that raises an OnBefore… integration event with a var IsHandled: Boolean parameter passes that variable by reference, so a pre-existing true can affect the following control flow. AL automatically initializes Boolean variables to false, so a freshly declared local Boolean passed to one event is already deterministic. The same is true when control flow proves the variable is false; for example, reaching a second raise after if IsHandled then exit; proves that the first raise did not leave it true.

Best Practice

Reset IsHandled := false; before a raise only when the value might otherwise carry over as true: the same variable is reused after an earlier raise without a control-flow proof that it is false, the value comes from an input parameter, field, or global, or earlier code seeds it. A reset on a guaranteed-false fresh local can be retained for readability, but its absence is not a correctness finding.

See sample: initialize-ishandled-to-false-before-publishing.good.al.

Anti Pattern

Raising OnBeforeX(…, IsHandled) when the variable can still be true from an earlier raise or another source, so the new publisher call starts with stale state. Do not match a single raise using a fresh local Boolean, or a later raise reached only after if IsHandled then exit;.

See sample: initialize-ishandled-to-false-before-publishing.bad.al.