bcquality/microsoft/knowledge/appsource/two-level-namespace-replaces-object-affix-not-extension-member-affix.md
Jesper Schulz-Wedde e81632b4be Complete AL review knowledge readiness
Fill telemetry and Query coverage, strengthen thin review domains, correct audited content defects, and add deterministic cheap-model evaluation and reference-integrity safeguards.

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

Copilot-Session: 9825b012-e653-496a-9310-c1f4b6f8ac27
2026-07-15 07:19:15 +02:00

1.5 KiB

bc-version domain keywords technologies countries application-area
23..
appsource
namespace
two-level
affix
prefix
suffix
as0011
tableextension
pageextension
al
w1
all

A two-level namespace replaces an object affix, not an extension-member affix

Description

Current AppSource naming guidance accepts a namespace with at least two levels, such as Contoso.Rentals, instead of a registered prefix or suffix on the names of objects the app owns. The namespace does not qualify members added to another publisher's object: fields, keys, controls, and actions introduced through table or page extensions still share the target object's flat member namespace and still need the registered affix.

Best Practice

Choose one collision strategy for owned objects: a registered affix or a globally meaningful namespace with at least two levels. Regardless of that choice, apply the registered affix to every member added to a base or third-party object. Keep the affix configured for AppSourceCop so member validation remains deterministic.

See sample: two-level-namespace-replaces-object-affix-not-extension-member-affix.good.al.

Anti Pattern

Using namespace Contoso; as though one level satisfied the AppSource alternative, or declaring namespace Contoso.Rentals; and then adding an unaffixed Loyalty Points field to Customer. The namespace distinguishes the extension's own objects; it cannot disambiguate members on Customer.

See sample: two-level-namespace-replaces-object-affix-not-extension-member-affix.bad.al.