Custom Telemetry Events in Business Central AL Extensions

If you’re building a Business Central extension, you probably already benefit from the built-in telemetry that the platform sends to Azure Application Insights—long running AL methods, long running operations (SQL), web service calls, report generation times, and more. But what about the things that are specific to your extension? Maybe you need to know when a critical integration call fails, how often users trigger a particular workflow, or which branch of a complex calculation is being hit in production.

Sample Card Page

That’s where custom telemetry events come in. With a single LogMessage call in your AL code, you can send your own trace signals to Azure Application Insights, giving you visibility into exactly what your extension is doing in the real world. This article walks through how it works, when to use it, and the recommended approach that will save you headaches down the road.

You can find the full code for the example on GitHub.

Telemetry vs. Traditional Event Logging

Before exploring the how, it’s worth understanding the distinction. Traditional event logging—like writing to the Windows event log on a Business Central Server instance—focuses on infrastructure: server errors, deployment issues, performance counters. Telemetry is different. It’s about collecting data on what users are doing inside the application and how your code is behaving in production environments.

Azure Application Insights is the recommended destination for telemetry in Business Central. It works for both online and on-premises deployments, and it gives you powerful querying capabilities through Kusto Query Language (KQL) as well as some other community driven tools such as Waldo’s BC Telemetry Buddy.

Where Telemetry Gets Sent

When you emit a custom telemetry event from your extension, there are two possible destinations:

  • Extension publisher’s Application Insights — the Azure Application Insights resource configured in your extension’s app.json file.
  • Environment Application Insights — the resource configured by the admin on the Business Central environment itself.

You control which destination receives your events through the TelemetryScope parameter:

  • TelemetryScope::ExtensionPublisher — sends the event only to the Application Insights resource defined in your extension’s app.json.
  • TelemetryScope::All — sends the event to both the extension’s resource and the environment’s resource.

This scoping is useful. If you’re an ISV, you might want some internal diagnostics to stay in your own Application Insights resource (ExtensionPublisher), while other events—like feature usage or error conditions that an admin should know about—go to both destinations (All).

It’s worth noting that having an Application Insights resource configured in your app.json is not required to use custom telemetry. If you only use TelemetryScope::All, the events will be sent to the environment’s resource (if one is configured).

The LogMessage Method

The core of custom telemetry is Session.LogMessage. There are two overloads—one that accepts a Dictionary of custom dimensions, and one that lets you pass dimension name/value pairs directly as parameters.

Dictionary overload:

Session.LogMessage(
    EventId: String,
    Message: String,
    Verbosity: Verbosity,
    DataClassification: DataClassification,
    TelemetryScope: TelemetryScope,
    CustomDimensions: Dictionary of [Text, Text]
)

Dimension overload (up to two dimensions):

Session.LogMessage(
    EventId: String,
    Message: String,
    Verbosity: Verbosity,
    DataClassification: DataClassification,
    TelemetryScope: TelemetryScope,
    Dimension1: String, Value1: String
    [, Dimension2: String] [, Value2: String]
)

Both methods can be called from any AL object—Codeunits, pages, reports, triggers, or methods. Let’s break down the parameters.

Understanding the Parameters

ParameterPurpose
EventIdA text identifier for the event (e.g., MYEXT-0001). Use a prefix unique to your extension. Note: Business Central automatically prefixes your custom EventId with al
MessageA descriptive message for the trace signal.
VerbositySeverity level: Critical, Error, Warning, Normal, or Verbose.
DataClassificationMust be SystemMetadata for events to be sent to Application Insights.
TelemetryScopeControls the destination: ExtensionPublisher or All.
CustomDimensionsA Dictionary of [Text, Text] with your custom key/value pairs.

A couple of these deserve extra emphasis:

  • DataClassification: For privacy reasons, only events with DataClassification::SystemMetadata are sent to Azure Application Insights. If you use any other classification, the event won’t be transmitted. This is by design—it prevents customer data from accidentally leaking into telemetry resources.
  • Verbosity: For on-premises deployments, the Diagnostic Trace Level setting on the Business Central Server instance controls which severity levels are sent. If the trace level is set to Warning, then Normal and Verbose signals won’t reach Application Insights.

A Practical Example

Let’s say your extension integrates with an external API and you want to log both successful calls and failures. Here’s how you might structure that:

Azure AppInsights displaying Telemetry events

codeunit 50100 "DVLPR API Integration"
{
    procedure CallExternalApi(Endpoint: Text): Boolean
    var
        Client: HttpClient;
        Response: HttpResponseMessage;
        Dimensions: Dictionary of [Text, Text];
        Success: Boolean;
    begin
        Success := Client.Get(Endpoint, Response);

        Dimensions.Add('Endpoint', Endpoint);
        Dimensions.Add('HttpStatusCode', Format(Response.HttpStatusCode()));
        Dimensions.Add('Success', Format(Success and Response.IsSuccessStatusCode()));

        if Success and Response.IsSuccessStatusCode() then begin
            LogMessage(
                'DVLPR-1001',
                'External API called successfully',
                Verbosity::Normal,
                DataClassification::SystemMetadata,
                TelemetryScope::ExtensionPublisher,
                Dimensions
            );
            exit(true);
        end;

        LogMessage(
            'DVLPR-1002',
            'External API call failed',
            Verbosity::Error,
            DataClassification::SystemMetadata,
            TelemetryScope::All,
            Dimensions
        );
        exit(false);
    end;
}

A few things to notice:

  • The success event uses TelemetryScope::ExtensionPublisher because it’s routine operational data the ISV cares about.
  • The failure event uses TelemetryScope::All because the environment admin might also want to know about failures.
  • Each event has a unique EventId (DVLPR-1001 and DVLPR-1002), which makes it easy to find specific events in Application Insights.
  • The Endpoint dimension is included in both calls so you can filter and group by endpoint in KQL queries.

Azure AppInsights displaying Telemetry events

For simpler scenarios, you can skip the dictionary and use the dimension overload:

LogMessage(
    'DVLPR-2001',
    'Order import completed',
    Verbosity::Normal,
    DataClassification::SystemMetadata,
    TelemetryScope::ExtensionPublisher,
    'OrderCount', Format(OrderCount),
    'DurationMs', Format(Duration)
);

This is convenient when you only need one or two dimensions.

What Shows Up in Application Insights

When your event arrives in Azure Application Insights, it lands in the traces table. The Message and Verbosity appear as general dimensions. Everything else appears as custom dimensions.

One important detail: Similar to EventIds, Business Central automatically prefixes your custom dimension keys with al. So if you define a dimension called OrderCount in your AL code, it appears as alOrderCount in Application Insights. Because of this, use PascalCasing for your dimension names—OrderCount, not order_count or order count. This keeps your custom dimensions consistent with how built-in Business Central telemetry dimensions are named.

You also get a set of default dimensions for free on every event, including:

  • alObjectId / alObjectName / alObjectType — which object emitted the event.
  • extensionName / extensionId / extensionVersion — which extension the event came from.
  • environmentName / environmentType — which environment it happened in.
  • companyName — which company was active.
  • clientType — what type of client triggered the code (Web, Background, API, etc.).

These built-in dimensions are incredibly useful for filtering. You don’t need to add them yourself.

Recommended Approach

The Business Central team treats telemetry event definitions as an API—and you should too. Here are the key practices to follow:

  • Use unique EventIds. Every LogMessage call in your code should have a distinct EventId. This makes it trivial to pinpoint where in the code a particular event was emitted. Use a prefix unique to your extension (e.g., DVLPR-, CONTOSO-).
  • Follow the “Object ActionInPastTense” pattern for messages. Instead of "Calling API", write "External API called" or "Order import completed". This reads naturally in a KQL query ordered by timestamp. Consider including key dimension values in the message itself so you can scan events without opening custom dimensions every time.
  • Don’t use spaces in dimension names. Spaces make KQL queries harder to write. Stick to PascalCase: OrderCount, not Order Count.
  • Treat dimension changes as breaking changes. Once your extension is in production and people have built alerts or Power BI reports on your telemetry, renaming or removing a dimension will break their work. Add new dimensions freely, but be cautious about changing existing ones.
  • Keep DataClassification as SystemMetadata. Events with any other classification won’t be sent. Review your LogMessage calls to make sure you’re not accidentally including personal or customer data in dimension values.
  • Make events actionable. Before adding a telemetry event, ask yourself: “What can someone do with this information?” If the answer isn’t clear, reconsider whether the event is worth adding.
  • Don’t over-instrument. Telemetry costs money (Application Insights charges by data volume) and adds overhead. Focus on events that provide diagnostic or usage value. High-frequency loops are not good candidates for telemetry.

Feature Telemetry Module

It’s worth mentioning the Feature Telemetry module from the System Application. This module provides a higher-level abstraction over Session.LogMessage and is particularly useful for tracking feature usage. Instead of calling LogMessage directly, you call FeatureTelemetry.LogUsage or FeatureTelemetry.LogError, and the module handles the event structure for you.

If your primary goal is tracking which features in your extension are being used (and which aren’t), the Feature Telemetry module is often a better fit than raw LogMessage calls. You can learn more about it in the Microsoft documentation on Using Feature telemetry.

Wrapping Up

Custom telemetry events give you a direct window into how your extension behaves in production. With LogMessage, you can emit targeted signals from anywhere in your AL code, control where those signals land through telemetry scoping, and attach rich custom dimensions that make analysis in Application Insights straightforward.

The investment is minimal—a handful of well-placed LogMessage calls—but the payoff is significant. You get real production diagnostics, usage patterns, and error tracking without needing access to the customer’s environment. Start with your most critical code paths (integrations, complex calculations, error handlers) and expand from there.

Learn more:

Note: The code and information discussed in this article are for informational and demonstration purposes only. This content was written referencing Microsoft Dynamics 365 Business Central 2025 Wave 2 online. Custom telemetry events via LogMessage are available from Business Central 2020 release wave 2 and later. Always test in a sandbox first.

Permanent link to this article: https://www.dvlprlife.com/2026/02/custom-telemetry-events-in-business-central-al-extensions/

Weekly Review: Business Central AL Development – February 8–14, 2026

Highlighting posts and resources from the Business Central development community — February 8–14, 2026

Looking to stay current with Dynamics 365 Business Central AL development? Here’s a curated list of recent blog posts, tutorials, and community resources from the past week.


Recent Posts (February 8–14, 2026)

➡️ 1. Rec.Truncate in AL

📇 Author: Duilio Tacconi
🗓️ Date: February 10, 2026
🌎 Link: duiliotacconi.com
📝 Summary: Duilio provides a detailed look into the new Rec.Truncate() AL statement introduced in BC27. The post explains the difference between SQL TRUNCATE TABLE and row-by-row DeleteAll(), lists all constraints (system tables, Media fields, event subscribers, and more), and provides a demo app with lab benchmarks showing truncate is advantageous when deleting 50% or more of a table’s content.


➡️ 2. CentralGauge Benchmark Update: Why the Numbers Changed

📇 Author: SShadowS
🗓️ Date: February 10, 2026
🌎 Link: blog.sshadows.dk
📝 Summary: SShadowS publishes updated CentralGauge benchmark results for 8 LLMs on AL code generation after fixing infrastructure bugs — corrupted code extraction, broken test harnesses, and vague task specifications. The revised rankings across 56 tasks show Claude Opus 4.6 leading at 76.2% pass@1 with 98.2% consistency, followed by Opus 4.5 at 75.0% and GPT-5.2 at 64.3%. Next up: Agent benchmarks running models in Docker containers with access to the AL compiler and test runner.


➡️ 3. Agents in Business Central – Part 1 – The Architecture

📇 Author: Bert Verbeek
🌎 Link: bertverbeek.nl
📝 Summary: Bert kicks off a series on building custom agents in Business Central 27.4 (public preview). Part 1 covers the core architecture — the Agent Task Builder and Agent Task codeunits, asynchronous orchestration on separate sessions, parallel task execution, incoming and outgoing message handling, and the required permissions (AGENT – ADMIN, AGENT – DIAGNOSTICS).


➡️ 4. How We Built an AI Agent to Qualify Leads in Business Central

📇 Author: Javi Armesto
🗓️ Date: February 13, 2026
🌎 Link: techspheredynamics.com
📝 Summary: Javi walks through building a Lead Qualification Agent using the BC Agent SDK. The extension evaluates leads across four dimensions (sector fit, budget viability, product match, company size), assigns a weighted score, and — when the lead scores Hot or Warm — automatically hands off to a Quote Builder Agent via a public API. The post covers the three-interface architecture (IAgentFactory, IAgentMetadata, IAgentTaskExecution), a three-layer security model, and human intervention patterns.


➡️ 5. Dynamics 365 Business Central: BCMCPProxy vNext

📇 Author: Stefano Demiliani
🌎 Link: demiliani.com
📝 Summary: Stefano rewrote Microsoft’s open-source BCMCPProxy .NET project for full cross-platform support on Windows and macOS. The new version upgrades to .NET 10 and C# 13, adds device code flow authentication and secure token caching, and benchmarks 40–67% performance improvements over the original. It works with Claude Desktop, Cursor, and other MCP-compatible clients, with a PR submitted to Microsoft’s BCTech repo.


➡️ 6. Fixed Asset Accounting from a Prompt: Claude MCP Meets Business Central

📇 Author: Silviu Virlan
🌎 Link: svirlan.com
📝 Summary: Silviu demonstrates managing an entire fixed asset lifecycle — acquisitions, depreciation, and disposals with automatic gain/loss calculation — using Claude Code connected to Business Central via MCP. The detailed walkthrough covers OData V4 web service setup, CSV-driven bulk asset onboarding, and multi-step API patterns for the workflowGenJournalLines and FADepBooks endpoints, with key lessons on where the standard API v2.0 falls short for FA transactions.


➡️ 7. Adding Notes to Financial Report Lines

📇 Author: Gerardo Rentería
🌎 Link: gerardorenteria.blog
📝 Summary: Gerardo builds an AL extension that adds line-level notes to financial reports (Account Schedules) in Business Central. The solution includes a FactBox on the Overview matrix, indexed footnotes in printed reports with a synchronized “Notes to Financial Statements” section, and a direct Excel export — all backed by a full open-source GitHub project with table extensions, page extensions, and RDLC layouts.


Community Resources

Official Resources

GitHub Repositories

  • microsoft/BCApps – Repository for collaboration on Microsoft Dynamics 365 Business Central applications.
  • microsoft/BCTech – Business Central technology samples.
  • microsoft/ALAppExtensions – Repository for collaboration on Microsoft AL application add-on and localization extensions for Microsoft Dynamics 365 Business Central.
  • microsoft/AL – Home of the Dynamics 365 Business Central AL Language extension for Visual Studio Code.
  • StefanMaron/MSDyn365BC.Code.History – Contains the Microsoft Business Central Code. Updated each month.

Follow on Social Media


Stay Connected

The Business Central AL development community stays active with valuable content on AL development, upgrades, integrations, and tooling improvements. Following #MSDyn365BC and #BusinessCentral on Twitter/X is a great way to catch new posts as they’re published.


Note: This review is compiled from publicly available blog posts and community resources. Links to external blog posts are provided for your information only and do not constitute endorsement or validation of their content. Publication information and availability are subject to change. Always verify information against official documentation for production use.

Permanent link to this article: https://www.dvlprlife.com/2026/02/weekly-review-business-central-al-development-february-8-14-2026/

Interfaces in Business Central (AL)

If you’ve ever worked on a Business Central extension that needs to support multiple “flavors” of the same operation—different shipping providers, different document formats, different pricing strategies—you’ve probably felt the pain of tightly coupled code. Interfaces in AL solve that problem by letting you define a contract (a set of methods) and then swap implementations without touching the calling code.

Interfaces were introduced in Business Central 2020 release wave 1 and have quickly become an important pattern for building extensible, maintainable AL solutions. If you haven’t used them yet, this article walks through what they are, why they matter, and how to build with them.

You can find the full code for the example on GitHub.

Customer Card showing enum strategy

What Is an Interface?

An interface is a named object that declares one or more procedure signatures—but contains no implementation. It defines what a Codeunit must do, not how it does it.

interface IDocumentValidator
{
    procedure Validate(var RecRef: RecordRef): Boolean;
}

Any Codeunit that claims to implement IDocumentValidator must provide a concrete body for Validate. The AL compiler enforces this at build time—if a method is missing, you get an error.

Key characteristics:

  • An interface contains only procedure declarations (no variables, no triggers, no logic).
  • It cannot be instantiated or called directly.
  • It acts as a contract between the code that calls a behavior and the code that provides it.

Why You Should Care

  • Loose coupling: Your calling code depends on the interface, not on a specific Codeunit. You can swap implementations without modifying callers.
  • Extensibility without events: Partners and ISVs can add new behavior by implementing the interface and extending the enum—no event subscriptions needed.
  • Polymorphism: You can declare a variable as an interface type and call methods on it. At runtime, the actual implementation executes based on which Codeunit was selected.
  • Testability: You can create a “mock” Codeunit that implements the interface for testing purposes.

How It Works: The Three-Part Pattern

Interfaces in AL rely on three cooperating objects:

  1. The interface – declares the method signatures.
  2. One or more Codeunits – each implements the interface with concrete logic.
  3. An enum – ties enum values to specific implementations.

This trio is the standard pattern. The enum is the dispatch mechanism. When you assign an enum value, Business Central knows which Codeunit to run.

Example: A Discount Calculator

Let’s say you want to support multiple discount strategies. Start with the interface:

interface IDiscountCalculator
{
    procedure CalculateDiscount(var SalesLine: Record "Sales Line"): Decimal;
}

Then create two implementations:

Codeunit 50100 "DVLPR Standard Discount" implements IDiscountCalculator
{
    procedure CalculateDiscount(var SalesLine: Record "Sales Line"): Decimal
    begin
        exit(SalesLine."Line Amount" * 0.05); // flat 5%
    end;
}

Codeunit 50101 "DVLPR Volume Discount" implements IDiscountCalculator
{
    procedure CalculateDiscount(var SalesLine: Record "Sales Line"): Decimal
    begin
        if SalesLine.Quantity >= 100 then
            exit(SalesLine."Line Amount" * 0.15)
        else
            exit(SalesLine."Line Amount" * 0.05);
    end;
}

Wire them up through an enum:

enum 50160 "DVLPR Discount Strategy" implements IDiscountCalculator
{
    Extensible = true;

    value(0; Standard)
    {
        Implementation = IDiscountCalculator = "DVLPR Standard Discount";
    }
    value(1; Volume)
    {
        Implementation = IDiscountCalculator = "DVLPR Volume Discount";
    }
}

Now your calling code never needs to know which strategy is active:

procedure ApplyDiscount(Strategy: Enum "DVLPR Discount Strategy"; var SalesLine: Record "Sales Line")
var
    Calculator: Interface IDiscountCalculator;
begin
    Calculator := Strategy;
    SalesLine."Line Discount Amount" := Calculator.CalculateDiscount(SalesLine);
end;

If a partner wants to add a “Loyalty” discount strategy later, they just create a new Codeunit that implements IDiscountCalculator, add an enumextension value, and they’re done. No modifications to your calling code.

Using Existing Interfaces in Business Central

Microsoft already ships several interfaces in the base application and system application. A practical way to get comfortable with interfaces is to implement one that already exists.

Screenshot showing Implement Interface

For example, the E-Document module defines an E-Document interface. To use it:

  1. Find the interface: Use the AL Explorer in VS Code to browse available interfaces.
  2. Create a Codeunit that implements the interface.
  3. Use the “Implement Interface” quick action in VS Code—hover over the interface name and let the tooling generate empty stubs for all required methods.
  4. Extend the corresponding enum with your new value and implementation mapping.

This is a great way to learn the pattern because the plumbing is already in place—you just supply the logic.

Snippet Support

VS Code has a built-in snippet for interfaces. Type tinterface in an AL file and the AL Language extension generates the basic structure for you. This is a quick way to scaffold a new interface and avoid syntax mistakes.

Implementing Multiple Interfaces

A single Codeunit can implement more than one interface:

Codeunit 50164 "DVLPR Multi Provider" implements IDiscountCalculator, IShippingProvider
{
    procedure CalculateDiscount(var SalesLine: Record "Sales Line"): Decimal
    begin
        // discount logic
    end;

    procedure GetShippingRate(Length: Decimal; Width: Decimal; Height: Decimal; Weight: Decimal): Decimal
    begin
        // shipping logic
    end;
}

Be careful with method name collisions. If two interfaces define a method with the same name and signature, the compiler expects a single implementation to satisfy both. If the signatures differ, you’ll get a compile error. The analyzer rules AL0587 and AL0675 help catch these situations.

Type Testing and Casting

Business Central supports type testing and casting operators for interface variables, which allows you to check at runtime whether an interface variable holds a specific implementation:

var
    Calculator: Interface IDiscountCalculator;
begin
    if Calculator is "DVLPR Volume Discount" then
        Message('Volume discount is active');
end;

This is useful when you need conditional logic based on the underlying implementation, though use it sparingly—heavy use of is checks can undermine the polymorphism that interfaces are meant to provide.

Lists and Dictionaries of Interfaces

Starting with Business Central 2025 release wave 1 (runtime 15.0), you can create List and Dictionary collections of interface types:

var    
    MyCircle: Codeunit Circle;
    MySquare: Codeunit Square;
    Shape: Interface IShape;
    Shapes: List of [Interface IShape];    
begin
    Shapes.Add(MyCircle);
    Shapes.Add(MySquare);

    foreach Shape in Shapes do
        Message('Area: %1', Shape.GetArea());
end;

This opens up patterns like maintaining a registry of handlers or processing a collection of implementations in sequence.

Extending Interfaces

Starting with Business Central 2024 release wave 2, interfaces support the extends keyword. This lets you create a new interface that inherits all methods from one or more existing interfaces and adds its own on top. It’s particularly useful for ISVs and partners who want to build on each other’s interfaces without modifying the originals.

The syntax looks like this:

interface IExtendedInterface extends IBaseInterface
{
    procedure AdditionalMethod();
}

Any Codeunit that implements the extended interface must provide concrete implementations for all methods—both those defined in the base interface(s) and any new methods declared in the extension.

A good real-world example is the "Price Calculation" interface in the base application. This interface is the backbone of the extensible pricing system in Business Central. It declares methods like Init, ApplyDiscount, ApplyPrice, GetLine, and others that a pricing handler must implement. The "Price Calculation Handler" enum maps each value to a Codeunit that implements the interface, which is how Business Central decides which pricing engine runs at runtime.

If you needed to extend this pattern—say you wanted a pricing handler that also supports contract-specific pricing—you could define a new interface that extends the original:

interface IContractPriceCalculation extends "Price Calculation"
{
    procedure SetContractNo(ContractNo: Code[20]);
    procedure GetContractDiscount(): Decimal;
}

A Codeunit implementing IContractPriceCalculation would need to provide all the methods from "Price Calculation" plus the two new ones. This means existing code that works with "Price Calculation" continues to work unchanged, while new code can take advantage of the extended contract.

You can also extend multiple interfaces at once:

interface ICombined extends IFirst, ISecond
{
    procedure CombinedMethod();
}

Codeunit 50160 DVLPRCombines implements ICombined
{
    // Must implement IFirst, ISecond, ICombined 
}

Gotchas and Recommended Approach

  • Don’t add methods to published interfaces. Once your interface is in production, adding a method breaks every existing implementation. The AppSourceCop rule AS0066 catches this. Use interface extensions (BC 2024 wave 2+) or versioning instead.
  • Keep interfaces small and focused. A few related methods per interface is better than one giant interface that tries to cover everything.
  • Use meaningful names. Prefix with I (like IAddressProvider) to make interface types immediately recognizable.
  • Be aware of circular references. Interfaces, enums, and implementing Codeunits can create circular dependency chains. Rule AL0852 flags this.
  • Avoid naming conflicts with built-in procedures. Rule AL0616 catches this, but it’s easy to trip over.
  • Document expected behavior. The interface definition alone tells the compiler what methods exist, but not how they should behave. Use XML documentation comments or a companion doc to describe expectations (pre/post conditions, expected error handling, etc.).
  • Set Extensible = true on enums when you want partners to add implementations via enum extensions.

Wrapping Up

Interfaces are a powerful pattern available in AL today. They let you design systems where behavior can be extended and swapped without modifying existing code—a core requirement for any healthy extension ecosystem.

The pattern is straightforward: define an interface, implement it in Codeunits, wire it through an enum, and call it polymorphically. Once you see it in action, you’ll find yourself reaching for it any time you need pluggable behavior.

Learn more:

You can find the full code for the example on GitHub.

Note: The code and information discussed in this article are for informational and demonstration purposes only. This content was written referencing Microsoft Dynamics 365 Business Central 2025 Wave 2 online. Interfaces are available from Business Central 2020 release wave 1 and later. Always test in a sandbox first.

Permanent link to this article: https://www.dvlprlife.com/2026/02/interfaces-in-business-central-al/

February 2026 Cumulative Updates for Dynamics 365 Business Central

The February updates for Microsoft Dynamics 365 Business Central are now available.

Before applying the updates, you should confirm that your implementation is ready for the upgrade and ensure compatibility with your modifications. Work with a Microsoft Partner to determine if you are ready and what is needed for you to apply the update.

Please note that Online customers will automatically be upgraded to version 27.4 over the coming days/weeks and should receive an email notification when upgraded.

Direct links to the cumulative updates are listed here:

Dynamics 365 Business Central On-Premises 2025 Release Wave 2 – 27.4 (February 2026)

Dynamics 365 Business Central On-Premises 2025 Release Wave 1 – 26.10 (February 2026)

Dynamics 365 Business Central On-Premises 2024 Release Wave 2 – 25.16 (February 2026)

Dynamics 365 Business Central On-Premises 2024 Release Wave 1 – 24.18 (October 2025)

 


If you’re looking for information on older updates, review the list here.

Permanent link to this article: https://www.dvlprlife.com/2026/02/february-2026-cumulative-updates-for-dynamics-365-business-central/

Weekly Review: Business Central AL Development – February 1–7, 2026

Highlighting posts and resources from the Business Central development community — February 1–7, 2026

Looking to stay current with Dynamics 365 Business Central AL development? Here’s a curated list of recent blog posts, tutorials, and community resources from the past week.


Recent Posts (February 1–7, 2026)

➡️ 1. Birthday Message Wall (Enhancing Business Central’s HR)

📇 Author: Gerardo Rentería
🗓️ Date: February 1, 2026
🌎 Link: gerardorenteria.blog
📝 Summary: Gerardo builds a creative Birthday Message Wall extension that enhances Business Central’s HR module. The project demonstrates how to extend the Employee card with a celebratory wall where colleagues can leave birthday messages, showcasing practical AL development with a fun twist.


➡️ 2. AL Object ID Ninja MCP Server Is Here

📇 Author: Vjeko
🗓️ Date: February 2, 2026
🌎 Link: vjeko.com
📝 Summary: The official MCP Server for AL Object ID Ninja is now available on npm, bringing Ninja’s object ID management to agentic coding tools like Cursor, Claude Code, and Windsurf. While VS Code users are already covered by the built-in Ninja extension, this MCP server lets AI coding assistants on other platforms request, commit, and unassign object IDs through the Ninja 3.0 platform.


➡️ 3. New AL Tools Available for Agents in AL Language v17.0

📇 Author: Stefan Šošić
🗓️ Date: February 2, 2026
🌎 Link: ssosic.com
📝 Summary: Stefan covers the new agent-facing tools introduced in AL Language v17.0, giving AI agents direct access to AL development capabilities within VS Code. The post details the fresh set of tools that enhance agentic workflows for Business Central extension development.


➡️ 4. Weekend Project: Teaching AI to Talk to Business Central

📇 Author: Silviu Virlan
🗓️ Date: February 3, 2026
🌎 Link: svirlan.com
📝 Summary: Silviu documents his weekend project connecting Claude to Dynamics 365 Business Central using the Model Context Protocol (MCP). The walkthrough covers Azure AD app registration, enabling BC’s native MCP endpoint, and building a Python MCP server — complete with working examples of querying vendor balances and creating sales quotes through natural language.


➡️ 5. How to Run a Report in Preview Mode Without the Request Page

📇 Author: Yun Zhu
🗓️ Date: February 5, 2026
🌎 Link: yzhums.com
📝 Summary: Yun demonstrates how to preview a Business Central report directly without showing the Request Page — a common developer need that previously forced a download instead. The solution leverages BC26’s File.ViewFromStream method to save the report as a PDF and display it in the web client’s built-in PDF viewer, with full AL code examples for both report-selection-based and fixed-report approaches.


➡️ 6. Why Do All My Tests Show Up Twice in the Test Explorer?

📇 Author: James Pearson
🗓️ Date: February 5, 2026
🌎 Link: jpearson.blog
📝 Summary: James explains the duplicate-test mystery: The AL Language pre-release extension now discovers tests and puts them into VS Code’s Test Explorer alongside AL Test Runner, creating two entries per test. A bug in the AL Language extension against pre-BC28 containers can leave test runs stuck indefinitely, which is particularly problematic when AI agents attempt to run tests during code generation.


➡️ 7. Monitoring Your Customer’s Network Speed from Telemetry

📇 Author: Stefano Demiliani
🗓️ Date: February 6, 2026
🌎 Link: demiliani.com
📝 Summary: Stefano explores the new customDimensions.deviceHardware node recently added to Business Central’s page views telemetry, which exposes client-side metrics including CPU cores, device memory, network bandwidth, and round-trip time. The post includes ready-to-use KQL queries for charting average bandwidth over time, correlating network speed with page duration, and building normalized comparison dashboards.


Community Resources

Official Resources

GitHub Repositories

  • microsoft/BCApps – Repository for collaboration on Microsoft Dynamics 365 Business Central applications.
  • microsoft/BCTech – Business Central technology samples.
  • microsoft/ALAppExtensions – Repository for collaboration on Microsoft AL application add-on and localization extensions for Microsoft Dynamics 365 Business Central.
  • microsoft/AL – Home of the Dynamics 365 Business Central AL Language extension for Visual Studio Code.
  • StefanMaron/MSDyn365BC.Code.History – Contains the Microsoft Business Central Code. Updated each month.

Follow on Social Media


Stay Connected

The Business Central AL development community stays active with valuable content on AL development, upgrades, integrations, and tooling improvements. Following #MSDyn365BC and #BusinessCentral on Twitter/X is a great way to catch new posts as they’re published.


Note: This review is compiled from publicly available blog posts and community resources. Links to external blog posts are provided for your information only and do not constitute endorsement or validation of their content. Publication information and availability are subject to change. Always verify information against official documentation for production use.

Permanent link to this article: https://www.dvlprlife.com/2026/02/weekly-review-business-central-al-development-february-1-7-2026/

Quick Tips: Understanding Business Central Localizations

Welcome to Quick Tips — a fast, focused series designed to help you work smarter.

Each post will give you one practical insight you can apply immediately, whether you’re coding, configuring your tools, or improving your workflow.

Here’s today’s Quick Tip:

What Are Localizations?

Dynamics 365 Business Central is available in over 240 countries and regions, but not every localization is built the same way. Understanding how localizations work helps you build extensions that play nicely across geographies and avoid surprises when deploying to new markets.

There are two types of localizations:

  • Microsoft localizations — Microsoft provides the localized BaseApp for about 24 countries like the United States, Canada, Germany, France, Australia, Italy, the UK, and others.
  • Partner localizations — For the remaining 200+ countries, partners build localization apps primarily on top of the international version (known as W1) and publish them on AppSource.

You can learn more about Dynamics 365 Business Central local functionality here.

Why It Matters

When you create a new environment, the country/region you select determines two things:

  • Which BaseApp version you get — A Microsoft localization (like US for United States or DE for Germany) includes country-specific tax, reporting, and compliance features baked in. A W1-based environment relies on partner apps from AppSource for those features.
  • Where your data lives — The environment localization determines the Azure geography your database is deployed to. For example, a Canadian environment deploys to the Canada region, while a South African environment deploys to the South Africa region. Visit the Azure Region List for more information on where each country/region is hosted.

Key Things to Know

  • Some localizations have migrated to W1. Iceland, Sweden, and the United Kingdom have had their BaseApps migrated to W1 in recent releases.
  • Language ≠ localization. Business Central supports 50+ languages, including Czech, Danish, Dutch, Finnish, French, German, Italian, Japanese, Korean, Spanish, Swedish, and many more. Language apps are installed separately from AppSource; some are provided by Microsoft while others come from partners.
  • English (US) is the only built-in language. Every other language requires installing a language app.

How to Check Availability

  • Visit the Country/regional availability and supported languages page on Microsoft Learn.
  • Look up your target country to see whether it uses a Microsoft or Partner localization and which BaseApp version applies.
  • Check the supported languages table to see if your target language has a Microsoft-provided or partner-provided translation app.

Why It Helps

If you’re building extensions for international customers, knowing the localization landscape keeps you from making assumptions about what’s in the BaseApp. A feature that exists natively in the German localization might need a partner app in Brazil. Planning for W1 compatibility from the start makes your extensions more portable across markets.

Learn more about Country/regional availability and supported languages here.

Got a favorite shortcut or workflow tweak? Share it in the comments and subscribe to dvlprlife.com for more Quick Tips like this one!

Permanent link to this article: https://www.dvlprlife.com/2026/02/quick-tips-understanding-business-central-localizations/

Quick Tips: Install the Business Central Desktop App

Welcome to Quick Tips — a fast, focused series designed to help you work smarter.

Each post will give you one practical insight you can apply immediately, whether you’re coding, configuring your tools, or improving your workflow.

Here’s today’s Quick Tip:

Run Business Central as a Desktop App

Did you know you can install Business Central as a standalone desktop app directly from your browser? No trip to the Microsoft Store required — just a couple of clicks and you’re done.

Business Central open in browser with install icon visible

The desktop app gives you a dedicated window for Business Central, separate from your browser tabs. It’s faster to launch, easier to find in your taskbar, and runs more smoothly without competing for attention with dozens of open tabs.

How to Install from the Browser

  • Open Business Central in Microsoft Edge or Google Chrome.
  • Look for the install icon in the browser’s address bar:
    • Edge: Click the App available icon (a small monitor with a down arrow), then select Install.
    • Chrome: Click the Install Business Central icon, then select Install. Install prompt dialog in Edge or Chrome browser
  • The app installs and opens immediately.

Tip: In Edge, you can also go to Settings and more (the three dots) → AppsInstall this site as an appInstall. Edge Settings menu showing Install this site as an app option

Installing for Multiple Environments

If you work with multiple Business Central environments, you can install the app separately for each one:

  • Navigate to the specific environment you want before installing.
  • Each installed app will open directly to that environment.
  • The environment name appears in the window title and Start menu, making it easy to tell them apart.

Why It Helps

  • Quick access — Launch Business Central from your Start menu or pin it to your taskbar.
  • Cleaner workflow — Keep Business Central in its own window, away from browser clutter.
  • Better performance — The app renders faster and more smoothly than running in a browser tab.
  • Multi-environment support — Install a separate app for each environment you work with.

Learn more about the Business Central Desktop App and Preparing for and installing the Microsoft Dynamics 365 Business Central app.

Got a favorite shortcut or workflow tweak? Share it in the comments and subscribe to dvlprlife.com for more Quick Tips like this one!

Permanent link to this article: https://www.dvlprlife.com/2026/02/quick-tips-install-the-business-central-desktop-app/

Weekly Review: Business Central AL Development – January 25-31, 2026

Highlighting posts and resources from the Business Central development community — January 25–31, 2026

Looking to stay current with Dynamics 365 Business Central AL development? Here’s a curated list of recent blog posts, tutorials, and community resources from the past week.


Recent Posts (January 25–31, 2026)

➡️ 1. Why No. Series Break After Upgrading to Business Central 27 (And How to Fix It)

📇 Author: Saurav Dhyani
🗓️ Date: January 29, 2026
🌎 Link: sauravdhyani.com
📝 Summary: Identifies a breaking change in BC27 where No. Series validation now runs earlier and more strictly than in BC26. The post explains which records are affected, provides the specific code change Microsoft made, and offers a step-by-step fix using setup configuration for impacted environments.


➡️ 2. Understanding the Database Wait Statistics Page

📇 Author: Stefano Demiliani
🗓️ Date: January 28, 2026
🌎 Link: demiliani.com
📝 Summary: A detailed look into the Database Wait Statistics page in Business Central, explaining how to read and interpret Azure SQL wait statistics for performance diagnostics. Includes detailed analysis of real-world data covering Buffer IO, CPU, Lock contention, and Service Broker waits, with actionable investigation priorities.


➡️ 3. When GUIDs Collide: The App ID Problem Nobody Expected

📇 Author: Vjeko
🗓️ Date: January 27, 2026
🌎 Link: vjeko.com
📝 Summary: Explores the surprising problem of duplicate App IDs in Business Central extensions, found across nearly 150 out of 50,000 apps tracked by AL Object ID Ninja. Covers three common scenarios that cause collisions (manual GUIDs, GitHub clones, copy-paste apps) and explains how Ninja v3 now provides collision detection and protection.


➡️ 4. Escape Room App Gone Public!

📇 Author: Waldo
🗓️ Date: January 27, 2026
🌎 Link: waldo.be
📝 Summary: Announces the open-source release of the BCTalent Escape Room framework on GitHub (microsoft/BCTech). The framework lets partners build interactive training experiences, gamified onboarding, and feature adoption modules within Business Central—documentation included so even AI can help you build rooms.


Recent Videos (January 25–31, 2026)

🎬 1. What’s Cooking in Business Central: Delivering Analysis Views in AL extensions

📺 Channel: Microsoft Dynamics 365 Business Central
🗓️ Date: January 28, 2026
🌎 Link: youtube.com
📝 Summary: A video discussing the new option in Business Central 2026 Wave 1. This new feature will allow for the exporting and including of Analysis Views in AL applications.

🎬 2. AL Development using Claude Code – The Business Central Coding Stream

📺 Channel: Stefan Maron
🗓️ Date: January 27, 2026
🌎 Link: youtube.com
📝 Summary: Stefan shares his Claude Code setup and workflow for development in AL for Business Central.


Community Resources

Official Resources

GitHub Repositories

  • microsoft/BCApps – Repository for collaboration on Microsoft Dynamics 365 Business Central applications.
  • microsoft/BCTech – Business Central technology samples.
  • microsoft/ALAppExtensions – Repository for collaboration on Microsoft AL application add-on and localization extensions for Microsoft Dynamics 365 Business Central.
  • microsoft/AL – Home of the Dynamics 365 Business Central AL Language extension for Visual Studio Code.
  • StefanMaron/MSDyn365BC.Code.History – Contains the Microsoft Business Central Code. Updated each month.

Follow on Social Media


Stay Connected

The Business Central AL development community stays active with valuable content on AL development, upgrades, integrations, and tooling improvements. Following #MSDyn365BC and #BusinessCentral on Twitter/X is a great way to catch new posts as they’re published.


Note: This review is compiled from publicly available blog posts and community resources. Links to external blog posts are provided for your information only and do not constitute endorsement or validation of their content. Publication information and availability are subject to change. Always verify information against official documentation for production use.

Permanent link to this article: https://www.dvlprlife.com/2026/02/weekly-review-business-central-al-development-january-25-31-2026/

Enabling API Access in Business Central

Business Central provides a set of REST APIs for integration scenarios. Developers can also create their own APIs for their specific scenarios. Securing these APIs properly is critical for protecting your data. Business Central uses OAuth 2.0 for authentication and authorization when accessing its APIs. This industry-standard protocol ensures that external applications can securely interact with your Business Central environment without exposing user credentials. Instead of using basic authentication, OAuth 2.0 relies on access tokens that grant specific permissions and can be revoked independently.

To set up API access for Business Central, you must configure both Microsoft Entra ID (formerly Azure Active Directory) and Business Central itself to use OAuth 2.0 authentication. This two-part process ensures that only authorized applications can access your data while maintaining security recommended approaches.

Part 1: Configuring Microsoft Entra ID

The first step in enabling API access is registering an application in Microsoft Entra ID. This registration creates a security principle that represents your integration application.

➡️ Register the Application

  1. Navigate to the Azure Portal.
  2. Search for or go to Microsoft Entra ID.
    Microsoft Entra ID
  3. Click on App registrations > New registration.
    App registrations
  4. Provide a meaningful name for your application (for example, “BC API Integration”).
    Registration Name
  5. Select the appropriate supported account types based on your scenario.
    Supported account types
  6. Click the Register button to create the application.

➡️ Configure API Permissions

  1. After registering the application, while on the Registered Application page, navigate to API permissions.
    api permissions
  2. Click Add a permission.
    api permissions
  3. Search for “Dynamics 365 Business Central” and select it. You’ll see two types of permissions:
    Dynamics 365 Business Central
  • Delegated permissions: Your application needs to access the API as the signed-in user (for example, in the case of interactive sign-in scenarios).
  • Application permissions: Used for service-to-service scenarios without a user.
    application permissions
  1. Select application permissions and choose the appropriate permissions based on your integration needs. For most API integration scenarios, you’ll want to add the API.ReadWrite.All application permission. This grants the application access to Business Central APIs without requiring user interaction. If you’d like to grant access to the environment APIs (more on that in another post), add the AdminCenter.ReadWrite.All permission. Note that you may want to create two separate registrations for each permission.
    api permissions
  2. After selecting the desired permissions, click Add permissions at the bottom.
  3. After adding the permission, click Grant admin consent to complete the authorization.

➡️ Configure Application Registration Authentication

  1. From the App Registration page, navigate to Authentication.
    configure authentication
  2. Under Add Redirect URI, click Web under Web applications.
    add redirect uri web
  3. Enter a Redirect URI. For Business Central API access, you can use https://businesscentral.dynamics.com/OAuthLanding.htm or a placeholder URI if you’re not using interactive sign-in.
    add redirect uri
  4. Click Configure to apply the changes.

➡️ Create a Client Secret

  1. For service-to-service authentication, you need to create a client secret or certificate. Navigate to Certificates & secrets > New client secret.
    create client secret
  2. Provide a description and select an expiration period. Plan to rotate the secret before it expires—set a calendar reminder or use Azure Key Vault to manage secret lifecycle and avoid service disruptions.
    add client secret
  3. Click Add to create the client secret.
  4. Important: Make sure to copy the Value immediately, as it will be hidden later and you won’t be able to retrieve it again.
    copy value Make note of these three values from your app registration:
  • Application (client) ID: Found on the app registration overview page
  • Directory (tenant) ID: Also found on the overview page
  • Client secret: The value you just created

Part 2: Configuring Business Central

With Microsoft Entra ID configured, you can now set up Business Central to accept API requests from your registered application.

➡️ Add application registration to Business Central

  1. Log into Business Central.
  2. Search for Microsoft Entra Applications and open the related page.
    Microsoft Entra Applications in Business Central
  3. Click New to add a new Microsoft Entra Application.
    Microsoft Entra Application Card
  4. On the new application card enter:
    • Client ID: The Application (client) ID from your app registration.
    • Description: A friendly name for your reference.
    • State: Set to Enabled Note: When you set the state to enabled, you may be prompted that a new user will be created. Confirm to proceed.
      confirm user creation
  5. Assign the appropriate User Permission Sets to perform the actions your integration requires to the newly created application. Important: Applications cannot be assigned the SUPER permission set. Follow the principle of least privilege and only assign the permissions required for the integration to work.
  6. Click Grant Consent and Accept to finalize the setup.
    grant consent

➡️ Test the API Connection You can test your configuration by making an OAuth 2.0 token request. Here’s an example using PowerShell:

# Get OAuth Token
$scope = "https://api.businesscentral.dynamics.com/.default"

$clientid = "your-client-id-guid" #Application (client) ID from AppRegistration
$clientsecret = "your-client-secret-value" #Your client secret from AppRegistration
$environment = "Production" #Your Business Central environment Name
$tenantID = "your-tenant-id-guid" #Directory (tenant) ID from AppRegistration
$AuthHeader = @{
    'Content-Type' = 'application/x-www-form-urlencoded'
}

$Body = @{
    grant_type='client_credentials'
    client_id=$clientid
    client_secret=$clientsecret
    scope=$scope
}

$Request = Invoke-RestMethod -Method POST -uri "https://login.microsoftonline.com/$($tenantID)/oauth2/v2.0/token" -Headers $AuthHeader -Body $Body
# Build

$Header = @{
    Authorization = "$($Request.token_type) $($Request.access_token)"
}

$Req = $null
$get = $null

# Get a list of APIs
$URL = "https://api.businesscentral.dynamics.com/v2.0/$($tenantid)/$($environment)/api/v2.0/"

$Req = (Invoke-RestMethod -Method Get -Uri $URL -Headers $Header).Value
$URL
$Req

$URL = "https://api.businesscentral.dynamics.com/v2.0/51020b36-8a5a-4dc3-b7d6-59674b8cbc30/RoyaltyCentral/api/littleBridge/dimensions/v2.0/"
$Req = (Invoke-RestMethod -Method Get -Uri $URL -Headers $Header).Value
$URL
$Req

This script authenticates using client credentials and retrieves the list of APIs from your Business Central environment.

Wrapping Up

Enabling API access in Business Central requires coordination between Microsoft Entra ID and Business Central itself. By registering your application in Entra ID and configuring the corresponding user and permissions in Business Central, you create a secure OAuth 2.0 authentication flow. This approach provides better security than legacy authentication methods and aligns with recommended practices for integrations. Remember to regularly rotate your client secrets and follow the principle of least privilege when assigning permissions.


Note: The information in this article is for informational and demonstration purposes only. This content was written with reference to Microsoft Dynamics 365 Business Central 2025 release wave 2 Online and later. Always test in a sandbox first before deploying to production.

Permanent link to this article: https://www.dvlprlife.com/2026/01/enabling-api-access-in-business-central/

Weekly Review: Business Central AL Development – January 18-24, 2026

Highlighting posts and resources from the Business Central development community — January 18–24, 2026

Looking to stay current with Dynamics 365 Business Central AL development? Here’s a curated list of recent blog posts, tutorials, and community resources from the past week.


Recent Posts (January 18–24, 2026)

➡️ 1. Building Custom External File Storage Connectors and New Ones for Business Central

📇 Author: Stefan Šošić
🗓️ Date: January 18, 2026
🌎 Link: ssosic.com
📝 Summary: Introduces new AppSource connectors for the External File Storage module (including Cloudflare R2, Hetzner, and AWS S3), then outlines how to build your own. Covers the architecture (enum registration + interface implementation), pagination for file listings, and a sandbox-safety pattern using environment cleanup events.


➡️ 2. SaaS ERP Misconceptions: The “On-Premises Thinking Trap”

📇 Author: Stefano Demiliani
🗓️ Date: January 20, 2026
🌎 Link: demiliani.com
📝 Summary: A solution-architecture perspective on why SaaS ERP projects struggle when teams try to recreate on-prem patterns in the cloud. Calls out practical habits like defaulting to “accept as-is,” preferring APIs/events over database-style thinking, and designing integrations to be cloud-native and update-tolerant.


➡️ 3. GitHub Copilot Playbook: Chat Modes

📇 Author: Tonya Bricco-Meske
🗓️ Date: January 21, 2026
🌎 Link: bcdevnotebook.com
📝 Summary: Breaks down Copilot’s modes (Ask, Edit, Plan, Agent) and where each fits in a developer workflow, with practical Business Central examples. Includes tips for adding context effectively, using Next Edit Suggestions, and keeping longer agent sessions flowing with sensible request limits.


➡️ 4. Mermaid Diagrams in Business Central: Dynamic Visual Intelligence

📇 Author: Gerardo Rentería
🗓️ Date: January 22, 2026
🌎 Link: gerardorenteria.blog
📝 Summary: Shows a concept for rendering Mermaid.js diagrams inside Business Central using a control add-in, producing interactive visuals from AL-generated text definitions. Includes a layered architecture (AL + add-in + Mermaid CDN), examples like flowcharts and Gantt charts, and a GitHub repo with the framework objects.


➡️ 5. BC Friday Tips #62: VS Code AL Themes

📇 Author: Teddy Herryanto
🗓️ Date: January 23, 2026
🌎 Link: thatnavguy.com
📝 Summary: Quick reminder that the AL Language extension includes Business Central Light and Dark themes (available since AL v16). If you’re in VS Code all day, switching to these can improve readability and reduce eye strain while staying aligned with the BC look-and-feel.


➡️ 6. Step-by-Step Guide to AI Campaigns in Business Central

📇 Author: Marcel Chabot
🗓️ Date: January 23, 2026
🌎 Link: aardvarklabs.blog
📝 Summary: Walks through an AI-driven demo that generates region-based marketing campaigns from natural language input, using two agents (one for grounded search + narrative results, one for extracting postal codes as JSON). The guide emphasizes a pragmatic architecture: Use AI for campaign creation, then let AL handle day-to-day execution via events to reduce cost and improve performance.


Community Resources

Official Resources

GitHub Repositories

  • microsoft/BCApps – Repository for collaboration on Microsoft Dynamics 365 Business Central applications.
  • microsoft/BCTech – Business Central technology samples.
  • microsoft/ALAppExtensions – Repository for collaboration on Microsoft AL application add-on and localization extensions for Microsoft Dynamics 365 Business Central.
  • microsoft/AL – Home of the Dynamics 365 Business Central AL Language extension for Visual Studio Code.
  • StefanMaron/MSDyn365BC.Code.History – Contains the Microsoft Business Central Code. Updated each month.

Follow on Social Media


Stay Connected

The Business Central AL development community stays active with valuable content on AL development, upgrades, integrations, and tooling improvements. Following #MSDyn365BC and #BusinessCentral on Twitter/X is a great way to catch new posts as they’re published.


Note: This review is compiled from publicly available blog posts and community resources. Links to external blog posts are provided for your information only and do not constitute endorsement or validation of their content. Publication information and availability are subject to change. Always verify information against official documentation for production use.

Permanent link to this article: https://www.dvlprlife.com/2026/01/weekly-review-business-central-al-development-january-18-24-2026/