← All postsDevelopment ยท 3 November 2026

Naming objects in Business Central development: the conventions that stop arguments

Names are the first thing the next developer sees and the last thing anyone agrees on. The naming conventions we use for every AL project: objects, files, fields, procedures, variables, events and enums, with the reasons behind each one and the handful of rules that matter most.

Every per-tenant extension we inherit has at least three naming conventions in it, one per developer who worked on it, and none of them written down. The names are not wrong, exactly; they are inconsistent, and inconsistency is what makes code slow to read and easy to break. These are the conventions we use, which are close to Microsoft's own for the base application and to the community's accepted practice. Where there is a choice, we say why.

The rules that matter most

  1. Write it down and put it in the repository. A CONTRIBUTING.md with the conventions, and the analysers (CodeCop, PerTenantExtensionCop or AppSourceCop) switched on to enforce the ones they can. A convention that lives in someone's head is not a convention.
  2. Name for the reader, not the writer. The next developer, in three years, with no context. "Courier Shipment Sender" beats "CSS Mgt".
  3. Be consistent over being clever. If the codebase says "Mgt." for management codeunits, keep saying it, even if you would have chosen differently.

Objects

Files

Microsoft's convention, enforced by the CodeCop rule and by most pipelines: <ObjectName>.<ObjectType>.al, with the name in PascalCase without spaces or the affix: CourierShipment.Table.al, CourierShipmentCard.Page.al, CourierShipmentMgt.Codeunit.al, Item.TableExt.al, ItemCard.PageExt.al, ShipmentStatus.Enum.al, CourierShipmentTests.Codeunit.al. One object per file, no exceptions. Folders match namespaces, one per functional area, not one per object type: a Codeunits folder with eighty files tells you nothing; a Courier folder with twelve tells you everything.

Fields

Procedures

Variables

Captions and translation

Every object, field, action and enum value has a Caption, and TranslationFile is in app.json features so an XLIFF is generated. Even a UK-only business: the captions are what the user sees, and separating them from the names is what lets you rename a field for the user without a schema change.

What the analysers enforce for you

Switch on CodeCop (style), UICop (tooltips, captions, page layout), and PerTenantExtensionCop or AppSourceCop (affixes, ID ranges, obsolete handling) in settings.json and in the pipeline, with warnings as errors. They cover file names, affixes, missing captions and tooltips, missing Comment on labels, and a long list of style rules. What they cannot enforce is whether the name means anything, which is the part the human does.

A note on existing code

Do not rename everything in one go. Renaming objects is safe for data (the platform tracks by ID) but breaks every reference, including from other apps and from saved views, report layouts and web service names that users depend on. Adopt the conventions for new code immediately, fix names as you touch files, and plan any wholesale rename of user-visible objects as a release with communication. The analysers can be introduced with the existing warnings baselined so they catch new offences without demanding that the old ones are fixed first.

If you want a starting point, the conventions above are the ones in our repository template, together with the AL-Go pipeline that enforces them; and the AL code check will tell you how far an existing extension is from them.

Talk to us
Want this done in your Business Central?
Book a 30 minute callGet the monthly newsletter

More from the blog