<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Home on Stefan Maron | Business Central &amp; AL Development</title><link>https://stefanmaron.com/posts/</link><description>Recent content in Home on Stefan Maron | Business Central &amp; AL Development</description><generator>Hugo -- gohugo.io</generator><language/><lastBuildDate>Wed, 04 Mar 2026 17:00:00 +0100</lastBuildDate><atom:link href="https://stefanmaron.com/posts/index.xml" rel="self" type="application/rss+xml"/><item><title>Claude Code in a Standalone Docker Container: Building a Real Sandbox (Part 2)</title><link>https://stefanmaron.com/posts/claude-code-standalone-docker-sandbox/</link><pubDate>Wed, 04 Mar 2026 17:00:00 +0100</pubDate><guid>https://stefanmaron.com/posts/claude-code-standalone-docker-sandbox/</guid><description>If you watched Part 1 , you know the setup: I wanted to run Claude Code in bypass-permissions (cruise mode) without worrying about it going rogue on my host. The dev container approach worked, but someone on LinkedIn pointed out that even after my VS Code IPC mitigations, Claude Code could still reconstruct the IPC bridge and escape. So Part 1 was technically broken.
Part 2 fixes that. You can watch the full stream on YouTube if you want to follow along.</description></item><item><title>Introducing ALCops — LinterCop's Next Chapter</title><link>https://stefanmaron.com/posts/introducing-alcops/</link><pubDate>Fri, 27 Feb 2026 18:00:00 +0100</pubDate><guid>https://stefanmaron.com/posts/introducing-alcops/</guid><description>Arthur van de Vondervoort joined me on stream this week to announce ALCops — a project he&amp;rsquo;s been quietly building for the last three or four months as a complete replacement for BusinessCentral.LinterCop . You can watch the full stream on YouTube if you want the unfiltered version.
I started LinterCop a few years back, Arthur took it somewhere far beyond what I had imagined — almost 100 rules, a huge contributor base — and now he&amp;rsquo;s building the next thing on top of that foundation.</description></item><item><title>Optimizing BC Code History Downloads with HTTP Range Requests</title><link>https://stefanmaron.com/posts/optimizing-bc-code-history-range-requests/</link><pubDate>Fri, 27 Feb 2026 07:00:00 +0100</pubDate><guid>https://stefanmaron.com/posts/optimizing-bc-code-history-range-requests/</guid><description>The MSDyn365BC.Sandbox.Code.History repository automatically tracks every version of the Microsoft Business Central application source code across roughly 50 countries. Two GitHub Actions workflows run daily, picking up new BC sandbox artifacts and committing the AL source to version-controlled branches.
It works well — but builds had started failing silently, and once I started digging in, things unraveled fast.
Fixing what was broken first The original trigger was rebase failures. When late hotfix versions created merge conflicts during git pull --rebase, the scripts relied on fragile output string matching to detect and resolve them.</description></item><item><title>Turning My Coding Streams Into Blog Posts (With a Little Help From Claude)</title><link>https://stefanmaron.com/posts/turning-streams-into-blog-posts/</link><pubDate>Tue, 24 Feb 2026 16:00:00 +0100</pubDate><guid>https://stefanmaron.com/posts/turning-streams-into-blog-posts/</guid><description>I&amp;rsquo;ll be honest: I&amp;rsquo;m lazy when it comes to writing blog posts. Not lazy about sharing — I try to stream regularly, push code to GitHub, drop things in the community Discord. But sitting down to write a structured article about something I just spent two hours live coding? That rarely happens.
The stream is the content. I jump on, explain what I&amp;rsquo;m doing, answer questions live, push something to GitHub, maybe add chapters via AI later.</description></item><item><title>If You Can't Make It Fast, Make It Feel Fast</title><link>https://stefanmaron.com/posts/bc-background-processing-make-it-feel-fast/</link><pubDate>Tue, 24 Feb 2026 09:00:00 +0100</pubDate><guid>https://stefanmaron.com/posts/bc-background-processing-make-it-feel-fast/</guid><description>There is a lot of guidance on writing high-performance AL code, and that guidance is right — optimization should always come first. But sometimes, no matter how good your code is, an operation just takes time. Large data volumes, complex processing, external dependencies. At some point you hit a wall.
This is the topic Henrik Helgesen and I covered in a webinar for Areopa . You can watch the full recording on YouTube if you want to follow along.</description></item><item><title>Building a Plug &amp; Play Claude Code Dev Container for AL Development</title><link>https://stefanmaron.com/posts/claude-code-dev-container-al/</link><pubDate>Fri, 20 Feb 2026 09:00:00 +0100</pubDate><guid>https://stefanmaron.com/posts/claude-code-dev-container-al/</guid><description>A few weeks ago I shared my Claude Code configuration for AL development — the CLAUDE.md instructions, the agent profile, custom commands. It&amp;rsquo;s all public and you&amp;rsquo;re welcome to use or adapt it. But getting it into a new project still involves some manual steps, and there&amp;rsquo;s one thing that always annoyed me: I was running Claude Code outside my dev containers. Not because I wanted to, but because I didn&amp;rsquo;t want to authenticate inside every new container.</description></item><item><title>AL Development with Claude Code: A Multi-Agent Workflow</title><link>https://stefanmaron.com/posts/al-development-claude-code-multi-agent-workflow/</link><pubDate>Wed, 28 Jan 2026 09:00:00 +0100</pubDate><guid>https://stefanmaron.com/posts/al-development-claude-code-multi-agent-workflow/</guid><description>I&amp;rsquo;ve been using Claude Code quite a bit over the past year, and I think I finally have a process that actually works for AL development. One-off prompts don&amp;rsquo;t cut it for anything non-trivial — AL is niche enough that LLMs struggle without guidance, and large refactoring tasks blow up the context window within a few agent calls. What changed things for me was switching to a sub-agent workflow.
You can watch the full stream on YouTube if you want to follow along.</description></item><item><title>Fixing AL Language Extension Debugger on Linux with Wayland/Hyprland</title><link>https://stefanmaron.com/posts/fixing-al-debugger-linux-wayland/</link><pubDate>Fri, 31 Oct 2025 00:00:00 +0000</pubDate><guid>https://stefanmaron.com/posts/fixing-al-debugger-linux-wayland/</guid><description>Last week I switched my development machine from i3 to Hyprland and immediately ran into a frustrating problem: the AL Language Extension debugger stopped working. Well, not completely - it would connect to Business Central and pause on breakpoints, but the Call Stack and Variables panels stayed completely empty. No way to inspect any program state at all.
The Problem On my old i3 setup everything worked perfectly. But after switching to Hyprland (Wayland), debugging became impossible:</description></item><item><title>MSDyn365BC.Sandbox.Code.History - Late Hotfix Handling</title><link>https://stefanmaron.com/posts/blog-post-late-hotfix-handling/</link><pubDate>Thu, 02 Oct 2025 00:00:00 +0000</pubDate><guid>https://stefanmaron.com/posts/blog-post-late-hotfix-handling/</guid><description>You might have noticed some divergent branch errors when trying to pull from the MSDyn365BC.Sandbox.Code.History repository lately. I am going to explain what the hell is going on, and how to solve it ;)
The Problem As mentioned in Issue #4 , tracking changes in the repository was becoming increasingly difficult. Microsoft occasionally releases hotfix versions with version numbers lower than already-published versions. For example:
Version 27.1.40348 gets committed to the repository A few days later, Microsoft releases version 27.</description></item><item><title>Planning Table Indexes for the Best Performance</title><link>https://stefanmaron.com/posts/planning-table-indexes-bc-performance/</link><pubDate>Thu, 07 Aug 2025 09:00:00 +0200</pubDate><guid>https://stefanmaron.com/posts/planning-table-indexes-bc-performance/</guid><description>At BC TechDays 2025 in Antwerp, Alexander Drogin and I presented a 90-minute session on table indexes in Business Central — every type, when to use them, and the traps that cost you deadlocks. You can watch the full recording on YouTube if you want to follow along.
This post is the written version of that talk. Alexander writes extensively about this topic on his blog, and I&amp;rsquo;ll link to his posts throughout — they go much deeper on the individual topics than we could in the slides.</description></item><item><title>How to Set Up a New Business Central Development Project – The 100% Correct Way</title><link>https://stefanmaron.com/posts/how-to-set-up-a-new-business-central-development-project/</link><pubDate>Thu, 05 Jun 2025 07:32:18 +0200</pubDate><guid>https://stefanmaron.com/posts/how-to-set-up-a-new-business-central-development-project/</guid><description>How to Set Up a New Development Project/App — The 100% Correct Way The foundation of any good Business Central app is the way it&amp;rsquo;s set up. That might sound obvious, but it&amp;rsquo;s also one of the most overlooked steps in AL development.
Too often, projects start with a quick AL: Go! command and get to writing objects immediately — skipping over critical setup tasks that ensure long-term maintainability, CI/CD readiness, testability, and AppSource compatibility.</description></item><item><title>Introducing the “No Shortcuts” Series: The 100% Correct Way to Develop for Business Central</title><link>https://stefanmaron.com/posts/introducing-the-no-shortcuts-series-the-100-correct-way-to-develop-for-business-central/</link><pubDate>Mon, 02 Jun 2025 07:38:54 +0200</pubDate><guid>https://stefanmaron.com/posts/introducing-the-no-shortcuts-series-the-100-correct-way-to-develop-for-business-central/</guid><description>Let me start this with a small disclaimer: I chose the title a bit provoking with intention and I do aim for a 100% correct way of takling the tasks I will describe. BUT, if you have any doubt that my 100% way might not actually be 100%, let me know! Lets start discussions and learn from each other :)
Introducing the “No Shortcuts” Series: The 100% Correct Way to Develop for Business Central Developing for Microsoft Dynamics 365 Business Central is both powerful and complex.</description></item><item><title>Is Linux ready for BC Development?</title><link>https://stefanmaron.com/posts/bc-development-on-linux/</link><pubDate>Sat, 08 Feb 2025 09:00:00 +0100</pubDate><guid>https://stefanmaron.com/posts/bc-development-on-linux/</guid><description>Three years ago I installed Linux on a second partition, thinking I&amp;rsquo;d boot back into Windows within a week. I never did. In this episode of the BC Coding Stream I invited fellow MVP Tine Starič to go through all the questions a BC developer would actually ask before making that switch.
You can watch the full stream on YouTube if you want to follow along.
The short answer: yes, Linux works for BC development.</description></item><item><title>Building Sentinel: Configurable Telemetry and a Better Alert View</title><link>https://stefanmaron.com/posts/sentinel-telemetry-card-page/</link><pubDate>Sat, 01 Feb 2025 09:00:00 +0100</pubDate><guid>https://stefanmaron.com/posts/sentinel-telemetry-card-page/</guid><description>In this coding session I continued work on Sentinel , the open-source BC monitoring app I&amp;rsquo;m building. The idea is to give you a way to quickly spot problems in your BC environment — performance risks, permission issues, misconfigured technical setup. Eight rules so far, more coming.
You can watch the full stream on YouTube if you want to follow along.
The app is free on AppSource and the source is fully open.</description></item><item><title>AppSource Monetization and Entitlements in Business Central</title><link>https://stefanmaron.com/posts/appsource-entitlements-business-central/</link><pubDate>Mon, 27 Jan 2025 09:00:00 +0100</pubDate><guid>https://stefanmaron.com/posts/appsource-entitlements-business-central/</guid><description>I recently worked on two AppSource apps that use transactability — meaning Microsoft handles billing through the marketplace. Both required entitlement objects, and there were a few things that tripped me up. The documentation exists, but it doesn&amp;rsquo;t always connect the dots between Partner Center, entitlement objects, and permission sets. This stream goes through the whole flow.
You can watch the full stream on YouTube if you want to follow along.</description></item><item><title>Documenting BusinessCentral.Sentinel — AI-Generated Docs, Better Alert Descriptions, and Company Deletion Fun</title><link>https://stefanmaron.com/posts/businesscentral-sentinel-documentation-stream/</link><pubDate>Mon, 09 Dec 2024 09:00:00 +0100</pubDate><guid>https://stefanmaron.com/posts/businesscentral-sentinel-documentation-stream/</guid><description>This is episode two of the BusinessCentral.Sentinel coding stream. If you missed the first one, Sentinel is a free AppSource app that runs a set of checks against your Business Central environment and flags potential issues — extensions in DEV scope, missing source code access, evaluation companies in production, that kind of thing.
A lot happened between the two streams. I shipped a release off-stream, fixed a bug where extensions weren&amp;rsquo;t showing a name in some sandboxes, and got a community pull request.</description></item><item><title>Building BusinessCentral.Sentinel from Scratch: The First Six Rules</title><link>https://stefanmaron.com/posts/businesscentral-sentinel-first-rules/</link><pubDate>Sat, 23 Nov 2024 09:00:00 +0100</pubDate><guid>https://stefanmaron.com/posts/businesscentral-sentinel-first-rules/</guid><description>The idea came to me while driving home from BC Days Poland in Warsaw, listening to Episode 348 of the Dynamics Corner podcast — &amp;ldquo;Source Code Management and You in Business Central&amp;rdquo; with Steve Endow as guest. They were talking about customer projects gone wrong — partners going out of business, customers left without access to the source code of their own extensions. I pulled over and texted Steve, then called him once I got home.</description></item><item><title>MsDyn365BC.Code.History Tips &amp; Tricks</title><link>https://stefanmaron.com/posts/msdyn365bc-code-history-tips-tricks/</link><pubDate>Sat, 19 Oct 2024 09:00:00 +0200</pubDate><guid>https://stefanmaron.com/posts/msdyn365bc-code-history-tips-tricks/</guid><description>If you&amp;rsquo;ve ever tried to search for something in the MsDyn365BC.Code.History repository directly on GitHub, you&amp;rsquo;ve probably noticed it stopped working. The GitHub code search just returns no results. You can watch the full stream on YouTube if you want to follow along.
The fix is simple: open the repository in the browser-based VS Code instead. Just navigate to the repo and press . on your keyboard — or change github.</description></item><item><title>MsDyn365Bc.Code.History Updates</title><link>https://stefanmaron.com/posts/msdyn365.code.history_updates/</link><pubDate>Thu, 17 Oct 2024 06:07:34 +0200</pubDate><guid>https://stefanmaron.com/posts/msdyn365.code.history_updates/</guid><description>You might have noticed already that I made some changes to the https://github.com/StefanMaron/MSDyn365BC.Code.History repository.
I want to use this blog to explain a little the what, and the why :)
The what I started this with the other repository, the MSDyn365BC.Sandbox.Code.History repository. I modified my old Commit generation script a little bit so it can be used in Github Actions.
With the GitHub actions, I am able to run each country seprately and in parallel, which saves a TON of time.</description></item><item><title>How to use Interfaces in Business Central</title><link>https://stefanmaron.com/posts/interfaces-in-business-central/</link><pubDate>Mon, 14 Oct 2024 09:00:00 +0100</pubDate><guid>https://stefanmaron.com/posts/interfaces-in-business-central/</guid><description>Interfaces still cause a fair amount of confusion, even among developers who have been writing AL for a while. I wanted to do a proper walkthrough — from the basics to real-world patterns like testing with fake implementations and the enum+interface combination that I use most often in practice.
You can watch the full stream on YouTube if you want to follow along.
The basic idea The classic vehicle example works well here.</description></item><item><title>Indirect Permissions in Business Central</title><link>https://stefanmaron.com/posts/indirectpermissions/</link><pubDate>Sun, 06 Oct 2024 20:28:30 +0200</pubDate><guid>https://stefanmaron.com/posts/indirectpermissions/</guid><description>Indirect Permissions in Business Central Recently I created a new Rule in the BC Linter Cop to inform about missing Permission to do data Access:
https://github.com/StefanMaron/BusinessCentral.LinterCop/wiki/LC0068 This resulted in a number of discussions about when to set the Permissions property, and if it makes sense at all.
https://github.com/StefanMaron/BusinessCentral.LinterCop/pull/768 https://github.com/StefanMaron/BusinessCentral.LinterCop/issues/725 https://github.com/StefanMaron/BusinessCentral.LinterCop/issues/780 &amp;hellip; and some more, also on other platforms.
So I want to use this Blog post to try to really explain my reasoning behind the rule and why I think that it does make sense exaclty as it is.</description></item><item><title>Continuing the NuGet Installer - BC Coding Stream</title><link>https://stefanmaron.com/posts/nuget-installer-bc-coding-stream-2/</link><pubDate>Sat, 05 Oct 2024 09:00:00 +0100</pubDate><guid>https://stefanmaron.com/posts/nuget-installer-bc-coding-stream-2/</guid><description>This stream picked up where the previous one left off: building a Business Central extension that can browse NuGet feeds, pull down .app packages, and install them directly from within BC. My brother Christian joined for a pair-programming session — first time doing a dual-stream — so there was a lot of live code review and back-and-forth alongside the actual development.
You can watch the full stream on YouTube if you want the unfiltered version.</description></item><item><title>Creating a NuGet Installer Extension for Business Central</title><link>https://stefanmaron.com/posts/nuget-installer-extension-bc/</link><pubDate>Fri, 04 Oct 2024 09:00:00 +0100</pubDate><guid>https://stefanmaron.com/posts/nuget-installer-extension-bc/</guid><description>AL-Go has been gaining NuGet support for a while — you can now publish BC apps to a NuGet feed as part of your pipeline. In this stream I took that one step further and asked: can we pull apps back from a NuGet feed and install them directly into a BC environment, from inside BC itself?
The short answer: yes, it works. Here&amp;rsquo;s how I built the proof of concept.</description></item><item><title>How Do Database Transactions Actually Work in Business Central?</title><link>https://stefanmaron.com/posts/bc-database-transactions-deep-dive/</link><pubDate>Sun, 15 Sep 2024 09:00:00 +0100</pubDate><guid>https://stefanmaron.com/posts/bc-database-transactions-deep-dive/</guid><description>I thought I knew how transactions worked in Business Central. Then I started actually testing them, and I was genuinely shocked by a few things. This stream is me working through it live, building a small test extension and watching what commits and errors actually do to the database.
The full stream is on YouTube — this post covers the key findings. All the code from the stream ended up at github.</description></item><item><title>Excel Reports OnPrem/Docker</title><link>https://stefanmaron.com/posts/excelreportsonprem/</link><pubDate>Fri, 06 Sep 2024 06:43:14 +0200</pubDate><guid>https://stefanmaron.com/posts/excelreportsonprem/</guid><description>This blog is about how to get your Excel report layout connected to have a refreshable Excel report. But with Docker and OnPremise ;)
The idea and the base for this is Tonyas blog, if you did not read that already, I highly recommend you do so:
https://bcdevnotebook.com/2024/04/30/the-comprehensive-guide-to-using-business-central-excel-report-metadata-with-refreshable-apis/ Alright, now lets get to it.
First, of course, we need a docker container. If you dont know at all how to prepare your machine to be able to run Business Central docker containers, you might need to read up on that before you continue here.</description></item><item><title>LinterCop Development: Fixing LC0068 False Positives and the Sandbox Code History Repo</title><link>https://stefanmaron.com/posts/lintercop-lc0068-indirect-permissions-fixes/</link><pubDate>Tue, 03 Sep 2024 09:00:00 +0100</pubDate><guid>https://stefanmaron.com/posts/lintercop-lc0068-indirect-permissions-fixes/</guid><description>This stream happened to land on a good day — I&amp;rsquo;d just been accepted as a Microsoft MVP, so I opened with that before diving straight into bug fixes for LinterCop . The focus was on LC0068, the rule that warns when an object is missing the Permissions property for table data it touches, and there were a handful of community-reported false positives sitting in the issue tracker that needed attention.</description></item><item><title>Basic Repo Setup with AL-Go</title><link>https://stefanmaron.com/posts/basic-repo-setup-with-al-go/</link><pubDate>Thu, 15 Aug 2024 09:00:00 +0100</pubDate><guid>https://stefanmaron.com/posts/basic-repo-setup-with-al-go/</guid><description>Every new Business Central project starts with the same question: how do I get from zero to a working CI/CD pipeline without wasting a day on config? This stream walks through the entire setup — from clicking &amp;ldquo;Use this template&amp;rdquo; on GitHub all the way to running a release and deploying to an environment.
The full stream is on YouTube if you want to follow along in real time.
Choosing your AL-Go template I use AL-Go for all my projects.</description></item><item><title>Indirect Permissions in Business Central — What They Are and Why They Matter</title><link>https://stefanmaron.com/posts/indirect-permissions-bc-stream/</link><pubDate>Tue, 06 Aug 2024 09:00:00 +0100</pubDate><guid>https://stefanmaron.com/posts/indirect-permissions-bc-stream/</guid><description>Permissions in Business Central are one of those topics that seem simple on the surface until you hit a runtime error that has nothing to do with the permission sets you actually assigned. I ran into exactly that problem — and I decided to stream through it properly, live, including the things I got wrong along the way.
The full stream is on YouTube if you want to see every detour.</description></item><item><title>Table Keys and SQL Indexes in Business Central</title><link>https://stefanmaron.com/posts/table-keys-and-sql-indexes-in-business-central/</link><pubDate>Sat, 20 Jul 2024 09:00:00 +0100</pubDate><guid>https://stefanmaron.com/posts/table-keys-and-sql-indexes-in-business-central/</guid><description>I&amp;rsquo;ve wanted to dig into this topic properly for a long time. How do AL table keys actually translate to SQL Server indexes? What SQL does Business Central generate from your AL queries? And does adding a key actually help — or can it hurt? This stream was my attempt to answer all of that with real numbers.
The full stream is on YouTube: Table keys and SQL Indexes – The BC Coding Stream The test setup I used waldo&amp;rsquo;s BCPerfTool as the harness.</description></item><item><title>MSDyn365BC.Ntfy Development Session — Redesigning the BC Push Notification App</title><link>https://stefanmaron.com/posts/msdyn365bc-ntfy-development-session/</link><pubDate>Tue, 16 Jul 2024 09:00:00 +0100</pubDate><guid>https://stefanmaron.com/posts/msdyn365bc-ntfy-development-session/</guid><description>Push notifications from Business Central to your phone — that&amp;rsquo;s the idea behind MSDyn365BC.Ntfy . In this stream session I worked on rethinking the data model for the app, which started as a proof of concept and needed some structural improvements before it was worth building on further.
The full stream is on YouTube if you want to watch it live. Below I&amp;rsquo;m covering the key decisions and code changes from that session.</description></item><item><title>BCv24 Error Info Wrapper - Backporting the Fluent ErrorInfo API</title><link>https://stefanmaron.com/posts/bcv24-error-info-wrapper/</link><pubDate>Wed, 10 Jul 2024 09:00:00 +0100</pubDate><guid>https://stefanmaron.com/posts/bcv24-error-info-wrapper/</guid><description>On a recent stream I built a fluent wrapper around the ErrorInfo data type that lets you chain calls like ErrorInfoWrapper.Title('...').Message('...').AddAction(...). The original implementation used the this keyword, which is only available from AL runtime 14.0 (Business Central v25) onwards. Someone in the chat — I think it was Natalie — pointed out that it would only work on v25+. I was pretty sure we could make it work on v24 too, so that&amp;rsquo;s what this stream was about.</description></item><item><title>Creating the ErrorInfo Wrapper</title><link>https://stefanmaron.com/posts/creating-the-errorinfo-wrapper/</link><pubDate>Fri, 05 Jul 2024 09:00:00 +0100</pubDate><guid>https://stefanmaron.com/posts/creating-the-errorinfo-wrapper/</guid><description>In this stream I built something I&amp;rsquo;ve been meaning to do for a while: a wrapper codeunit around the ErrorInfo type in AL. If you&amp;rsquo;ve ever tried to use ErrorInfo properly — with custom dimensions, navigation actions, fix-it actions — you know how much boilerplate it takes. I wanted to fix that.
The full stream is on YouTube if you want to follow along. The repo is at github.com/StefanMaron/ErrorInfoWrapper .</description></item><item><title>Reviewing Microsoft's AI Test Toolkit PR in BCApps — Guideline Fixes Live</title><link>https://stefanmaron.com/posts/reviewing-ai-test-toolkit-pr-bcapps-guideline-fixes/</link><pubDate>Wed, 03 Jul 2024 09:00:00 +0100</pubDate><guid>https://stefanmaron.com/posts/reviewing-ai-test-toolkit-pr-bcapps-guideline-fixes/</guid><description>The full stream is on YouTube if you want to watch along. The short version: Microsoft opened a pull request to add an AI Test Toolkit to the public BCApps repository , and I spent a stream going through it file by file, fixing AL guideline violations and trying to get a counter-PR merged.
The previous session I&amp;rsquo;d reviewed the PR and left individual comments on things I spotted. What I learned from that: if you click &amp;ldquo;Add comment&amp;rdquo; instead of &amp;ldquo;Start review&amp;rdquo;, GitHub sends one email per comment to everyone subscribed to the PR.</description></item><item><title>Validate() – All Tables / All Fields / Always</title><link>https://stefanmaron.com/posts/validate-all-tables-all-fields-always/</link><pubDate>Sun, 16 Jun 2024 09:00:00 +0100</pubDate><guid>https://stefanmaron.com/posts/validate-all-tables-all-fields-always/</guid><description>At BC TechDays 2024 in Antwerp, Christian Hovenbitzer and I gave a session with a deliberately provocative title: Validate() – all tables / all fields / always. The room was packed, which tells you this is something people have strong opinions about.
You can watch the full recording on YouTube if you want to follow along.
The short version of our argument: calling Validate() on a field should be your default.</description></item><item><title>Write-Off App: AppSource Finishing Touches</title><link>https://stefanmaron.com/posts/write-off-app-abcsource-finishing-touches/</link><pubDate>Tue, 04 Jun 2024 09:00:00 +0100</pubDate><guid>https://stefanmaron.com/posts/write-off-app-abcsource-finishing-touches/</guid><description>This stream was about getting the Automatic Write-Off app ready for AppSource — the last round of cleanup before the first publish. No new features, just the unglamorous work that actually matters: Access properties on every object, InherentPermissions, permission sets, enum implementations, and reorganizing the folder structure. If you&amp;rsquo;ve been building your first AppSource extension, this session is probably where I&amp;rsquo;d point you.
The full stream is on YouTube if you want to follow along.</description></item><item><title>Build a better way to catch errors 2 – without the test framework</title><link>https://stefanmaron.com/posts/build-better-error-catching-without-test-framework/</link><pubDate>Thu, 30 May 2024 09:00:00 +0100</pubDate><guid>https://stefanmaron.com/posts/build-better-error-catching-without-test-framework/</guid><description>In the first stream on this topic I built a way to reliably catch and log errors during Business Central imports using the test framework — running code inside a test codeunit so that any database changes roll back automatically when an error is thrown. The idea worked. But then I tried to run it in production Online, and it blew up immediately: the test framework is not available in production SaaS tenants.</description></item><item><title>Build a better way to catch errors (Part 1) - The BC Coding Stream</title><link>https://stefanmaron.com/posts/build-better-error-catching-part-1/</link><pubDate>Tue, 28 May 2024 09:00:00 +0100</pubDate><guid>https://stefanmaron.com/posts/build-better-error-catching-part-1/</guid><description>This stream started as a debugging session. I&amp;rsquo;d hit a problem in a real project: I needed to catch errors from field validations — including all the hidden commits that Validate can trigger — without leaving any trace in the database. I wanted to show the user what would go wrong before actually doing the thing. Turns out that&amp;rsquo;s harder than it sounds.
You can watch the full stream on YouTube .</description></item><item><title>FilterPageBuilder.GetView, Language Bugs, and Adding Spare Brained Licensing</title><link>https://stefanmaron.com/posts/filterpagebuilder-getview-language-bug-spare-brained-licensing/</link><pubDate>Sun, 26 May 2024 09:00:00 +0100</pubDate><guid>https://stefanmaron.com/posts/filterpagebuilder-getview-language-bug-spare-brained-licensing/</guid><description>Two things on the agenda for this stream: fixing a subtle language-related bug in how I use FilterPageBuilder.GetView, and starting to integrate Spare Brained Licensing into my Automatic Write-Offs app. The full stream is on YouTube if you want the unfiltered version.
The GetView Language Bug Someone pointed out in a comment on a previous video that the filter views I store in the database can break if a user switches language.</description></item><item><title>Building an Automatic Write-Off Tool in AL: Adding Overpayments with an Interface Pattern</title><link>https://stefanmaron.com/posts/al-automatic-write-offs-overpayments-interface-pattern/</link><pubDate>Sat, 25 May 2024 09:00:00 +0100</pubDate><guid>https://stefanmaron.com/posts/al-automatic-write-offs-overpayments-interface-pattern/</guid><description>This stream picked up mid-session on an app I&amp;rsquo;m building for AppSource: an automatic write-off tool that generates general journal lines for small remaining amounts on customer ledger entries. The previous stream had a frozen screen issue — VS Code appeared fine in my preview but wasn&amp;rsquo;t actually updating — so I restarted and recapped quickly before jumping back in. The full stream is on YouTube if you want to follow along.</description></item><item><title>Writing testable AL code: building a write-off app for AppSource</title><link>https://stefanmaron.com/posts/al-unit-testing-writeoff-app-appource/</link><pubDate>Fri, 24 May 2024 09:00:00 +0100</pubDate><guid>https://stefanmaron.com/posts/al-unit-testing-writeoff-app-appource/</guid><description>I&amp;rsquo;ve been working on a small AppSource app that lets you write off under- or overpayments from customer ledger entries into GL accounts. It generates general journal lines automatically based on filters — customer range, write-off limit, cut-off date. Simple premise, but with enough moving parts that I wanted proper test coverage before shipping it.
This stream was one working session: I went through the main codeunit, function by function, and wrote tests for each piece.</description></item><item><title>Running Windows 11 on a Debian Host</title><link>https://stefanmaron.com/posts/running_windows_11_debian_host/</link><pubDate>Tue, 19 Mar 2024 08:24:52 +0100</pubDate><guid>https://stefanmaron.com/posts/running_windows_11_debian_host/</guid><description>Navigating the Build Agent Dilemma for Business Central Developers working with Business Central are familiar with a common problem: the reliance on Windows for build agents. This dependency has been highlighted recently with Microsoft&amp;rsquo;s decision to deprecate base images compatible with Windows 10. As a result, Windows 10 now requires containers to run in Hyper-V isolation, which has a noticeable impact on the speed of building pipelines.
My personal setup for a build agent consisted of older hardware components that were cost-effective and sufficient for my needs—until now.</description></item><item><title>View changes of base permission sets</title><link>https://stefanmaron.com/posts/viewchangesofbasepermissionsets/</link><pubDate>Fri, 18 Aug 2023 13:57:36 +0200</pubDate><guid>https://stefanmaron.com/posts/viewchangesofbasepermissionsets/</guid><description>How to check if one of the permissions sets from Microsoft change with an update So I got asked on LinedIn how you can keep track of changes in Microsoft&amp;rsquo;s code base for Business central. This is especially necessary when using the permission sets from Microsoft.
One of my tools you can use for this is the MSDyn365BC.Code.History repository on GitHub. But since this more a resource for Developers, and checking permission sets might not always be a task a developer gets assigned, I want to make sure to explain in detail, how everyone can review the changes Microsoft does to their permission sets.</description></item><item><title>My approach to custom APIs</title><link>https://stefanmaron.com/posts/myapproachtocustomapi/</link><pubDate>Tue, 04 Jul 2023 08:05:27 +0200</pubDate><guid>https://stefanmaron.com/posts/myapproachtocustomapi/</guid><description>Since I work together with our colleagues from the PowerPlatform team more frequently, one of my most regular tasks is, to create a new custom API. The default APIs from Business central are cool, but if you really want to achieve something, you might get to their limits real fast.
So I have been exposing tables and writing APIs quite a lot recently, and my approach to this has changed a bit over time.</description></item><item><title>Go Live Checklist</title><link>https://stefanmaron.com/posts/golivechecklist/</link><pubDate>Sat, 01 Jul 2023 00:33:39 +0200</pubDate><guid>https://stefanmaron.com/posts/golivechecklist/</guid><description>I am not sure if you where on BCTechDays 2023, or if you maybe already saw Jeremy&amp;rsquo;s session on YouTube already.
If not, have a look, its worth your time:
And from all the good stuff he talked about, I wanted to have a more detailed look at the GoLiveChecklist app he created. And since its all OpenSource, I just went to his github and checked it out.
The purpose of this app is, to script any kind of check you want to do, in your Business Central company, before you go live.</description></item><item><title>AL on Linux, Dev Containers, and Codespaces</title><link>https://stefanmaron.com/posts/al-on-linux-devcontainers-codespaces/</link><pubDate>Wed, 28 Jun 2023 09:00:00 +0100</pubDate><guid>https://stefanmaron.com/posts/al-on-linux-devcontainers-codespaces/</guid><description>At BC TechDays 2023 in Antwerp, Tobias Fenster and I did a joint session called &amp;ldquo;Experiments for BC — Wasm? Codespaces? Linux? Wtf!&amp;rdquo; The full session is on YouTube if you want to watch it.
Tobias kicked things off with a deep dive into WebAssembly — what it is, where it came from, and why it might matter for the BC ecosystem. If you&amp;rsquo;re curious about running .NET or AL-adjacent code in a WASM runtime, his half is worth watching.</description></item><item><title>BC TechDays 2023</title><link>https://stefanmaron.com/posts/bc-techdays-2023/</link><pubDate>Fri, 23 Jun 2023 14:53:23 +0000</pubDate><guid>https://stefanmaron.com/posts/bc-techdays-2023/</guid><description>And yet another conference has come to an end. And again its this weird feeling I can not really describe. All I know is, I am already looking forward to meeting all of the community again in France for EMEA later this year!
It was again an awesome conference for may reasons: Good sessions, good networking, meeting all the friends again, having valuable talk with all those experts on their specific field.</description></item><item><title>My journey to Linux</title><link>https://stefanmaron.com/posts/my-journey-to-linux/</link><pubDate>Thu, 08 Jun 2023 19:46:33 +0000</pubDate><guid>https://stefanmaron.com/posts/my-journey-to-linux/</guid><description>I do not exactly recall when that thought started to grow in the back of my mind, but I think I always were fascinated by linux. And I already created linux live USB sticks a couple of times. It not that difficult anymore as I recall it was someday. Maybe it never was and I just became more savvy with tech, who knows. But I never felt like this could be the operating system I would use for my daily work.</description></item><item><title>Bugfixes for LinterCop Rule LC0015</title><link>https://stefanmaron.com/posts/bugfixes-for-lintercop-rule-lc0015/</link><pubDate>Wed, 02 Feb 2022 08:00:45 +0000</pubDate><guid>https://stefanmaron.com/posts/bugfixes-for-lintercop-rule-lc0015/</guid><description>I just released a new version for the BusinessCentral.LinterCop .
This rule is similar to the PTE0004 from Microsoft which checks for your tables to have a TableData permission set. All the other permissions are not covered.
After some discussion and some thoughts I ended up also including the check for TableData in LC0015. If you dont want to have a double check for this, you can disable PTE0004.
More details can be found in the dedicated docs side for this rule:</description></item><item><title>Business Central LinterCop with older Versions of BC</title><link>https://stefanmaron.com/posts/business-central-lintercop-with-older-versions-of-bc/</link><pubDate>Tue, 11 Jan 2022 05:37:14 +0000</pubDate><guid>https://stefanmaron.com/posts/business-central-lintercop-with-older-versions-of-bc/</guid><description>If you want to run pipelines with the LinterCop, you can use Run-ALPipeline and pass in the path to the LinterCop.dll via the parameter - CustomCops. But when running pipelines for various versions of BusinessCentral you might encounter errors like this:
Microsoft.Dynamics.Nav.CodeAnalysis, Version=8.2.8.24543, Culture=neutral, PublicKeyToken=31bf3856ad364e35&amp;#39;(,): warning : An instance of analyzer http://BusinessCentral.LinterCop.Design.Rule0012DoNotUseObjectIdInSystemFunctions cannot be created from C:\Agent\LinterCop\BusinessCentral.LinterCop.dll : Could not load file or assembly &amp;#39;Microsoft.Dynamics.Nav.CodeAnalysis, Version=8.2.8.24543, Culture=neutral, PublicKeyToken=31bf3856ad364e35&amp;#39;. The system cannot find the file specified.</description></item><item><title>Changes in MSDyn365BC.Code.History</title><link>https://stefanmaron.com/posts/changes-in-msdyn365bc-code-history/</link><pubDate>Fri, 07 Jan 2022 11:48:53 +0000</pubDate><guid>https://stefanmaron.com/posts/changes-in-msdyn365bc-code-history/</guid><description>Today you may have already noticed something like this if you have a local clone of MSDyn365BC.Code.History to use with VS Code. I am going to explain what the hell is going on, and how to solve it ;)
The history was rewritten I had a couple of recommendations to improve this repository. That includes a .gitignore and some changes of the settings in the workspace files. But since this repo is a bit different compared to &amp;ldquo;normal&amp;rdquo; repos, its not that easy to just merge a pull request.</description></item><item><title>BusinessCentral.LinterCop v0.23.0</title><link>https://stefanmaron.com/posts/businesscentral-lintercop-v0-23-0/</link><pubDate>Wed, 05 Jan 2022 07:10:45 +0000</pubDate><guid>https://stefanmaron.com/posts/businesscentral-lintercop-v0-23-0/</guid><description>A new version of the BusinessCentral.LinterCop just got released 🥳
Special thanks to Rob van Bekkum @rvanbekkum who wrote two new rules!
Added Help links to wiki Microsoft already did this in the december release I think, and now the LinterCop also includes direct links to the wiki on GitHub.
Just by clicking for example on &amp;ldquo;LC0015&amp;rdquo; you can open the wiki page for this rule on the GitHub Repository https://github.</description></item><item><title>How to takle all the challenges with BC SaaS?</title><link>https://stefanmaron.com/posts/how-to-takle-all-the-challenges-with-bc-saas/</link><pubDate>Thu, 30 Dec 2021 09:23:34 +0000</pubDate><guid>https://stefanmaron.com/posts/how-to-takle-all-the-challenges-with-bc-saas/</guid><description>It&amp;rsquo;s been a while since my last blog post and this time its not about a technical topic. I have just watched the (right now) latest video from @SteveEndow and he asks a lot of questions and leaves open the answers. I just feel like I could share a few of my thoughts about some of those topics, related to Business Central. So if you did not watch the video already, you should watch it before continuing reading.</description></item><item><title>Updates on my LinterCop project</title><link>https://stefanmaron.com/posts/updates-on-my-lintercop-project/</link><pubDate>Wed, 17 Nov 2021 06:20:47 +0000</pubDate><guid>https://stefanmaron.com/posts/updates-on-my-lintercop-project/</guid><description>In the last days, I managed to get some new updates for you released. Since this would be too much for a tweet, I will summarize here what changed, what will change in the next days (hopefully 🙃 ), and what is planned for future updates.
What changed lately? Pipelines and automated builds The biggest change I did in the last weeks, was to introduce pipelines and automated builds on GitHub for the LinterCop.</description></item><item><title>Designing Complex Pages in Business Central</title><link>https://stefanmaron.com/posts/designing-complex-pages-in-business-central/</link><pubDate>Tue, 09 Nov 2021 09:00:00 +0100</pubDate><guid>https://stefanmaron.com/posts/designing-complex-pages-in-business-central/</guid><description>Back in October 2020 I replied to a tweet from Steve Endow about how quickly you can add custom fields to a BC page — &amp;ldquo;This only took 5 minutes of actual coding in AL. Five. Minutes.&amp;rdquo; — and I added something along the lines of: yes, but if you want a more complex page design, it can cost you hours to find a way in BC.
A year later Steve remembered that tweet and pulled me into a live chat to actually discuss it.</description></item><item><title>BusinessCentral.LinterCop goes VS Code!</title><link>https://stefanmaron.com/posts/businesscentral-lintercop-goes-vs-code/</link><pubDate>Tue, 21 Sep 2021 15:59:09 +0000</pubDate><guid>https://stefanmaron.com/posts/businesscentral-lintercop-goes-vs-code/</guid><description>After quite some analyzing and reverse engineering, I got it working!
The custom code analyzer BusinessCentral.LinterCop is running included in VS Code.
And here is how to do it: First, go to my GitHub and download the latest binary here .
Then just place it on your hard drive, for example &amp;ldquo;C:\ALCustomCops\&amp;rdquo;
Then go to your settings file and insert it in the &amp;ldquo;al.codeAnalyzers&amp;rdquo; like this:
And thats it! Pretty short Blog but this should get you going ;)</description></item><item><title>BusinessCentral.LinterCop</title><link>https://stefanmaron.com/posts/businesscentral-lintercop/</link><pubDate>Thu, 02 Sep 2021 08:13:42 +0000</pubDate><guid>https://stefanmaron.com/posts/businesscentral-lintercop/</guid><description>As you maybe remember, I am working on a linter solution for AL for some time already. I tried a VS Code extension. I tried to build a dll to increase performance and to make it available in powershell and therefore also in pipelines. But for now I did not find a proper solution.
Recently I realized that the AL Compiler has a parameter &amp;ldquo;/analyzer:&amp;rdquo; and accepts a dll. And depending on wich cops you enable, the according ddls are just passed in.</description></item><item><title>Be careful with dynamic code</title><link>https://stefanmaron.com/posts/be-careful-with-dynamic-code/</link><pubDate>Wed, 11 Aug 2021 07:09:13 +0000</pubDate><guid>https://stefanmaron.com/posts/be-careful-with-dynamic-code/</guid><description>I believe there is a time in every AL developers live where he discovers the power of RecordRef and FieldRef. It is surely Incredible what you can achieve with these tools and how fast you can deliver a pretty good working piece of code.
At least this is the way I remember my first solutions I build when I first learned about RecordRefs. I realized, the more I think about it the more code could be written with a dynamic approach and I started to deliver my finished code quite a bit faster.</description></item><item><title>MSDyn365BC.Code.History got a few updates!</title><link>https://stefanmaron.com/posts/msdyn365bc-code-history-got-a-few-updates/</link><pubDate>Wed, 23 Jun 2021 06:00:06 +0000</pubDate><guid>https://stefanmaron.com/posts/msdyn365bc-code-history-got-a-few-updates/</guid><description>Over the last few month a collected a few requests to improve or change the MSDyn365BC.Code.History repository. Last weekend I finally managed to address them and since Sunday I rebuild the whole Repository. Today its finally going live:
https://github.com/StefanMaron/MSDyn365BC.Code.History Include Translation files Since today, (hopefully) all translation files are included. I never did this but in case you need to, you can now compare them. For performance reasons they are excluded from search in all the workspaces that are part of the repository tho.</description></item><item><title>Validate a commit before it is committed</title><link>https://stefanmaron.com/posts/validate-a-commit-before-it-is-committed/</link><pubDate>Thu, 10 Jun 2021 14:20:29 +0000</pubDate><guid>https://stefanmaron.com/posts/validate-a-commit-before-it-is-committed/</guid><description>Recently there was this question about how to do version numbering when working with AL Apps and automatic builds:
It started a discussion about when to update which part of the version number and how that is done. The discussion will be continued today (10th June 2021 9pm CEST) on Discord if you are interested to join/listen:
waldo on Twitter: &amp;ldquo;For whomever is interested - this Thursday, 9pm CEST, we&amp;rsquo;ll have a discussion on this topic (handling app versions) on the #msdyn365bc discord: https://t.</description></item><item><title>Upgrade a BC CRONUS Database using Docker</title><link>https://stefanmaron.com/posts/upgrade-a-bc-cronos-database-using-docker/</link><pubDate>Fri, 04 Jun 2021 09:00:33 +0000</pubDate><guid>https://stefanmaron.com/posts/upgrade-a-bc-cronos-database-using-docker/</guid><description>A few days ago I streamed how I try to upgrade a Business Central CRONOS Database just using docker:
https://youtu.be/2UnIFAWgEK0 Apart from a few throwbacks it went quite well, but better watch yourself ;)
However, I promised to publish the script I created so you don&amp;rsquo;t need to write it down from the video.
https://gist.github.com/StefanMaron/17fd977dd7192e4a713012db91889cf5 Have Fun ;)</description></item><item><title>Code review: Loop over an Enum</title><link>https://stefanmaron.com/posts/code-review-loop-over-an-enum/</link><pubDate>Mon, 19 Apr 2021 09:57:13 +0000</pubDate><guid>https://stefanmaron.com/posts/code-review-loop-over-an-enum/</guid><description>So I came across this post from ThatNavGuy: Looping Through Enum – That NAV guy (wordpress.com) He shows an example on how to loop over an enum. The goal is to have the enum pointing to the next value on each iteration.
Since this community is about sharing knowledge and learning from each other, I wanted to make a quick code review and show, how I would solve this task ;)</description></item><item><title>Speed up BC container creation</title><link>https://stefanmaron.com/posts/speed-up-bc-container-creation/</link><pubDate>Tue, 16 Mar 2021 19:46:00 +0000</pubDate><guid>https://stefanmaron.com/posts/speed-up-bc-container-creation/</guid><description>This is probably going to be a short blog again and chances are high that you already know what I am going to share. But if your are like me and did not know this little trick, its going to save you, and maybe your team, quite some time!
Since I do not run my pipelines on DevOps but on GitLab I am quite happy to use the Run-ALPipeLine command. When you supply the -imageName parameter it behaves the same way like New-BCContainer does.</description></item><item><title>Clean up after yourself, Git!</title><link>https://stefanmaron.com/posts/clean-up-after-yourself-git/</link><pubDate>Wed, 10 Mar 2021 07:00:30 +0000</pubDate><guid>https://stefanmaron.com/posts/clean-up-after-yourself-git/</guid><description>You may know this problem: After a while working with feature branches your local git repository is a mess of many branches which don&amp;rsquo;t event exist anymore on your remote. (GitHub/GitLab/DevOps)
You could delete these local branches manually but if you are as lazy as I am, you might want to read on and just take my solution for this ;)
I wrote a short function in PowerShell which cleans up branches for me:</description></item><item><title>Performance &amp;amp; Variables exposed as field on a Page</title><link>https://stefanmaron.com/posts/performance-variables-exposed-as-field-on-a-page/</link><pubDate>Tue, 02 Mar 2021 19:01:27 +0000</pubDate><guid>https://stefanmaron.com/posts/performance-variables-exposed-as-field-on-a-page/</guid><description>Today was again one of those days&amp;hellip;
I just wanted to add a flow field to a table to look up some value, and display it on a list page. After some time I realized that this wont work. Im my case I needed to go three table relations deep to get out the value I needed. But just chaining two FlowFields would already be enough to see this mission failing.</description></item><item><title>Video series: How do I?</title><link>https://stefanmaron.com/posts/video-series-how-do-i/</link><pubDate>Sun, 28 Feb 2021 08:54:16 +0000</pubDate><guid>https://stefanmaron.com/posts/video-series-how-do-i/</guid><description>I just joined the hype train and started to record AL learning videos!
Yes, I know what you might think now.
&amp;ldquo;Again? There are already enough people doing the same videos over and over again!&amp;rdquo;
But I have something different in mind. In this series of videos I want to share and show how I o stuff in AL. And maybe explain why I do it like this. My goal is to create videos as short as possible and focus only on a simple single task per video.</description></item><item><title>Can I copy my container?</title><link>https://stefanmaron.com/posts/can-i-copy-my-container/</link><pubDate>Tue, 23 Feb 2021 05:58:14 +0000</pubDate><guid>https://stefanmaron.com/posts/can-i-copy-my-container/</guid><description>I just stumbled over this twitter post from Steve
And I asked myself the same question already some time ago. And guess what, this is super easy ;)
Stop and Commit the container you want to copy You first need to stop your container you want to copy. If it is running of course ;)
Stop-BcContainer &amp;lt;ContainerToCopy&amp;gt; This should not take too long.
After that you can use the &amp;ldquo;Docker commit&amp;rdquo; command to save the current state of this container to a new image.</description></item><item><title>Thoughts about automated testing in projects</title><link>https://stefanmaron.com/posts/thoughts-about-automated-testing-in-projects/</link><pubDate>Mon, 01 Feb 2021 09:34:04 +0000</pubDate><guid>https://stefanmaron.com/posts/thoughts-about-automated-testing-in-projects/</guid><description>I just finished a somewhat successful project with one of my customers, starting with BC from scratch only with some master data imported. For some more critical processes I wrote some basic test cases and automated them. Although this project did not fail and the customer can work with BC without problems now, I had a feeling of just being lucky.
I mean, I know what I am capable of and I was confident to do this project from the beginning.</description></item><item><title>MSDyn365BC.Code.History</title><link>https://stefanmaron.com/posts/msdyn365bc-code-history/</link><pubDate>Wed, 13 Jan 2021 16:28:03 +0000</pubDate><guid>https://stefanmaron.com/posts/msdyn365bc-code-history/</guid><description>Did you ever wonder what was changed in a cumulative update in Business Central? Sure, you can read the update notes from Microsoft and read the list of bug fixes they made. But I mean like, really know what was changed. Like, which line was changed on the customer table from between 2 versions?
Well, I did. For my own code I can always go to the repository and see all the code history.</description></item><item><title>In VS Code you want to git stage manually...</title><link>https://stefanmaron.com/posts/in-vs-code-you-want-to-stage-manually/</link><pubDate>Mon, 09 Nov 2020 15:34:55 +0000</pubDate><guid>https://stefanmaron.com/posts/in-vs-code-you-want-to-stage-manually/</guid><description>After a longer break with blogging, I am now back with a really short one. But I thought this would be worth sharing ;)
Thanks to @waldo1001 and @KarolakNatalie who opened my eyes on this one :)
You might know this little message, although you might have already forgotten that you got asked, when you fist started working with VS Code.
It seems like this can really save some time and work.</description></item><item><title>Automated export objects from C/AL</title><link>https://stefanmaron.com/posts/automated-export-objects-from-c-al/</link><pubDate>Mon, 07 Sep 2020 05:44:17 +0000</pubDate><guid>https://stefanmaron.com/posts/automated-export-objects-from-c-al/</guid><description>This time I have some tips on how to use GIT integration when developing in C/AL with docker. When used to AL development one of the first things to notice when going back to C/AL is, that you do not have any version control.
To solve this problem, I added a little bit of SQL code to the [Object] table as SQL Trigger. This trigger exports each edited object as TXT file to specified folder.</description></item><item><title>Business Central and Multiline Fields</title><link>https://stefanmaron.com/posts/business-central-and-multiline-fields/</link><pubDate>Thu, 20 Aug 2020 05:07:52 +0000</pubDate><guid>https://stefanmaron.com/posts/business-central-and-multiline-fields/</guid><description>This topic is probably as old as the RTC client. If you want to display a text field on a Page you will try for around two hours and then you will give up and maybe build a control addin to solve this.
In the web client this problem was not solved by now. We have fields with length up to 2048 but we are not able to display this.</description></item><item><title>AL Lint v0.1.7: Code Metrics</title><link>https://stefanmaron.com/posts/al-lint-v0-1-7-code-metrics/</link><pubDate>Tue, 11 Aug 2020 06:09:23 +0000</pubDate><guid>https://stefanmaron.com/posts/al-lint-v0-1-7-code-metrics/</guid><description>This morning I updated the code metrics calculation in AL Lint. Code metrics are meant to give you some comparable numbers on how complex your code is.
Why is this important information?
In general, if you install this extension, you aim for clean code. This is because code is written once but probably is read multiple times. And the easier it is to understand the more time you will save while reading your code.</description></item><item><title>VS Code extension: AL Lint</title><link>https://stefanmaron.com/posts/vs-code-extension-al-lint/</link><pubDate>Sat, 08 Aug 2020 13:34:19 +0000</pubDate><guid>https://stefanmaron.com/posts/vs-code-extension-al-lint/</guid><description>Maybe you have read this in twitter already: I took over the AL Lint extension for VS Code from Marije Brummel. She searched quite some time already for someone and finally she found me :D
For now I did two things on this extension for now.
I worked myself a little bit into extension development for VS Code and did a little bit of refactoring, updated some dependencies to new versions and removed checks which are now covered by the AL Code Cops.</description></item><item><title>Condition basics in AL</title><link>https://stefanmaron.com/posts/condition-basics-in-al/</link><pubDate>Tue, 04 Aug 2020 12:58:24 +0000</pubDate><guid>https://stefanmaron.com/posts/condition-basics-in-al/</guid><description>Recently I posted a &amp;ldquo;Did you know that &amp;hellip; &amp;rdquo; post on Twitter showing an alternative way to write an if-condition. Today I thought: Hey, I might have some more examples for different ways to write conditions and here we are ;)
First start with the most simple if statement there is:
It just checks if the text variable is empty and if this is the case, some code is executed.</description></item><item><title>Coding4Performance 5: FindSet vs FindFirst</title><link>https://stefanmaron.com/posts/coding4performance-5-findset-vs-findfirst/</link><pubDate>Thu, 23 Jul 2020 06:26:19 +0000</pubDate><guid>https://stefanmaron.com/posts/coding4performance-5-findset-vs-findfirst/</guid><description>Today in coding for performance, we talk a bit about FindSet and FindFirst. I actually had plans to make this one the first post in this series. But it turned out that the differences between this two commands are not as obvious as I first thought.
Let me first place a huge disclaimer here: Everything I test and explain here is done with Business Central version 16. It might be that earlier versions of BC and NAV behaved differently.</description></item><item><title>Coding4Performance 4: Task Scheduler</title><link>https://stefanmaron.com/posts/coding4performance-4-task-scheduler/</link><pubDate>Wed, 15 Jul 2020 09:13:05 +0000</pubDate><guid>https://stefanmaron.com/posts/coding4performance-4-task-scheduler/</guid><description>In my last post about Start Session I explained how you can easily run a Codeunit in background and relieve the user session. The downside on this method is, that your background task still runs on the same server instance like the user session does. If you have only a few users and only one server instance you are good to go. But if not, then the Task Scheduler could be of interest for you!</description></item><item><title>Coding4Performance 3: Start Session</title><link>https://stefanmaron.com/posts/coding4performance-3-start-session/</link><pubDate>Sat, 11 Jul 2020 07:48:15 +0000</pubDate><guid>https://stefanmaron.com/posts/coding4performance-3-start-session/</guid><description>As promised, here the first (and easiest) way to run code in background. This blog will be a bit shorter, as Start session is quite straight forward. Note: If you did not read the previous blog about Background tasks in general , maybe you should start there ;)
I created an example scenario for which a background task could be useful. Maybe you want your customers to be correctly set up before anyone is able to post any invoice or shipment for them.</description></item><item><title>Coding4Performance 2: Asynchronous development and background tasks</title><link>https://stefanmaron.com/posts/coding4performance-2-asynchronous-development-and-background-tasks/</link><pubDate>Fri, 10 Jul 2020 07:52:14 +0000</pubDate><guid>https://stefanmaron.com/posts/coding4performance-2-asynchronous-development-and-background-tasks/</guid><description>In this post I will explain the general concept of asynchronous development and background tasks.
So everyone knows how procedural development works. In Business Central it starts with a user which logs in to the web client and starts a user session. The first page which opens is most likely the role center page. Behind the scenes now every part runs some code and loads some data. Typically this happens from top to bottom.</description></item><item><title>Coding4Performance 1: Text Builder</title><link>https://stefanmaron.com/posts/coding4perfomance-1-text-builder/</link><pubDate>Mon, 06 Jul 2020 08:04:47 +0000</pubDate><guid>https://stefanmaron.com/posts/coding4perfomance-1-text-builder/</guid><description>As NAV and Business Central evolves user tasks become more complex and BC becomes more powerful to solve this tasks. But this happens often with cost in performance. Even Microsoft published a (very good) article about how to improve performance in BC.
I do mainly concentrate on the developer aspect of this article and in this post especially on the TextBuilder Data Type .
So it is described that working with this Datatype instead of gluing strings with += together is much more efficient.</description></item><item><title>How to: Fix problems with Docker DNS resolution</title><link>https://stefanmaron.com/posts/how-to-fix-problems-with-docker-dns-resolution/</link><pubDate>Sat, 04 Jul 2020 17:53:29 +0000</pubDate><guid>https://stefanmaron.com/posts/how-to-fix-problems-with-docker-dns-resolution/</guid><description>Recently I discovered that my BC instance within a Docker container somehow can not access the internet. After some time I figured that the problem was the DNS resolution and I thought I might share two possible ways to resolve this problem with you!
How to check if you have the same problem You can check this by yourself if you enter you BC Container. (Note: You need to have the navcontainerhelper module installed)</description></item></channel></rss>