bcquality/microsoft/knowledge/interfaces/handle-unknown-enum-ordinals-with-unknownvalueimplementation.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.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.