Microsoft Dynamics 365

The most approachable enterprise ERP for a developer with a .NET background, and the largest mid-market install base by customer count.

The two ERP products (they are different systems)

  Finance & Operations (F&O) Business Central (BC)
Heritage Axapta / AX Navision / NAV
Target Large mid-market to enterprise Small to mid-market
Language X++ AL
Database Azure SQL Azure SQL
Modules Deep manufacturing, WMS, multi-entity Broad but lighter
Deployment Cloud, or cloud-hosted “on-prem” Cloud or on-prem
Complexity High Moderate

Confusing these two in an interview is a tell. They share a brand and almost nothing else.

Also under the Dynamics 365 brand: Customer Engagement (Sales, Customer Service, Field Service — the former CRM, built on Dataverse), Commerce, Human Resources, Project Operations, and Supply Chain Management (part of F&O).


Dynamics 365 Finance & Operations

X++

An object-oriented language, C#-like, compiled to .NET IL, with SQL embedded in the language.

[ExtensionOf(classStr(SalesLineType))]
final class SalesLineType_Extension
{
    public void insert(boolean _dropInvent, boolean _findMarkup)
    {
        next insert(_dropInvent, _findMarkup);   // chain of command

        SalesLine salesLine = this.parmSalesLine();
        if (salesLine.SalesQty > 1000)
        {
            InventTable inventTable = InventTable::find(salesLine.ItemId);
            info(strFmt("Large order for %1: %2 units",
                        inventTable.NameAlias, salesLine.SalesQty));
        }
    }
}

// Embedded SQL — X++'s distinctive feature
while select sum(LineAmount) from salesLine
    group by CustAccount
    where salesLine.ShippingDateRequested >= startDate
{
    total += salesLine.LineAmount;
}

Key X++ concepts

Concept Meaning
Table Both the DB table and a class with methods (find, exist, validateWrite)
Form The UI, with data sources bound to tables
Data entity The integration/import-export surface — OData and DMF both use them
Class extension [ExtensionOf] — extend without overlayering
Chain of Command Wrap a method with next — the modern, upgrade-safe extension pattern
Event handlers Pre/post handlers on methods and table events
AOT Application Object Tree — the metadata repository
Number sequence The framework for document numbering
SysOperation framework Batch jobs with parameters and a UI
Financial dimensions The configurable dimension model (up to 12 active on the ledger)

Overlayering is dead. In Dynamics 365 you cannot modify Microsoft’s code; you extend it with Chain of Command and event handlers. This is the “clean core” doctrine, enforced by the platform rather than by policy.

Development environment

  • Visual Studio with the D365 F&O developer tools
  • A development VM (cloud-hosted or local VHD) per developer
  • Azure DevOps for source control and build pipelines
  • LCS (Lifecycle Services) for environment management and deployment packages

Data management

  • DMF (Data Management Framework) — import/export via data entities, with data projects and staging tables
  • Data entities are also the OData surface, so one definition serves both
  • BYOD (Bring Your Own Database) — export to your own SQL for reporting (being superseded by Synapse Link / Fabric)

Dynamics 365 Business Central

AL

A modern, purpose-built language with excellent tooling — VS Code with the AL extension, IntelliSense, a real debugger, and fast compile.

tableextension 50100 "Customer Ext" extends Customer
{
    fields
    {
        field(50100; "Credit Risk Score"; Integer)
        {
            Caption = 'Credit Risk Score';
            MinValue = 0;
            MaxValue = 100;
            DataClassification = CustomerContent;
        }
    }
}

codeunit 50100 "Credit Check Mgt"
{
    [EventSubscriber(ObjectType::Table, Database::"Sales Header",
                     'OnAfterValidateEvent', 'Sell-to Customer No.', false, false)]
    local procedure OnValidateCustomer(var Rec: Record "Sales Header")
    var
        Cust: Record Customer;
    begin
        if not Cust.Get(Rec."Sell-to Customer No.") then
            exit;
        if Cust."Credit Risk Score" > 70 then
            Message('Warning: %1 has a high credit risk score (%2).',
                    Cust.Name, Cust."Credit Risk Score");
    end;
}

Key AL concepts

Object type Purpose
Table / Table extension Data
Page / Page extension UI
Codeunit Business logic
Report Printed output and processing-only reports
Query Read-optimised joins
XMLport File import/export
Enum / Enum extension Typed option values
Interface Polymorphism (a genuinely good recent addition)
Permission set Security

Extension model

Everything is an extension (an “app”), installed on top of the base application. No source modification is possible in the cloud. Extensions are published to AppSource or installed per tenant.

Event subscribers are the primary hook: publishers (OnBefore/OnAfter events) exist throughout the base app, and your code subscribes.

Business Central’s superpower

Fast to build in. A competent AL developer can ship a working customisation in hours. The dev loop — edit, F5, debug in the browser — is genuinely good, and better than most enterprise platforms.


The Power Platform

Shared across all Dynamics 365 products and available standalone.

Component Purpose
Dataverse The data platform (formerly CDS) — tables, relationships, security
Power Apps Canvas apps (pixel-perfect) and model-driven apps (data-driven)
Power Automate Workflow and integration flows
Power BI Analytics — the dominant BI tool in this ecosystem
Power Pages External-facing portals
Copilot Studio Conversational agents
AI Builder Prebuilt AI (form processing, prediction)

This is the side-by-side extension platform for Dynamics. Build a mobile approval app in Power Apps, a workflow in Power Automate, reporting in Power BI, without touching the ERP code.

The governance caveat: unmanaged citizen development creates a sprawl of business-critical apps with no owner, no source control, and no testing. Establish an environment strategy, ALM via solutions, and an app inventory early.


Learning path

For Business Central

1. Free sandbox (a Docker container or a cloud trial)
2. AL basics + VS Code tooling             (2 weeks)
3. The base application data model         (1 month)
4. Table/page extensions, event subscribers (1 month)
5. Reports, XMLports, APIs                 (1 month)
6. AppSource requirements and ALM          (2 weeks)

2–4 months to productive with a .NET background. The fastest enterprise ERP to learn.

For F&O

1. Development VM setup + Visual Studio tools
2. X++ language and the AOT                 (1 month)
3. Tables, forms, data entities             (1 month)
4. Chain of Command and event handlers      (1 month)
5. Batch jobs (SysOperation), number sequences, financial dimensions
6. DMF, integration, LCS and deployment

6–9 months to productive.

Resources

  • Microsoft Learn — genuinely excellent, free, and the official path
  • AL Language docs and the BC base application source (readable on GitHub)
  • Docker images for local BC development
  • Dynamics Community forums
  • Directions EMEA / NA — the BC partner conferences
  • Certifications: MB-800 (BC Functional Consultant), MB-500 (F&O Developer), MB-300/310/330 (F&O functional), PL-400 (Power Platform Developer)

Reality check

Pros: familiar tooling for .NET developers, excellent free documentation, huge mid-market demand via a large partner channel, strong Azure and Power Platform integration, and a fast ramp.

Cons: two unrelated products under one brand, F&O has a steep data model, licensing is complex, and rates are generally below SAP’s.

The partner channel is the job market. Most Dynamics work happens at VARs and Microsoft partners rather than at end customers.

Next