bcquality/microsoft/knowledge/interfaces/handle-unknown-enum-ordinals-with-unknownvalueimplementation.md
Jesper Schulz-Wedde 23af51e02d Add P0 extensibility compatibility knowledge
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 645349fd-1892-48f3-8a84-db77d6abd1c3
2026-07-14 11:43:55 +02:00

1.6 KiB

bc-version domain keywords technologies countries application-area
18..
interfaces
unknownvalueimplementation
unknown-enum-value
persisted-ordinal
enum-extension
extension-uninstall
interface-fallback
al
w1
all

Handle unknown enum ordinals with UnknownValueImplementation

Description

An enum ordinal can remain in persisted data after the enum extension that declared it is uninstalled. The ordinal is then unknown: it matches no currently declared enum value. DefaultImplementation does not cover this case; it covers declared values that have no explicit interface implementation. UnknownValueImplementation, available from runtime 7.0 (Business Central 2021 release wave 1, BC18), provides the distinct interface implementation for an unknown ordinal.

Best Practice

On BC18 or later, set UnknownValueImplementation = <Interface> = <Codeunit>; on an enum that implements an interface and can be persisted. Use an implementation that reports a clear domain error or safely contains the unknown state. Keep DefaultImplementation separately when declared but unmapped values also need a fallback.

See sample: handle-unknown-enum-ordinals-with-unknownvalueimplementation.good.al.

Anti Pattern

Defining only DefaultImplementation and assuming it also handles a stored ordinal whose enum value has disappeared. After an enum extension is uninstalled, converting that unknown ordinal to the interface can produce a technical runtime error instead of controlled handling.

See sample: handle-unknown-enum-ordinals-with-unknownvalueimplementation.bad.al.