| bc-version |
domain |
keywords |
technologies |
countries |
application-area |
|
|
appsource |
| namespace |
| two-level |
| affix |
| prefix |
| suffix |
| as0011 |
| tableextension |
| pageextension |
|
|
|
|
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.