Episode 3 – BC Fall Release | Finding Stuff

UPDATE!! Microsoft is listening!!

Big news, it seems that Microsoft is fixing the issues we’ve found in our App for AppSource. Both the functions on the TempBlob and the Language table will be added back!

But also, let’s continue where we left off with the previous episodes because there are more challenges that won’t be fixed. Let’s see if we can fix some reference problems.

Before we do that, please allow me to repeat that despite these breaking changes Business Central remains by far the best customizable ERP system in the cloud.

For this blog post I’m going to fix the errors in the ForNAV Modern Object Designer as Extention. Benefit is that you can do this yourself too. Just download it from http://www.fornav.com, convert it using the fornav converter against spring and than connect it to the Docker. (end of advertizing ForNAV)

Issue #1 – Renamed Codeunits

After connecting the extension to Fall we see that the codeunit NavExtensionInstallationMgt is missing.

However… this is not true, and very confusing.

Reason for this, is that Microsoft RENAMED a codeunit (they actually renamed a bunch). Now in the old days this was NOT DONE, even though in this case C/Side would have handled the rename for us because C/Side works at compile time with object ID’s. This is because C/Side was developed in the late ’80ies early ’90ies when memory was expensive.

Visual Studio Code works with object names. So how do we figure out the new name for this codeunit???

The obvious answer here would be to install the ForNAV Modern Object Explorer but hey, we are fixing this now right? So let’s go nerdy and hack into SQL and see what’s going on there.

In C/Side we can see that the Codeunit ID is 2500. But Fall does not ship C/Side.

Let’s see what we can find in the SQL Server database.

Accessing SQL on Docker

If you run Docker you can still access SQL via Management studio. An SA account is created with the same password as your NAV user. The SQL does not have an instance, so just connect to the IP address of the container.

The default name of the database is Financialsw1 which I think is funny and a remainder of our temporary product name. If you want you can also relate it back to Navision Financials.

First place to look would be the Object Table. So let’s run a query.

Select * from [Object]

No results, which makes sense because there is no more C/Side and all code is in an Extension.

SELECT [Object Name], * FROM [NAV App Object Metadata] where [Object ID] = 2500

So let’s see what we can find in the NAV App Object Metadata table

Here it is, and now it is called “Extension Installation Impl”. So let’s try that!

Issue #2 – Protection

So we’ve found the codeunit’s new name. Yeah! Let’s change it and see what happens.

One of the functions started working, but one did not, and the codeunit still does not compile.

The reason for this is the protection level of the codeunit, and a broken contract. But how do we investigate that?

If you try Go To Definition on the object, you still get a “D/AL” file with no code, and it seems like Microsoft is not shipping the AL code in the App file on the Docker Container for the System app. Also we don’t know yet if it is in the system app.

Back to SQL Server

select * from [NAV App] where [Package ID] = '6418C5AF-4672-43DA-AD73-FF140FBBD537'

From the previous query we know that the App the object belongs to has ID 6418C5AF-4672-43DA-AD73-FF140FBBD537.

If we query that app in the NAV App table we can see it is system.

Now the next thing we need to do is clone the GitHub from https://github.com/microsoft/ALAppExtensions. This will get us the sourcecode, but Go To Definition does not work.

I’ll make it easy for you, the code is in https://github.com/microsoft/ALAppExtensions/tree/master/Modules/System/Extension%20Management/src

Codeunit 2500 has a property called Access which is set to Internal. Even if my extension is set to OnPrem I cannot access this function.

Step 3 – The Fix

In my case, the fix is easy. Just clone the code from CU 2500. It’s a fix I hate but IMHO unavoidable in this case.

Step 4 – Compile, Yes!!!

When you now run the MOD (Modern Object Designer) and filter on Object ID = 2500 you can see why I like this thing so much…

And then… No….

Now I should be able to export the object from the MOD but when I try I get this error?

And for a good reason, look at the variables!

Remember, we don’t have a Windows Client anymore? So we cannot run DotNet on client either.

For this I need more time to figure out a solution but I would also ask Microsoft to please enhance the compiler. I should not be able to compile and publish this extension against FALL release.

Episode 2 – BC-Fall Release Wave II | Checking Your Extension

Before we dive into the list of (breaking) changes that I’ve discovered so far, I will first explain how to check your extension against the preview of the fall release.

This is mostly interesting for those who are on AppSource or partners who have refactored their IP into On Prem extensions. I’m going to assume all of them have access to the Ready to Go program. If not, send me a message and I’ll help you onboard.

In another episode we’ll dive deeper into making your own Base App run on System.

So assuming you have a running service tier (on Docker or via de DVD on your machine) we need to make a few changes to the App.Json.

NOTE: You first need a new VSIX compiler. Download this from the Docker or DVD.

Plaform & Application

The Platform version needs to be changed to 15. The application needs to be removed. There is no more application.json file with symbols.

Now the dependencies need to be set. There are (most often) two apps needed here

BaseApp

Not really a “Marketing Friendly” name for the whole old Navision solution converted to AL code, but that’s it actually.

GUID =  437dbf0e-84ff-417a-965d-ed2bb9650972
Version =  "15.0.0.0"

Essentially you’ll get the same information as in previous versions with the app.json file generated by the finsql.exe but the .app file contains source code. I’ll get back to that in next episodes.

System Application

No consistency here. You would expect it to be called SystemApp, or BaseApp to be called Base Application. 😉

This is not to be confused with the platform .app file you’ll still get too. This still contains the 2 billion system objects that just are magically there (I think still maintained by finsql.exe when generating the database)

The new System Application is actually what you can find here on GitHub. But this seems not to contain source code. Again, more in a next episode.

Some examples of application parts that are moved to System Application are

  • TempBlob
  • Language
  • Tenant and Azure AD management
  • DotNET stuff
  • Etc.
GUID =  63ca2fa4-4f03-4f2b-a480-172fef340d3f
Version =  1.0.0.0

Your app.json file will now look something like this

Delete Old Symbols

It’s always a good idea to remove old symbol files before moving on. The compiler always looks at the latest version but here it might get confused because of all the moving parts.

Download new Symbols

Now just get the new symbols and your window will look something like this and starts showing you the warnings and errors.

Please note this is the result after some cleaning up. I’m not finished. I’ll write more about TempBlob and other refactoring challenges later.

See you in the next episode.

Episode I – BC-Fall Release Wave II | The Upgrade Dream Shattered

Be careful what you ask for, you might actually get it.

This phrase illustrates what we will see when Microsoft releases Business Central Wave II this October where C/Side is removed in favor of Visual Studio Code, The Windows Client discontinued in favor of the Web Interface and the old Navision application is broken into two parts and very heavy refactoring has taken place.

For years, we as a community have been asking Microsoft to modernise NAV in order to be more attractive to young developers and move to modern development methods.

Wave II is the result of a plan that started execution many years ago and the managers who executed the plan no longer work at Microsoft. This is scary and in a series of blog posts I’ll illustrate the challenges you can expect as a partner when you try to move your solutions to this new platform.

Today I’ve analysed the impact of the refactoring done my Microsoft on the AppSource solution I’ve developed for ForNAV. The Customizable Report Pack. After my analysis Michael Nielsen and I carefully concluded that Microsoft in our estimates has broken 99,9% of all solutions on AppSource and each and everyone will have to go through a certain level of refactoring.

In the next few blog posts I’ll explain some of our challenges based on what I’ve found in the new System App that is publically available on GitHub. Our challenges with the new Base App are limited, but even if they were huge I think this is still under NDA and in private preview. Need to be careful here. Hopefully the BaseApp will be publically available by the time my posts reach this part.

The Upgrade Dream Shattered

Let’s get back to the title of the blog. This was not just there as click bait and I will elaborate on that.

Upgrading Navision has always be a challenge. I don’t think anyone in the community disagrees to call that the Achilles’ heel of our framework so when Microsoft management used this as a reason to change we do development in NAV not a lot dared to think about complaining here.

In the same time a our community started to rant that NAV development was not modern enough and they demanded change.

F#$^@K

The idea was to make upgrading easier for both Developers/Partners and Customers. As long as partners would migrate their solutions to an extension life would be easy. If customers moved to BC-Cloud they would be upgraded automatically.

This has consequences that some might say are unexpected and others would clame “I told you so”.

From a partner perspective the first crack occured when Codeunit 1 was removed. Not a major change but enough to keep everyone busy and break most of the solutions out there. It made it especially hard on ISV’s that try to keep a codebase in synch with many NAV versions out there.

With this Fall release it becomes clear that there is no such thing as a free ride. For example this line of code will no longer compile:

CurrReport.LANGUAGE := Language.GetLanguageID("Language Code");

Which all of us will recognise as being present in 95% of all customers customized reports.

The first extensions on AppSource are already rated with 1 star by customers because they simply don’t work or are not easy enough to setup. For most partners the economic value of an extension is not high enough to justify the cost.

From a Customers perspective it’s also not all sunsine. Customers may have asked Microsoft for easier upgrades, but nobody ever anticipated that if you have a large company with for example multiple locations your IT department can never keep up explaining new features and changes to users. Many companies still struggle with (sometimes older) users who simply remember to click on the third button from the right and if that is suddenly the second button they can’t do their work.

I had this experience myself. I use Exact Online for my accounting. Not out of free will but because my accountant supports it and I have to pay extra to run other software. When I got back from vacation last week I quickly wanted to check my balances and the dashboard had been completely redesigned. A quick check that should have been seconds became 15 minutes and it was even full of weird errors.

On top of this hard to manage experience most Business Central customers I work with have customizations. Per-Tenant extensions. In some cases they have their own Invoice report with, yes, the line of code that will change the language.

These per-tenant extensions will break with Fall Update and the customers will be forced to pay the partner for the upgrade, where in the past they had the option to continue on the old code at least until off-season where they have time.

So all concluded I think it is fair to say the marketing people can stop claiming that the upgrade problem has been fixed. It’s not and in some ways it has gotten worse.

As said this is just the first post in a series. My head is totally full of ideas and stuff I want to share.

Keep Positive!

Business Central is still by far the best customizable ERP system. Some things are getting worse, some get better. I’m sure at some point in time someone somewhere in a corner office in Redmond will start realizing that effort needs to be put into the places where we are getting worse. I hope this series of blogs will help both partners and Microsoft move forward.

Opinion – What will happen in fall with Business Central

As far as I remember, social media around Business Central/NAV(ision) has never been as quiet as in the last months.

There is nothing from the MVP’s anymore and it seems the majority of partners are in the dark about that’s going on at Microsoft.

While this is true, Microsoft is updating the GitHub with the new AL foundation periodically with new code but without explaining the strategy. (https://github.com/microsoft/ALAppExtensions)

In fall, Microsoft will release the first Business Central without C/Side and refactored AL and because of that the shipping of daily insider builds has been blocked for a few months.

In the “old days” Microsoft would have code freeze before summer vacation and partners would get a build (DVD) which was very close to what Microsoft would ship at Directions.

Now there is nothing, except the GitHub without any guidelines on how to use it.

I’ve seen speculation that foundation will be dozens of small extensions, but I think this is a false rumour. My expectation is that each BC install will have three extensions.

Foundation

This is what you see on GitHub today. Most of which is stuff that should probably be part of the AL programming language such as TempBlob and Excel Buffer. Things NUGET offers for DotNET.

Application

This is what we have today as General Ledger, Inventory, Sales & Purchase, Jobs, Manufacturing etc.

This will be based on Foundation, but not broken up into smaller extensions even though that would be my preferred choice. Microsoft should have started that years ago and now they simply lack the time and skills. They fired most of the functional folks years ago in favor of a large platform and UI team.

This will lead to much rewrite of code, but not as much as most think.

After this I hope and expect that the design of the Application will be frozen since Microsoft cannot expect their partners to continuously refactor their code. We simply don’t have the resources to do that. Most partners don’t even have automated testing in place and refactoring is too expensive.

Large partners can write their own Application on top of Foundation allowing them to be on AppSource without Microsoft having to add half a million events for each business case.

Localizations

This is probably the coolest part if Microsoft can pull it off. Each localization will be an extension on top of Foundation and Application

Speculation & Opinion

I’m writing this in order to start a discussion and get some feedback what others expect. The information in this blog post is in no way confirmed by Microsoft.

Meta UI Control Add-Ins for Business Central, how and why…

Today we’ve successfully completed a workshop at Vos Transport with Global Mediator where we did a demo/prototype of a new user interface defined on metadata embedded in Microsoft Dynamics NAV using client add-ins.

We’ve been working on preparing this workshop for over 12 months and I am very happy and proud of the result.

Client Add-Ins

Within Microsoft Dynamics NAV, client add-ins have been possible for a long time, yet not a lot of partners have picked up the technology except for edge cases such as Point of Sale and Rich Text Editors.

The problem we are trying to solve for Vos Transport is giving insight in the data to the users of the planning system. This is a customized part of their NAV system but you could compare it to Manufaturing or Service order scheduling challenges.

For many years we’ve struggled with the limitations of the NAV user interface such as lack of drag and drop, resizable rowheigts, conditional coloring, concattenating columns and double/right mouseclick events.

On top of that we wanted visual insights in the planning using either time lines and/or visual components in maps with modern options like heatmaps.

I’ve seen other partners build external components for this, mostly using Web Services but I’ve never felt comfortable with these since they make navigating back and forth to NAV very hard.

Flexible & Low-Code

Even though I am proud of our internal IT department at Vos, we cannot take the responsibilty of creating our own UI for something like this, and even if we could, we lack the in-house skills for such a level of front end development.

This is why we started to talk with Global Mediator to build a brand new Page Designer that allows a new level of UI flexibilty in NAV/Business Central.

The goal is that any NAV Admin person can configure these pages without any knowledge of complex frameworks. Just a little knowledge about the NAV datamodel, basic HTML and JavaScript will sufice. The later only for conditional formatting to create simple boolean expressions.

The Result

In essence the Meta UI tool allows you to convert any list page in NAV to a new format where any formatting rule can be applied, rows can be concattenated, pyjama printing can be applied and if you want, one column can be rendered as a representation of a time line.

The tool allows expandable subpages where multiple rows can be expanded at the same time allowing us to drag and drop for example a sales line from one sales order to another sales order.

Microsoft Graph API & JavaScript Add-Ins

The technology used behind the scenes are the new Microsoft Graph API and JavaScript Add-Ins. Both introduced in NAV2018 making that the “oldest” version to support the Meta UI.

If you want to build a Meta UI page on a cusomised table you need to generate the API definition which will automatically be added to the endpoint by the NAV framework.

Next Steps

The Meta UI will be taken into production this weekend and roled out for a few pilot users to give feedback, especially about the performance.

In September we will evaluate the experience and define if the tool will be implemented accross the whole company in all our offices across Europe.

Roadmap

We’ve already started the scope for the next project using the Meta UI tool which will include an HTML editor and a PDF viewer which is going to help us convert orders we receive in PDF format more automatically.

Are you interested?

Now that we’ve proven the technology and moved the first customer into production we want to talk to other NAV/Business Central partners who have the same need for a more advanced grid component, map controls, PDF viewers or HTML editors. Maybe you will challenge us to add more components to the toolbox.

It requires a minimal learning curve to get started and shows great results very quickly.

I will share some screen shots very soon as we will do some clean up first based on the workshops feedback.

Extending Role Centers

There should be a simple rule that applies to all members of our community. If you struggle with something and find out the answer, then share it. If everyone starts doing that I’m sure it will improve our community and bring back some joy in the world were even most MVP’s just blog so sell their marketing messages.

Again, today I wasted much valuable time of my life chasing weird behaviour in our ForNAV AppSource solution.

As most partners we struggle to find a good balance in simplicity and I had this great idea (or at least I thought it was a great idea) to personalise the role center.

I’ve added a menu item for our AppSource solution that contains the shortcuts that most people need and I wanted to hide those unimportant.

When working with page extensions I always try to work with AddLast to have the smallest change of breaking during upgrades.

You can see that the visibility of one of the items is toggled. Here is my code

Simple right? Only show the Replace Reports to an admin or anyone who can manage their own data.

But then the trouble came. This compiles, builds and publishes just fine but the visibility is not toggled.

Then I remembered something from C/Side. IT IS NOT ALLOWED TO CODE IN ROLE CENTERS!!! And I am extending a Role Center.

So I guess you can call this a bug. When extending a rolecenter it should not be possible to write code.

For me this is back to the drawing board and I will try to come up with a better solution.

Extensions | An item with the same key has already been added

If you work with Extensions in Dynamics NAV there is a fair chance that you’ve seen this message.

Today I got it again, waisted half an hour of my live and decided to blog about it.

What happened is that I have a Page Extension with the same variable name as already exists in my C/Side page.

I’m working with NAV2018 CU17 and the compiler did not complain about this and the publishing process went fine. When you try to open the page the client crashes and this error is what you get in the Windows Event log.

Hope this helps someone.