bcquality/microsoft/knowledge/interfaces/set-defaultimplementation-on-enum.md
Jesper Schulz-Wedde 363f08f47e
Add P0 event and interface compatibility knowledge (#98)
* Add P0 extensibility compatibility knowledge

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 645349fd-1892-48f3-8a84-db77d6abd1c3

* Correct event compatibility guidance

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 645349fd-1892-48f3-8a84-db77d6abd1c3

---------

Co-authored-by: Jesper Schulz-Wedde <jesper.schulzwedde@microsoft.com>
2026-07-14 12:51:59 +02:00

1.9 KiB

bc-version domain keywords technologies countries application-area
16..
interfaces
interface
defaultimplementation
enum-implements-interface
fallback
extensible-enum
implementation-property
al
w1
all

Set DefaultImplementation on an enum so an unmapped value still resolves to an interface

Description

An enum that implements an interface maps each declared value to a codeunit through the Implementation property. A declared value, including one supplied by an enum extension, can omit that mapping. Assigning that value to an interface variable then fails at runtime unless the enum provides DefaultImplementation. This property is for declared but unmapped values; an ordinal that is no longer declared is a different case covered by handle-unknown-enum-ordinals-with-unknownvalueimplementation.

Best Practice

On any extensible enum that implements an interface, set DefaultImplementation = <Interface> = <Codeunit>; at the enum level, pointing at a safe implementation. Values with their own Implementation keep using it; declared values without one resolve to the default. Do not rely on this property for persisted ordinals that match no declared enum value.

See sample: set-defaultimplementation-on-enum.good.al.

Anti Pattern

An extensible enum ... implements <Interface> where at least one value sets no Implementation and the enum declares no DefaultImplementation. Code that assigns that value to an interface variable and invokes a method throws at the call site, and because the enum is extensible the failing value can be introduced by a third party long after the consumer ships. Detection signal: an enum that implements an interface, has a value(...) with no Implementation, and no enum-level DefaultImplementation. Add a DefaultImplementation mapping to close the gap.

See sample: set-defaultimplementation-on-enum.bad.al.