Category Archives: Dynamics NAV

Xliff Compare & Finding Missing Translations

When working with Extensions I would not recommend working with Xliff files unless you design for AppSource. Otherwise CaptionML will work fine for Per-Tenant projects.

Unfortunately for me, I am working right now on submitting an AppSource project and I need to evaluate if my translations are complete.

As I explained at my presentation in Antwerp at NAVTechDays we continue to code in C/Side and then convert to Extensions and submit to AppSource. Therefor I don’t have the nightmare problem of maintaining Xliff files, I do however need to figure out how complete I am.

So in C/Side I am using CaptionML and when I convert to Extensions I simply use this flag in our converter which I have and you don’t. (Nananana…)

ForNAV Converter

We’ll change that soon. But meanwhile let’s look at the output.


You don’t need to be a rocket scientist to see that for example Czech and Swedish probably have missing captions. But which ones?

Michael has created a simple C# console application that will generate a file you can open in Excel to analyse this.


You can download the tool from our GitHub. Don’t hesitate to make improvements.

Stay tuned for more info and learnings with Extensions, AppSource and converting code…


Compiling a 2000+ Objects Extension

Let’s start diving into working with Extensions in Real Life. I have a lot to blog about and at first I thought I would blog about a very small extension but I’m sure you’ve all seen that.

Let’s start big!

At NAVTechDays I showed you the extension I created with the ForNAV converter that resulted in 2149 files which compiles and executes.

I made the extension work on Business Central OnPrem, installed on my local box with the RTM version.

What is the Build Time? It must be horrible…

You are probably most curious about the build time for this extension. It takes 30 seconds on the RTM version. Not bad, but not perfect either.

Now Microsoft promised that they would improve this experience because they also need it themselves. They asked me to text CU1 and the Daily Docker builds to see if that improves performance.

Runtime 2.1

Today I’ve installed version 2.1.69331 of the compiler and the build time went down to an average of 18 seconds. That is a great improvement! Well done team!

Break it down!

I’m going to keep this version of my extension to test the next versions to see if more improvements come our way.

However, I am also going to break down the monolith and see if I can get to smaller components.

This will also improve the maintainability and makes responsibilities more clear when working with multiple developers.

What’s the perfect size?

If you had asked me that three months ago I would have said 100-200 objects max. But now I think 500 objects should work fine from a compiler perspective.

Remember that when you break your ISV solution down you’ll most likely end up with more objects as you will create table and page extensions on your own objects. It will also be harder to assign object id’s.

To be continued…



Blogging & “The Gap”

A little over a week ago I attended the Dutch Dynamics Community again, for the first time in a while. It was good to catch up and exchange news with peers in my network.

“You’ve been quiet Mark!” is what I’ve been told a few times and that’s true. For some time I try to be quiet and focus on things that are more personal like being a dad of five now and trying to manage the project of fixing up my Land Rover Defender.

It’s not a secret that for quite a while I was in big disagreement with the roadmap Microsoft was following and my resignation as Microsoft MVP was a direct result of that.

“You have enemies? Good. That means you’ve stood up for something, sometime in your life.” ― Winston Churchill

Last week I’ve joined over 1.400 of my fellow Navision enthousiasts into NAVTechDays. In the eight years of the event I’ve done eight presentations. Each year I say it’s the last time and each year someone manages to convince me to do it again. This year Peik asked me to be his wingman and share real life experiences about working with Extensions.

The main session room was full. Only a few empty seats here and there and when I walked out of the room I asked Gunnar if he knew how many were in the overflow room. Many attendees later told me that the overflow room was a standing room. If I remember correctly 700 can fit in the large room and 400 in the overflow room. You can do the math.

The vast majority of the attendees wanted to see real life experiences working with and upgrading to extensions.

This came as a big surprise to me even though my colleague Michael Nielsen keeps telling me almost nobody is using extensions yet except to play with on AppSource with small experiments.

Why is that? Why is our community so conservative?

I’ve asked this to many of the attendees and the most popular opinion seems to be that Microsoft is moving to fast with first Extensions 1.0 and soon after that version 2.0. Many seem to wait and see if there will be a version 3 before it’s time to start.

Well, I have news for you. There will not be a version 3. Extensions as we know today is what we will have to get used to and soon, because Microsoft is determined to discontinue C/Side soon. Very soon.

Or Wait, Will there be “Extensions Version 3.0”?


It’s easy to look back and see how things could have been done differently.

There was huge pressure on the Dynamics SMB teams to release Project Madeira and compete in North America with QuickBooks. Project Madeira failed and The NAV community paid the price for that bet big time being almost killed completely last year right before the start of Directions North America.

Without that pressure the team might have had more time to add Table Extensions and Page Extensions to C/Side as I suggested at the end of my session last week.

Extensions Version 1 with it’s clumsy way of packaging using PowerShell broke the reputation of extensions before it even had a small chance of success in a community that still remembers the pain of the introduction of SQL Server and the Three Tier concept.

Hit Reset and Start slow

Microsoft seems to now have a better understanding of the complexity of it’s own application. The biggest news for me at NAVTechDays was that finally Microsoft announced the refactoring of the core application. Thanks Bugsy!


This decision is crucial for the long term survival of our product in a modern, object oriented world where everything is connected in the cloud now that internet is becoming as reliable as the power grid.

To be able to break the application into Micro Services Microsoft has to introduce new concepts and for this they need Visual Studio Code. It’s something that they cannot do in C/Side, or at too high a cost. Just like adding Table Extensions and Page Extensions would have been too expensive.

Step one will be to move all objects to a Monolith “Extension” where we have to find a new word for “Extension” since it will essentially be the new “Core” we as programmers will start building upon.

Step two is to introduce a new programming concept that will allow Microsoft to decouple into smaller modules with an extendible contract. This concept allows to both extend and replace these modules.

Observe and Learn

In the last two years I’ve seen Microsoft ISV’s burn money and resources trying to make extensions work with the current C/Side monolith and it seems like the majority has been a learning experience most cannot afford.

My advise to the vast majority of my peers would be to give Microsoft time to create this new modular ERP application and use that time to wrap your head around Visual Studio Code.

Extensions are here to stay and Visual Studio Code is our development environment.

Prepare to be broken

One of the biggest fights I did with Microsoft was the ridiculous promise that they would not break extensions and that extensions would be easy to upgrade.

Now with Business Central we all know different. Removing Codeunit1 broke 99.5% of all extensions and Microsoft continues to break extensions and send partners messages about having to change their solutions.


How can I help?

What I will do in the next few months is start publishing the extensions I’ve created in the past year that can be reused in our ecosystem like the phone book app I showed at NAVTechDays or the app that uses the API to synchronize between Business Central databases.

I encourage everyone to do the same. Start sharing code and start blogging. We desperately need blogs with real content rather than announcing a cumulative update or promote something that Microsoft has asked to promote.

In the next few months I will also start to replace some of my DotNET code into Azure functions which is something I’ve been told is holding a lot of ISV’s back.

How do you start?

Soon there will be an easier way to convert your C/Side solutions to extensions as was announced at NAVTechDays. As soon as this is available I will publish it on my blog. The more feedback we get from the community the more we can improve this tool.

Some of you have said to Luc at NAVTechDays that I was a bit over enthusiastic during my session about the origin of this tool so listen very carefully as I will say this only once.

The tool is made my Michael Nielsen, the father of C/AL, and shipped free of charge by ForNAV.

To be continued… Soon…

See you in 2019 at BCTechDays…

Symbols of madness

Red and Bundle

As you know we have been happily developing extensions for a while now. Every once in a while I blog about some stuff I found out recently but it is mostly smooth sailing at the moment.

Today I was stumped though. For some reason my symbols were not loading. I make it a point to always develop extensions on a standard NAV2018 database (our current version, move to BC on prem is planned but not yet started) but sometimes I need to add functions or parameters that have been requested through Microsoft’s GitHub. And then of course load symbols. Now my symbols are always created automatically by using the finsql command line switch generatesymbolreference=yes as described here. And it always works. I thought.

So what had happened? I had updated my local NAV2018 to CU 9 a while ago. No problems there, just some bug fixes I needed…

View original post 167 more words

Execute a PATCH call from an Extension by using AL and HttpClient

Stefano Demiliani

If you work with REST APIs, you already know that you’ve two HTTP methods for updating resources:

  • PUT: updates an entire resource
  • PATCH: the update request only needs to contain the changes to the resource, not the complete resource.

The AL language permits you to work with REST services by using the HttpClientclass. If you declare an HttpClient object in AL, from Intellisense in Visual Studio Code you can see that you have the following methods for working with resources:


Where is Patch?? How can I perform a Patch REST call? Is this not supported?

The answer is no, the solution to perform a Patch request is just a bit hidden (don’t ask me why 🙂 ). Here is how you can send a Patch request to a REST resource from AL:


The key here is to add a PATCH method to the HttpRequestMessage object and then calling the

View original post 9 more words

Dynamics 365 Business Central October release

Totovic Dynamics Blog

Long time no see. I’m currently on vacation and finally found some time for writing. I don’t know if you already read Business Applications Release Notes – October ’18. If you are, don’t read this article :). But if you didn’t already read, you can get some basic overview what we will get in October.

First one technical news, from October we can use Business Central, on-cloud, on-prem and in hybrid deployments. And even more, you can use existing Dynamics NAV on-prem solution in hybrid model connecting to the cloud through Business Central. In both of cases, using Business Central or NAV on-prem, you can have your tenant on a cloud, where your data will be replicated. If you decide in one moment to continue only with cloud, it will be very easy task for you. But it is important to know, in this scenario you need to…

View original post 514 more words

Three ways to use extension data in C/Side

Red and Bundle

So, I get it now. We need to develop in extensions. Nothing but extensions. We need to tell our employers to forget about new requirements for half a year and ignore bugs while we developers lock ourselves in the basement and rework our existing code to an extension. Right?

Well, locking developers in a basement will probably appeal to a fair number of managers. Not developing new requirements or fixing bugs for said amount of time will definitely not. Like it or not, many of us face working with hybrid systems.

Where I work we now have extensions in a heavily modified C/Side code base. So when my Colleague phoned me a while back to ask me how in hell he could get a field from our extension onto a C/Side report I had to put my thinking cap on.

So far I came up with three workable methods of…

View original post 347 more words