AL

2026

AL Runner v2.2 and v2.3: Coverage, Quick Scripts, and a Watch Mode You Can Trust

Since the v2 cutover: code coverage for your AL test runs, running a snippet of AL without writing a codeunit for it, a watch mode that no longer reports fake failures mid-save, and about 130 fixes to places where the runner's behavior didn't match real BC. Plus shoutouts to the two AL developers whose bug reports drove most of them.

I Can Turn Off My Code. I Can't Turn Off Yours.

Setting RunTrigger to false on Insert, Modify, or DeleteAll doesn't just skip your own logic — it skips everyone else's subscribed to that table too. That's why running every trigger has to be the default, and why the real fix for the performance cost isn't a developer's judgment call at all: it's the platform checking, per execution, whether there's any code to run in the first place.

Weekly Recap: August 7-14

AL Runner shipped ~85 PRs closing correctness gaps and hardening the pipeline, bc-code-atlas's global_id now lets a self-hosted instance bridge into the public one to follow calls into Microsoft's base app, the AL Language Tests suite grew by answering AL Runner's own open questions, and the Linux fast lane got a week of real-world hardening.

AL Runner v2: What Feedback Told Me v1 Was Missing

v1 worked for the use cases it was built for. Companies actually using it told me that wasn't enough — most real extensions can't be unit tested at all without running against real Microsoft or ISV code. That feedback drove a clean v2 cut. It also changed how the runner fails: anything it can't support now throws loudly instead of quietly passing.

Introducing ALCops — LinterCop's Next Chapter

Arthur van de Vondervoort announces ALCops, a complete rethink of BusinessCentral.LinterCop: six domain-specific AL analyzers distributed via NuGet, a new VS Code extension, and an MCP server for AI tooling integration.

2025

Planning Table Indexes for the Best Performance

A deep dive into all index types available in Business Central — clustered, non-clustered, covering indexes, SIFT views, and columnstore (NCCI) — with benchmarks and real-world deadlock examples from our BC TechDays 2025 session.

Is Linux ready for BC Development?

An honest look at Business Central AL development on Linux: what works perfectly, where Docker and reports still need a Windows VM, and how to get started

2024

Indirect Permissions in Business Central

Why LinterCop rule LC0068 warns about missing Permissions properties in AL — a complete explanation of indirect permissions, 250 restricted tables, and

Excel Reports OnPrem/Docker

How to connect refreshable Excel reports to Business Central OData APIs when running Docker or on-premises containers, including tenant URL and credential

Creating the ErrorInfo Wrapper

Live-stream walkthrough of building a fluent ErrorInfo wrapper codeunit in AL using the 'this' keyword, fix-it actions, and the facade pattern for clean

Validate() – All Tables / All Fields / Always

Stefan Maroń and Christian Hovenbitzer argue at BC TechDays 2024 that Validate() should be the default in AL — not the exception — covering performance myths, chained validates, temp table pitfalls, and the cases where assignment is actually fine.

2023

My approach to custom APIs

When to use API Queries vs API Pages vs OData Bound Actions in Business Central — a practical approach to building readable, testable, and performant

Go Live Checklist

A look at the open-source GoLiveChecklisting app for Business Central — an extensible framework to script and validate data quality checks before going

AL on Linux, Dev Containers, and Codespaces

How Linux support for the AL language extension unlocks Dev Container and GitHub Codespaces workflows for Business Central development — including the workspaceMount fix for debugging

2022

Bugfixes for LinterCop Rule LC0015

LinterCop v0.24.0 fixes rule LC0015 to check all permission types — not just TableData — filling the gap left by PTE0004 for Business Central AL

BusinessCentral.LinterCop v0.23.0

LinterCop v0.23.0 adds wiki help links, LC0014 for permission set caption length, and LC0015 for full permission set object coverage — not just tables.

2021

Updates on my LinterCop project

LinterCop update: GitHub Actions CI pipelines, expanded Rule0005 casing checks, new LC0013 NotBlank rule for primary keys, and plans for pre-release beta

Designing Complex Pages in Business Central

Practical patterns for complex BC page layouts — clickable text fields as buttons, grid layout, and how to think about responsive design when you're coming from WinForms

BusinessCentral.LinterCop goes VS Code!

Install LinterCop in VS Code for AL development — the auto-updating extension adds custom code analysis rules via your al.codeAnalyzers settings.

BusinessCentral.LinterCop

Introducing LinterCop — an AL code analyzer for Business Central built by reverse-engineering the compiler /analyzer: interface. Contribute on GitHub.

Be careful with dynamic code

How overusing RecordRef and FieldRef in Business Central caused a 650% performance regression on sales header modifications — and why interfaces fixed it

Validate a commit before it is committed

Use a Git pre-commit hook with a PowerShell script to block commits with invalid app.json version numbers in Business Central AL projects — shareable

Code review: Loop over an Enum

Refactor an AL enum loop into a clean foreach with Enum.Ordinals() and FromInteger() — a code review on why readable AL code is always easier to maintain.

Video series: How do I?

Introducing a short-form AL video series focused on single tasks — practical how-to clips for Business Central developers using default VS Code settings.

2020

Business Central and Multiline Fields

Display long text fields across multiple lines in Business Central using the built-in WebPageViewer control add-in — no custom control add-in required.

AL Lint v0.1.7: Code Metrics

AL Lint v0.1.7 adds cyclomatic complexity and maintainability index metrics to the VS Code status bar, helping you keep Business Central AL code clean and

VS Code extension: AL Lint

Stefan Maron takes over the AL Lint VS Code extension — adding a function length check and planning clean code and performance rules beyond the built-in

Condition basics in AL

Practical AL coding patterns for writing clean, readable conditions — from IN statements and case true of to extracting complex logic into named functions.

Coding4Performance 4: Task Scheduler

How to use the Business Central Task Scheduler to queue background work across server instances, including Docker setup and scheduling tips.

Coding4Performance 3: Start Session

Step-by-step guide to using StartSession in Business Central AL to run codeunits in the background and improve user session performance.

Coding4Performance 1: Text Builder

AL TextBuilder vs string concatenation benchmarks — why += causes exponential slowdowns and how TextBuilder handles 10 million appends in just 6 seconds.