(Slightly) More Elegant Error Handling in Business Central
Jul03

(Slightly) More Elegant Error Handling in Business Central

This is an intro post to the Error Message Mgt. codeunit and related objects. NAV has never brilliant when it comes to error handling, for a couple of reasons. The error messages themselves sometimes leave a lot to be desiredThe whac-a-mole nature of fixing multiple errors by finding one at a time and attempting to post/register again There isn’t a lot we can do about the standard error… Continue Reading james’s...

Read More
Share Docker Containers With VS Code Live Share
Jun05

Share Docker Containers With VS Code Live Share

If you weren’t working remotely before 2020 then we’ve all had to guess used to it this year. Collaboration tools like Teams are invaluable for keeping up with teammates during the day, discussing work and bouncing ideas and banter off each other. Video calls, screen sharing, chat, shared documents, gifs – that’s all great – but not quite a replacement for sitting at the same desk and looking…...

Read More
Tip: Octopus Merges in Git
May21

Tip: Octopus Merges in Git

If you occasionally glance at my blog you might have noticed that I am a big fan of pull requests as served up by Azure DevOps (exhibit A). I briefly described our typical branching strategy here, including how and why we use pull requests. I love it. Writing, testing and reviewing discrete pieces of development independently of one another helps spread the work around the team and prevent… Continue Reading james’s Article...

Read More
Testing Internal Functionality
May19

Testing Internal Functionality

Internal Access Modifier We’ve had access modifiers in Business Central for a little while now. You can use them to protect tables, fields, codeunits and queries that shouldn’t be accessible to code outside your app. For example, you might have a table that contains some sensitive data. Perhaps some part of a licensing mechanism or internal workings of your app that no one else should… Continue Reading james’s...

Read More
Getting Started with Git Hooks
May11

Getting Started with Git Hooks

Git hooks have been on my “to mess about with and learn a little some day” list for a while. It’s the old conundrum: I might use them if I knew what they could do, but I’m not going to learn about them until I’ve got a use for them. Chickens-and-eggs for developers. The Problem Until recently, that is. I wondered: What is the best way to save a different launch configuration in VS… Continue Reading...

Read More
“Discrete Business Logic” implements Interface
Apr28

“Discrete Business Logic” implements Interface

If you’ve read anything about what is new in BC16 for developers then you’ll have seen that AL now supports interfaces (fanfare). No more convoluted workarounds with events – at least once our customers have upgraded. I won’t explain what interfaces are and how to use them in AL. You can read the release notes here or blog posts like this and this. Instead I’m going to share some thoughts… Continue...

Read More
Performance of Test Code
Apr16

Performance of Test Code

Let’s talk about the performance of the test code that we write for Business Central. What do I mean by “performance” and how can we improve it? Defining “Performance” Obviously, before we set out to improve something we need to have an idea of what it is we’re trying to optimise for. I’m coming to think of the performance of test code in a couple of key ways: How easy/quick is it to…...

Read More
Tip: Case Insensitive Glob Patterns
Apr08

Tip: Case Insensitive Glob Patterns

I must admit I hadn’t heard of glob patterns until seeing some settings in VS Code that use them. They are a way of defining a pattern that matches one or more files and folders. For example, the Text Editor section of the settings (UI) in VS Code allows you to exclude files and folders from the file explorer with glob patterns and gives you this useful link for more information. My AL… Continue Reading james’s...

Read More
Managing Business Central Development with Git: Platforms
Apr03

Managing Business Central Development with Git: Platforms

Another post about Business Central development and Git. Maybe the last one. Who knows? Whatever your precise circumstances, if you are developing apps for Business Central you have to be mindful of the differences between BC versions and how it affects your app. If you are only developing for SaaS you might only care about the current and next version. If you are developing and… Continue Reading james’s Article on their...

Read More
Problem with Case Statement in Business Central 13
Mar24

Problem with Case Statement in Business Central 13

This is a a pretty niche post. Hopefully this problem only exists in a specific set of circumstances, in Business Central v13, but we wasted enough hours of our lives chasing it down yesterday that I thought I’d share it. Consider this case statement: i := 3; test := true; case i of 1: exit(‘i equals 1’); 2: if test then exit(‘i equals 2, test is true’) else if… Continue Reading james’s...

Read More
Managing Business Central Development with Git: Branching Strategy
Mar19

Managing Business Central Development with Git: Branching Strategy

The last few posts have been about manipulating the history of your Git repository, getting comfortable tools like rebase, reset, cherry-pick and commit –amend. That’s all geared towards trying to create a history which is more than just a record of stuff that happened but tells a story of the development of your app that is useful for your colleagues and your future self. This post is on… Continue Reading...

Read More
Tip: Format AL Files OnSave in Visual Studio Code
Mar02

Tip: Format AL Files OnSave in Visual Studio Code

Maybe everyone else is already doing this and I’m just slow on the uptake but Visual Studio Code has options to automatically format files at various points. The AL extension for VS Code provides a formatter for .al files. You can run it manually with the Format Document command (Shift+Alt+F). This inserts the correct number of spaces between parameters and brackets, indents lines… Continue Reading james’s Article on...

Read More
Managing Business Central Development with Git: Branches
Feb25

Managing Business Central Development with Git: Branches

Obligatory Preamble I wasn’t really intending to write this post. If you want training materials for learning the basic concepts of Git then there is tonnes of great free content around on blogs and YouTube channels. I was going to share some thoughts about our branching strategy but thought I’d write a little about manipulating branches first. Amble When I was new to Git and trying… Continue Reading james’s...

Read More
Managing Business Central Development with Git: Rebasing
Feb19

Managing Business Central Development with Git: Rebasing

This is part two of a series about using Git to manage your Business Central development. This time – rebasing. It seems that rebasing can be something of a daunting subject. It needn’t be. Let’s start with identifying the base of a branch before worrying about rebasing. Example Repo Imagine this repository where I’ve created a new branch feature/new-field-on-sales-docs to do some… Continue Reading...

Read More
Managing Business Central Development with Git: Amending History
Feb13

Managing Business Central Development with Git: Amending History

Preamble This is the start of a series of posts about managing AL development with Git. I don’t profess to be a Git expert and much of what I write about will not exclusively apply to Business Central development. This is a collection of approaches I’ve found to be useful when it comes to managing our source code. Take what you will, discard the rest, vociferously argue with me if you feel… Continue Reading...

Read More
Testing Against a Remote Docker Host with AL Test Runner
Feb10

Testing Against a Remote Docker Host with AL Test Runner

Apologies for another post about AL Test Runner. If you don’t use or care about the extension you can probably stop reading now and come back next time. It isn’t my intention to keep banging on about it – but the latest version (v0.2.1) does plug a significant gap. Next time I’ll move onto a different subject – some thoughts about how we use Git to manage our code effectively. Developing… Continue...

Read More
Remote Development with VS Code and AL Test Runner
Jan28

Remote Development with VS Code and AL Test Runner

The most obvious limitation of the AL Test Runner extension for VS Code has been that you need to run VS Code on the Docker host machine. That’s fine for us because we do all our development on local Docker containers but I’m aware that this isn’t everyone’s preferred process. Local Repo and VS Code, Remote Docker Host I guess if you’re not hosting the Docker container locally then you… Continue...

Read More
Scheduling Azure DevOps Pipelines with YAML
Jan15

Scheduling Azure DevOps Pipelines with YAML

I had the pleasure of presenting some thoughts about developing apps for SaaS with James Crowter to the Dutch Dynamics Community yesterday. We were sharing some of our experiences of the maintenance challenge that comes with having published apps on AppSource. How can you continuously test your apps against past, current and upcoming versions of Business Central? Perhaps two ways: Slowly… Continue Reading james’s Article...

Read More
Putting Queries to Use in Business Central
Jan08

Putting Queries to Use in Business Central

We’ve had query objects for a while now – since NAV 2013 (I think). In theory they sound great, link a bunch of tables together, aggregate some columns, get distinct values, left join, right join, cross join – executed as a single SQL query. Why Don’t We Use Queries Much? In practice I haven’t seen them used that much. There’s probably a variety of reasons for that: We have limited… Continue...

Read More
AL Test Runner 0.1.15
Dec24

AL Test Runner 0.1.15

This is a brief update about the AL Test Runner extension that I’ve been working on for VS Code. I’ve had some great feedback and suggestions via GitHub, a pull request correcting me being a muppet and 300-odd installs so far. Thanks to everyone who has got involved to improve it. This version includes a new setting “Publish Before Test” which allows you to invoke either the “Publish… Continue...

Read More
Some More About Translating Business Central Apps
Dec16

Some More About Translating Business Central Apps

I’ve written before about using Azure Cognitive Services to translate the captions in the .xlf file that is generated when you compile your Business Central app. For us, the motivation is to make our apps available in as many countries as possible in AppSource. Since then Søren Alexandersen has announced that it will not be necessary to provide all of a country’s official languages to make… Continue Reading...

Read More
AL Test Runner for Visual Studio Code
Nov18

AL Test Runner for Visual Studio Code

TL;DR I’ve written an extension for VS Code to help run your AL tests in local Docker containers. Search for “AL Test Runner” in the extension marketplace or click here. Feedback, bugs, feature suggestions all gratefully received on the GitHub repo or james@jpearson.blog Intro As soon as Freddy added capability to the navcontainerhelper module to execute automated tests I was excited… Continue Reading...

Read More
Prompting the User for Input with PowerShell
Nov08

Prompting the User for Input with PowerShell

Sometimes you need to prompt the user to provide some value before you can complete your PowerShell script. You’ve got a few different options depending on what you’re asking the user to select from. Parameters Setting a parameter as mandatory without providing a value will prompt the user to enter one, like this: function Invoke-AmazingPowerShellFunction { Param( … Continue Reading james’s Article on their...

Read More
Satisfying Your Case-Sensitive Obsession with Regex
Oct23

Satisfying Your Case-Sensitive Obsession with Regex

Obsession is probably a little strong, but I do like tidy code. You know – proper indentation, a sensible number of comments (which can be more than none but there shouldn’t be as much comment as code) and good names. Hungarian notation brings me out in a rash. This extends to having keywords, variables and methods in the right case. While in CAL there was a lot of UPPERCASE, in AL there is… Continue Reading...

Read More
You Can Ditch Our Build Helper for Dynamics 365 Business Central
Oct22

You Can Ditch Our Build Helper for Dynamics 365 Business Central

I’m a bit of a minimalist when it comes to tooling, so I’m always happy to ditch a tool because its functionality can be provided by something else I’m already using. In a previous post I described how we use our Build Helper AL app to prep a test suite with the test codeunits and methods that you want to run. Either as part of a CI/CD pipeline or to run from VS Code. Freddy K has… Continue Reading...

Read More
Stop Writing Automated Tests and Get On With Some Real Code
Oct14

Stop Writing Automated Tests and Get On With Some Real Code

To be fair, these weren’t the exact words that were used, but a view was expressed from the keynote stage at Directions last week along these lines. Frustration that developers now have to concern themselves with infrastructure, like Docker, and writing automated tests rather than “real” code. I couldn’t resist a short post in response to this view. If It Doesn’t Add Value, Stop Doing… Continue...

Read More
Debugging the Next Session in Business Central
Oct04

Debugging the Next Session in Business Central

Business Central v15 includes some good new stuff for developers. Access modifiers for objects, smarter code analysis, background page tasks – there is a list of stuff here: https://docs.microsoft.com/en-us/dynamics365-release-plan/2019wave2/dynamics365-business-central/developer-tools I’ve just been trying out the new debugger capability, specifically being able to attach the debugger to… Continue Reading...

Read More
Using Templates in YAML Pipelines in Azure DevOps
Oct01

Using Templates in YAML Pipelines in Azure DevOps

So far we’ve been considering how you can define a yaml pipeline to define the steps required to build the code in a single repository. Create a .azure-pipelines.yml file, add the stages, jobs and steps and away you go. Cool. What if you’re building multiple apps with the source code in multiple repositories though? You could just copy your pipeline definition from repo to repo. What… Continue Reading james’s...

Read More
YAML Multi-Stage Pipelines in Azure DevOps, Stage 2
Sep25

YAML Multi-Stage Pipelines in Azure DevOps, Stage 2

In the previous post I introduced you to multi-stage YAML pipelines. Build/Release pipelines vs. a multi-stage pipeline, enabling the preview feature (it’s still in preview at the time of writing) and an overview of the structure of the file. Now we’ll take a more detailed look at an example multi-stage YAML file. This is geared at building apps for Business Central but the principles are… Continue Reading...

Read More
YAML Multi-Stage Pipelines in Azure DevOps, Stage 1
Sep19

YAML Multi-Stage Pipelines in Azure DevOps, Stage 1

Let’s return to the subject of pipelines and this time let’s talk multi-stages. What is it and why might you want to implement it in your YAML file? Builds/Releases With the approach that Microsoft are now calling “classic” pipelines there was a definite division between a build pipeline and a release pipeline. A build starts with a given version of your source code (a particular… Continue Reading...

Read More
AL Build Helper for Dynamics 365 Business Central Builds
Sep12

AL Build Helper for Dynamics 365 Business Central Builds

If you’re interested in setting up a build pipeline to build apps for Business Central then you’re probably interested in running the automated tests as part of it. (I take it you are writing automated tests?) Turns out getting your test codeunits and methods populated into a test suite ready to run isn’t straightforward. We use a separate “Build Helper” app that exposes a couple of web… Continue...

Read More
Dynamics 365 Business Central Queries: Erm…where are the rest of my rows?!
Aug08

Dynamics 365 Business Central Queries: Erm…where are the rest of my rows?!

This is a bit off-topic to what I’ve been blogging about lately but I’ve been caught out by this before and the other day so was a colleague so I thought it was worth a post. TL;DR Be careful of the difference between DataItemLink and DataItemTableFilter properties. DataItemLinks define the join between the dataitems in the query while DataItemTableFilters are applied to the results… Continue Reading james’s...

Read More
Working with Translations in Dynamics 365 Business Central
Jul31

Working with Translations in Dynamics 365 Business Central

Intro Languages: what an almighty headache. Computerphile have a great video that describes just how big the problem is: https://www.youtube.com/watch?v=0j74jcxSunY Perhaps my perception is skewed by my ignorant native-English-speaker point of view. I haven’t grown up in a country where learning multiple languages and being able to switch between them is essential. Sure, I wish* I could… Continue Reading james’s...

Read More
Building Microsoft Dynamics 365 Business Central Apps on Azure DevOps Hosted Agents
Jul09

Building Microsoft Dynamics 365 Business Central Apps on Azure DevOps Hosted Agents

This is a quick follow up to this post. If you want an intro to building AL apps for Business Central you might want to check that out first. In order to build your apps you need a build agent running somewhere which will listen for new jobs and run the scripts, create the Docker containers, run the tests or do whatever else you define in the build file. You can install an agent on your… Continue Reading james’s Article on...

Read More
Building Microsoft Dynamics 365 Business Central Apps with Azure DevOps
Jun24

Building Microsoft Dynamics 365 Business Central Apps with Azure DevOps

Last time out we were discussing defining your build pipeline in a YAML file. That post was an intro to what pipelines are and the benefits of defining the tasks that it runs in a YAML file alongside your other source code. Now we’ll turn our attention to some Business Central specific considerations. Objectives We’re start by defining the key objectives of the build… Continue Reading james’s Article on their...

Read More
Working with Azure DevOps Pipelines in YAML – James Pearson
May21

Working with Azure DevOps Pipelines in YAML – James Pearson

Overview This post is an update to a post I made about YAML pipelines here. We’ll also take the opportunity to discuss why you might want to define a pipeline with YAML. Wait…What? What the heck are we talking about? (skip this bit if you do know what we’re talking about) A pipeline defines a series of tasks, running on defined environments that are performed with your code…. Continue Reading james’s Article on their...

Read More
Testing Your Microsoft Dynamics 365 Business Central Tests – James Pearson
May13

Testing Your Microsoft Dynamics 365 Business Central Tests – James Pearson

Seeing as I’m on a bit of a run of posts about testing, let’s look at it from a slightly different angle. Testing the Test If we’re going to rely on automated tests to verify that our code (still) works then we need to have confidence that the tests themselves actually work. Writing the Test First This is why it is helpful to write and run the tests first. When you start developing a… Continue Reading james’s Article on...

Read More
Part 3: Testing Microsoft Dynamics 365 Business Central from VS Code
May01

Part 3: Testing Microsoft Dynamics 365 Business Central from VS Code

Another instalment of my musings on running automated tests for Microsoft Dynamics 365 Business Central from Visual Studio Code. Objective What are we up to this time? As a brief reminder, I’m trying to make it as easy as possible to run automated tests from Visual Studio Code. I figure the faster and simpler it is to publish your code changes and run the tests the more inclined you are going… Continue Reading...

Read More
Part 2: Testing Microsoft Dynamics 365 Business Central from VS Code
Apr29

Part 2: Testing Microsoft Dynamics 365 Business Central from VS Code

Last time out we went through running automated tests from the PowerShell terminal integrated into VS Code. We saw that you could define a task in the tasks.json file to run the tests and assign a keyboard shortcut for that task. Great. But. In order to run tests they first need to have been added to a test suite. You could add some code to an install codeunit in your app to do that for you (

Read More
Testing Microsoft Dynamics 365 Business Central from VS Code – James Pearson
Apr23

Testing Microsoft Dynamics 365 Business Central from VS Code – James Pearson

Execute your Microsoft Dynamics 365 Business Central tests – with a keyboard shortcut – without leaving the comfort of your favourite IDE. What’s not to love? Background We’ve come a long way with testing our apps in Microsoft Dynamics 365 Business Central / NAV. By “we” I mean our internal development practices but also the capabilities of the platform. We didn’t have any… Continue Reading james’s Article on their...

Read More
Calling SOAP Services from PowerShell – James Pearson
Apr09

Calling SOAP Services from PowerShell – James Pearson

Like most of my posts this has its origin in Microsoft Dynamics 365 Business Central development – specifically our build process – although it isn’t limited to that. We had a need to call a SOAP web service from PowerShell (see below for the background if you’re interested). In the past I’ve used Invoke-WebRequest and added content-type and a SOAPAction header to the request.

Read More
Chaining Builds in Azure DevOps – James Pearson
Mar27

Chaining Builds in Azure DevOps – James Pearson

We are triggering a lot of builds in Azure DevOps these days. If anyone so much as looks at an AL file we start a new build. OK, that’s a small exaggeration, but we do use our build pipelines for: Continuous integration i.e. whenever code is pushed up to Azure DevOps we start a build Verifying our apps compile and run against different localisations (more of that another time) Checking… Continue Reading james’s Article on...

Read More
An Approach to Package Management in Dynamics 365 Business Central – James Pearson
Mar18

An Approach to Package Management in Dynamics 365 Business Central – James Pearson

We use PowerShell to call the Azure DevOps API and retrieve Build Artefacts from the last successful build of the repository/repositories that we’re dependent on. Over the last few years I’ve moved into a role where I’m managing a development team more than I’m writing code myself. I’ve spent a lot of that time looking at tools and practices in the broader software development… Continue Reading james’s Article on their...

Read More
Getting Started with the Azure DevOps API – James Pearson
Feb28

Getting Started with the Azure DevOps API – James Pearson

Azure DevOps is pretty sweet. Manage your code, backlog, sprints, builds – the whole caboodle. Also, it has a comprehensive REST API so you can access your data and integrate with DevOps from anywhere you like. Ever since we started with DevOps (VSTS, TFS) we created some PowerShell scripts to integrate with it for Dynamics NAV development. They’ve become an indispensable part of a… Continue Reading james’s Article on...

Read More
Working with Version Numbers in Dynamics Business Central / NAV – James Pearson
Feb07

Working with Version Numbers in Dynamics Business Central / NAV – James Pearson

Specifically I’m talking about assigning version numbers to your own code and manipulating those versions in CAL / AL and PowerShell. There are lots of different systems for assigning a version number to some code. Some incorporate the date or the current year and day number within the year. Loads of background reading here if you’re interested. The system we typically follow… Continue Reading james’s Article on their...

Read More
5 Things – James Pearson
Jan31

5 Things – James Pearson

Visual Studio Code has moved quickly from “what’s that? Part of Visual Studio? No? Then why did they call it that?” to become the hub of much of my daily work. This post contains a few of the things (5 to be precise) that I’ve done to make it work better for me. Maybe you can glean something useful. Maybe you can teach me something about how you use it – post a comment. You can… Continue Reading james’s Article on their...

Read More
Regular Expressions in Visual Studio Code Search – James Pearson
Jan16

Regular Expressions in Visual Studio Code Search – James Pearson

Having spent years developing in C/SIDE I still get a little giddy using Visual Studio Code’s modern IDE features. You know, finding references to a function, renaming symbols, peeking definitions. Also, being able to search across all of your source code. What a dream. Even better, you can search for a regular expression – that very powerful, if not slightly bonkers, way of searching… Continue Reading james’s Article on...

Read More
An Introduction to Pull Requests in Azure DevOps – James Pearson
Jan09

An Introduction to Pull Requests in Azure DevOps – James Pearson

I’ve previously written about our experience with source control and our eventual migration to Git. I said that pull requests in Azure DevOps are awesome and are one of the biggest reasons to consider the switch to Git. In this post we’ll dig a little more into the details of why they are so good and how to use them. Before we start, don’t forget that code review (i.e. pull requests… Continue Reading james’s Article on...

Read More
Automatically Creating a CI Pipeline in Azure DevOps with YAML – James Pearson
Nov29

Automatically Creating a CI Pipeline in Azure DevOps with YAML – James Pearson

TL;DR Name your yml file .vsts-ci.yml and put it in the root of your project. What Does the Title Mean? There is a lot of chat about build pipelines and continuous integration (CI) at the moment. For the uninitiated let’s break down the title of this post: CI = continuous integration, the practice of integrating ongoing development into your master development branch as soon as… Continue Reading james’s Article on their...

Read More
Integration Between Extensions in Dynamics 365 Business Central – James Pearson
Nov12

Integration Between Extensions in Dynamics 365 Business Central – James Pearson

Extensions provide the opportunity for us to write and maintain our code in tidy, discrete blocks. This is good for separating concerns and breaking our functionality into logical pieces. But how do we get those pieces to play nicely together? The topic is probably best discussed with an example. Imagine that you’re writing some functionality to pull some files, handle them in Business… Continue Reading james’s Article on...

Read More