On Harleys, mad gods and Dynamics NAV

Original URL…

I could have named this blog post Living with extensions in a hybrid Dynamics NAV database. The title I went with is far cooler though. And since I write this stuff mostly for my own enjoyment you get stuck with the cool title.

You see, a little over a year ago I traded in my trusty old bike for a Harley Davidson. It is an awesome bike. Riding it feels like having the mad god of Milwaukee steel shred the fabric of reality and smash you face first through the black hole thus created. I love it and until I can buy the flying steam train out of Back to the Future it is my preferred mode of transport.

It did create a bit of a problem though. I had wrenched on my old bike for years. I knew it inside out, and my thirty year old metric spanners worked perfectly well on it.

Harley Davidson though does not do metric though. Metric tools lack something undefined. They are perhaps too refined for something as cool as a Harley. So I had to get a whole new set of inch sized tools. And that is not the only difference. There is a whole different planet of aftermarket parts for Harleys. I had to find out where to get the stuff I needed to do a simple oil change. It was infuriating.

But I guess that is change. More than a year later I still can’t guess if I need a 1/2 or 9/16th inch wrench but mostly I am happy on planet Harley.

And that brings us back to Dynamics NAV. Or Business Central or whatever you want to call it. Our environment has changed. We have had a major change in the way we work and we are still trying to make sense of it. Sometimes it feels as if the not so mad god of Danish sensibility has left us to an uncertain world of extensions, API’s and all sorts of other things that we can’t make head or tail of.

Where I work (a Dynamics NAV end user) we decided to upgrade to Dynamics NAV 2018 and start working with extensions. And, as I learned to live with Imperial wrenches I am also learning to live with AL and Visual Studio Code. Mostly I like it. Not as much as C# but definitely more than C/AL. The biggest problems we experience are due to the fact that we are in an in between period. We are forever generating symbols because we still need to develop in C/Side. We are creating events in custom code in standard objects because we need to move on and develop new things. I still have doubts about how easy the upgrades will be when Microsoft decides to change the events we use. But upgrading will be easier, no doubt about that.

So basically what I want to say with this blog is this. Cheer up. Change is hard. It is inevitable but it sucks. It creates great opportunities and even bigger pains in the backside. But from where I stand we are going to a good place.

With extensions you can do everything you should do. The rest you should leave alone even in C/Side.

How does that good place look? Dynamics NAV (or Business Central if you must) systems with as little modification as we can get away with. Just customized enough to give our customers or employers a competitive edge. Connected to great server based web applications through API’s. Using machine learning to help our users make sense of the masses of data we create. And think of Azure functions. Great ways of decentralizing business logic and ensuring similar execution across several platforms.

So the future looks good. As long as we develop ourselves to be something more than Navision developers. Change is hard. But, as 15 months of riding a Harley Davidson taught me, change is also good.

And so I hoist my glass to the mad god of change. May we live in interesting times.

Before you move on there is one thing I want to point out. I am independent. I have zero desire to ever become a MVP. It is a great award and I am grateful to all MVP’s for sharing their knowledge but it is not for me. There is no advertising here because I value my independence much more than the €4 per month WordPress charges me for removing the ads. The only reason I write this is because I enjoy writing it. If anyone disagrees with my opinions then that is fine. This is my view.

Absorb what is useful. Discard what is not. Add what is uniquely your own. Bruce Lee

 

Anuncios

Developing NAV / Dynamics 365 Business Central Extensions with real-time collaboration

Original URL…

At Build 2018 Microsoft has showed the new collaborative features introduced for Visual Studio and Visual Studio Code, called Visual Studio Live Share.

With Visual Studio Live Share, you can share a collaborative session with your co-workers and start writing code together in real-time. Wonderful isn’t it? Why not test this feature with Visual Studio Code when developing AL Extensions for NAV or Dynamics 365 Business Central?

In order to activate this feature, open Visual Studio Code and on the Extensions Marketplace search and install the VS Live Share extension:

VSLiveShare_01.jpg

When installed (a Visual Studio Code restart is required) you’ll find a Sign in link in the status bar:

VSLiveShare_02.jpg

The Sign in is required when you want to start a collaborative session with Visual Studio Code (so everyone knows who you are). When clicking on this option, you’re prompted for authentication (Microsoft personal account, corporate account, AAD or GitHub):

VSLiveShare_03

When you’re correctly logged, you can see your name on the status bar and now you’ve also a Share button, where you can start a Live Share session:

VSLiveShare_04.jpg

To start a live collaborative session, click on Share and an invite link will be automatically copied to your clipboard:

VSLiveShare_05.jpg

Note: You may be asked by your desktop firewall software to allow the Live Share agent to open a port the first time you share. Accepting this is entirely optional but enables a secured “direct mode” to improve performance when the person you are working with is on the same network as you are.

Now you’re ready to go. Just share the link to your colleagues and they directly “live share” the coding session with you (here I’ve shared a session with myself on another machine):

VSLiveShare_06.jpg

You can see what your colleagues are typing and vice-versa.

P.S. Sharing of the debugging session is not yet supported.

In my opinion, this is a killer feature for Visual Studio and expecially for developing extensions with AL. I recommend to install it on your Visual Studio Code if you want to improve your productivity when working in teams.

Create flow to create or update data in Dynamics NAV

Original URL…

in this blog post, I will show how you can create a flow which will create data (Items) in Dynamics NAV 2018.

To create the connection between Flow and Dynamics NAV 2018 I will use Microsoft Dynamics NAV connector which I show how to configure in this blog post.

So to start first I created one list in SharePoint.

 

Now I will go to Flow and create new flow from blank.

And from list of available connectors first I will choose SharePoint and select “When an Item is created”.

In next step, I will enter my SharePoint site address and from dropdown, I will choose my list.

When I choose my list I will click on “New Step” and find Dynamics NAV connector and choose “Create item” action. In table name I will choose my Web service for Item Card.

When it is available I will choose field from my SharePoint list (Items) and connect it with fields from Item Card.

  1. In Description on Item Card flow will enter Title from SharePoint list.
  2. In Description 2 on Item Card flow will enter combination from 2 fields (Description + Action Value) from SharePoint list.
  3. In External No. on Item Card flow will enter ItemNo from SharePoint list.

And the last step is to save our flow – I chose name CreateItems.

Now I will go to SharePoint list and create new Item.

After I click on Save flow will use data from SharePoint and push it to Dynamics NAV. The result I can see in my flow that it succeed with running.

If I take a look in Dynamics NAV 2018 I will see my item with data from SharePoint.

 

As you can see all fields are populated, as well as field which are validated automatically when enter information in original field (Description -> Search Description).

On-Premise Extensions & Customer Licenses

Original URL…

On my task list for one of my customers was a nicely isolated module that I could make into an extension.

I’m a huge fan of making many small extensions rather than trying to put all of one customers modifications in one project.

In this case it is a side-by-side project with C/Side so I have created my own app file for the packages. I’ll see if I can blog somewhat about that later.

Extensions are not just for AppSource

Some people seem to think that on-premise we can just as well continue to use C/Side and even though I am a huge C/Side fan I have to disagree.

On-Premise extensions have a lot of value, especially because extensions enforce discipline.

The Caveat

The biggest challenge that I face when programming bespoke Extensions On-Premise is the deployment. Microsoft has made the testing of the license very strickt. In fact, it is more strickt than the runtime check which in my opinion is a bug. Microsoft however has a different opinion. Business Central in fall with the new license model solves it because then, there is no more license.

Temporary Tables

Everyone who has attended my Programming Master Class (800 of you) knows that using Temporary Tables as containers of code are one of the most powerful assets for clean code and reducing code cloning.

The Table behaves as a class with methods and properties and actually replaces the need for Code Units completely. Well, almost.

Using these tables in C/Side is free. It has always been free. End Users only have to pay for tables in their licenses if they write data to the database.

When you ship an extension with a table object that is outside of the customers license you’ll get an error message. The publishing process does not check your code for actual inserts and it probably could not even do that if they wanted to.

In C/Side end-users can import objects with a fob file that are outside of their license.

PowerShell to the Rescue

I’ve created a small PowerShell script that temporarily changes the license at the End-User and later switches it back. There is a lot of clean up to do but for me it was a huge time saver.

My plan is to somehow make this PowerShell script run directly from Visual Studio Code and launch the Windows Client instead of the Web Client.

Please not that I don’t dislike the Web Client but we have some pages in our solution that not yet render perfectly and have to be replaced first with another solution (probably Angular w. DevExpress).

Here is the script.

Don’t expect rocket science. I try to keep my PowerShell understandable.

Set-ExecutionPolicy unrestricted

import-module "C:\Program Files (x86)\Microsoft Dynamics NAV\110\RoleTailored Client\NavModelTools.ps1"
import-module "C:\Program Files\Microsoft Dynamics NAV\110\Service\NavAdminTool.ps1"

$ServiceTier = "2018DEV"
$Version = "1.0.0.1"
$xVersion = "1.0.0.0"
$AppFolder = "\\DynamicsNAV\Extensions\Performance\Version\"
$AppSource = "\\DynamicsNAV\Extensions\Performance\Source\"
$AppFile = "Mark Brummel_Performance_" + $Version + ".app"
$AppName = "Performance"

#Get-NAVAppInfo -ServerInstance $ServiceTier

Move-Item -Path $AppSource$AppFile -Destination $AppFolder$AppFile -Force -ErrorAction Ignore

Import-NAVServerLicense -LicenseFile "\\License\Development.flf" -ServerInstance $ServiceTier
Restart-NAVServerInstance -ServerInstance $ServiceTier

Uninstall-NAVApp -ServerInstance $ServiceTier -Name $AppName -Version $xVersion
Unpublish-NAVApp -ServerInstance $ServiceTier -Name $AppName
Publish-NAVApp -ServerInstance $ServiceTier -Path "$AppFolder$AppFile" -SkipVerification
Install-NAVApp -ServerInstance $ServiceTier -Name $AppName -Version $Version

Import-NAVServerLicense -LicenseFile "\\License\Customer.flf" -ServerInstance $ServiceTier
Restart-NAVServerInstance -ServerInstance $ServiceTier

#Sync-NAVApp -ServerInstance $ServiceTier -Name $AppName -Mode Clean -Force
#Sync-NAVApp -ServerInstance $ServiceTier -Name $AppName -Mode Add

The bottom two commands are commented out. I use them when I make schema changes to avoid having to create upgrade codeunits during the development process.

The Version and xVersion are because I like to keep some old versions of the .app file while I do the development. The UnInstall and UnPublish is not required if you increase the build number with each build

A tip to Microsoft would be to implement some of the old C/Side code into the Extensions module that only deleted data/colums for those tables/columns that were really changed.

Novedades del SII en 2018 ¡Adáptate a la versión 1.1!

Original URL…

El Suministro Inmediato de la Información (abreviado como SII) será actualizado el próximo 1 de julio en la que será su versión 1.1, la cual incorporará numerosas novedades que afectarán a algunas gestiones que deben realizar las empresas que requieren de su cumplimiento.

Una vez más, en Aitana os trataremos de ayudar en este cambio normativo explicando en qué consiste el SII, cuáles son sus requerimientos y qué es lo que cambiará en esta nueva versión que está a la vuelta de la esquina. Además, te presentaremos nuestra solución para adaptar tu ERP y cumplir con la norma automatizando todos los procesos posibles. De esta manera, podrás aportar toda la información necesaria a la Agencia Tributaria sin errores y ahorrando costes.

Tanto si ya conoces la normativa y tienes una solución para la anterior versión, como si todavía no estás cumpliendo con el SII y quieres saber cómo hacerlo, nuestro próximo webinario te sacará de todas dudas y te dará un camino claro para cumplir con las obligaciones del SII.

Dynamics 365 Documentation

Original URL…

    • Get started with Dynamics 365
      • What’s new

        Stay on top of the latest features and releases

      • FastTrack your deployment

        Speed up your rollout with personalized tools, resources, and best practices

      • Training classes

        Find the right eLearning courses for your role

      • Accessibility center

        Resources for people with disabilities

      • GDPR center

        Learn how Dynamics 365 supports your GDPR compliance journey

Dynamics 365 Spring 2018 release – documentation & readiness

Original URL…

Dynamics 365 Spring 2018 release – main changes

For the Dynamics 365 Spring 2018 release, Microsoft promises major improvements in three areas:

1 – Adjusting the Dynamics 365 applications so that they will work together better across all business processes. Rather than a combination of separate applications, Dynamics 365 will become a unified group of solutions which can support all business activities.

2 – Improving Dynamics 365 integrations with other Microsoft products.

3 – Bringing new platform capabilities: the Business Application Platform will make it easier to create and customise new applications using Dynamics 365, Office 365, PowerApps, Microsoft Flow and Power BI.

The Dynamics 365 Spring 2018 release will affect most areas of Dynamics 365. Amongst the wealth of modifications which are about to be made, a few particularly exciting ones deserve to be listed here:

  • GDPR: the Dynamics 365 Spring release includes changes designed to ensure the compliance of Dynamics 365 with the requirements of GDPR. We will soon publish a different blog article about GDPR and its impact on Microsoft Dynamics.
  • General availability of Dynamics 365 for Marketing: a new application focused on building relationships with prospects more effectively and to provide more automation for marketing processes.
  • Dynamics 365 for Sales: a new version of the Dynamics Sales application takes Sales Force Automation a step further.
  • Artificial intelligence: new artificial intelligence capabilities have been included to this new Dynamics 365 release.
  • New Power BI apps will be available for preview: Power BI for Sales Insights and Power BI for Service Insights.
  • The Common Data Service for Apps will be updated – see the announcement for the PowerApps Spring Update.
  • The Common Data Service for Analytics will be added to Power BI.

 

Online readiness resources

For a summary of the spirit of the new release, read the Dynamics 365 Spring 2018 release notes announcement on the Microsoft blog.

If you’d like a deeper (and more practical) dive into the functionalities of this Spring release, read Accelerating digital transformation with the spring 2018 release for Dynamics 365 and Business Application Platform by Microsoft Corporate Vice President James Philips.

The Microsoft Dynamics 365 Roadmap page is also a great place to go for details about each of the new Dynamics 365 capabilities.

 

Events not to miss

This new release is a focal point of the Microsoft Business Forward event in Amsterdam. We highly recommend keeping an eye on the Microsoft Business Forward page for links to blog articles, videos, webinars and resources related to the Dynamics 365 Spring update.

Webcast: Microsoft is holding a Business Applications virtual spring launch event on March 28th( 8:00 am PST  11:00am EST). Register now if you don’t want to miss it!

Which Docker Image is right for you? – Freddy Kristiansen

Original URL…

The last year has been quite a journey for people using Docker images for Microsoft Dynamics NAV or Dynamics 365 Business Central. Images have been available in various places and private registries, navdocker, developer preview, navinsider, microsoft/dynamics-nav are just some of the terms you have run into.

This blog post should demystify and explain clearly which Docker Image is the right for you in a given situation – and where to get it.

Developing for Microsoft Dynamics NAV

If you are developing for Microsoft Dynamics NAV, you will find Docker images on the public Docker Hub under microsoft/dynamics-nav.

In the public Docker hub, you will find all cumulative updates to NAV 2016, 2017 and 2018 in all country versions and you can use the images simply by specifying the right tag. The tagging strategy used in microsoft/dynamics-nav is:

microsoft/dynamics-nav:version-cu-country

where

  • version is 2016, 2017 or 2018 (default is 2018)
  • cu is rtm, cu1, cu2, … (default is latest)
  • country is w1, dk, de, nl, na, … (default is w1)

Image name examples:

microsoft/dynamics-nav
microsoft/dynamics-nav:2018-cu3-de
microsoft/dynamics-nav:2017
microsoft/dynamics-nav:2016-dk

You will also be able to run earlier versions of Microsoft Dynamics NAV using the generic image as explained here.

Developing for Dynamics 365 Business Central

If you are developing for the current version of Dynamics 365 Business Central, you will find Docker images on the public Docker Hub under microsoft/bcsandbox.

You will find the current version of Dynamics 365 Business Central using

microsoft/bcsandbox:build-country

where

  • build is the build number (default is current version)
  • country is w1, dk, us, ca, de, … (default is w1)

Image name examples:

microsoft/bcsandbox
microsoft/bcsandbox:us
microsoft/bcsandbox:dk
microsoft/bcsandbox:12.0.21229.0-us

You should normally never use the image with a specific build number unless instructed to do so. This is primarily used when you spin up Container Sandbox images from within Dynamics 365 Business Central (page search for Sandbox).

Maintaining an app in AppSource for Dynamics 365 Business Central

If you have published an app in AppSource, you should continuously test that the app works with the next version of Dynamics 365 Business Central. You will be able to get insider builds of Business Central from a private registry called bcinsider.azurecr.io and the credentials for this private registry is available through Microsoft Collaborate.

The insider builds are normally updated daily and the Dynamics 365 Business Central servers are updated monthly to this version. When the Dynamics 365 Business Central servers are updated, the image will also be deployed on the public docker hub under microsoft/bcsandbox (see previous section).

The image name follows the same tagging strategy as the public Dynamics 365 Business Central images:

bcinsider.azurecr.io/bcsandbox:build-country

where

  • build is the build number (default is latest version)
  • country is w1, dk, us, ca, de, … (default is w1)

Image name examples:

bcinsider.azurecr.io/bcsandbox
bcinsider.azurecr.io/bcsandbox:us
bcinsider.azurecr.io/bcsandbox:dk
bcinsider.azurecr.io/bcsandbox:12.1.21581.0-nl

You should never use the image with a specific build number unless instructed to do so. Setup Continuous Integration and Continuous Deployment by pulling the daily update of the Dynamics 365 Business Central Sandbox Container image.

Developing for a future release of Dynamics 365 Business Central

Much like the strategy for Windows and other Microsoft services, Dynamics 365 Business Central will receive major updates semi-annually. If you are developing an app for AppSource targetting the next major update or if you need cutting edge functionality directly from the lab, you will be able to get insider builds of Business Central from a private registry called bcinsider.azurecr.io and the credentials for this private registry is available through Microsoft Collaborate.

The insider builds are normally updated daily and the Dynamics 365 Business Central servers are updated semi annually to this version. When the Dynamics 365 Business Central servers are updated, the image will also be deployed on the public docker hub under microsoft/bcsandbox and will receive updates monthly (see previous section).

Please be aware that these insider builds might be more unstable than builds from the previous sections. You might see new functionality being developed over multiple days and upgrade procedures between versions might not be working smoothly. Please only use builds from this branch if you have a reason to do so.

The image name follows the same tagging strategy as the public Dynamics 365 Business Central images, but with a different namespace:

bcinsider.azurecr.io/bcsandbox-master:build-country

where

  • build is the build number (default is latest version)
  • country is w1, dk, us, ca, de, … (default is w1)

Image name examples:

bcinsider.azurecr.io/bcsandbox-master
bcinsider.azurecr.io/bcsandbox-master:us
bcinsider.azurecr.io/bcsandbox-master:dk
bcinsider.azurecr.io/bcsandbox-master:12.1.21581.0-nl

You should never use the image with a specific build number unless instructed to do so.

Support?

If you encounter issues with Microsoft Dynamics NAV or with the current release of Dynamics 365 Business Central, you must report issues through the Dynamics Support team. You can open Support Request to CSS through PartnerSource portal (https://mbs2.microsoft.com/Support/SupportRequestStep1.aspx) or contact your Service Account Manager (SAM) in the local subsidiary to understand what is included in your contract as of support incident and PAH (Partner Advisory Hours). Your SAM might also direct you step-by-step how to open a support request or how to get credentials if this is the first time you or your company are engaging Support.

If you encounter issues which are specific to the insider builds of Dynamics 365 Business Central, you should report these on Github AL issues.

In the near future, there will be a blog post on the NAV team blog explaining the above in more detail.

If you have issues running the simplest NAV on Docker container (docker run -e accept_eula=Y -m 3G microsoft/dynamics-nav) you should troubleshoot your infrastructure. A lot of frequently encountered issues can be solved be reading this blog post. You can also download a Container Host Debug PowerShell script here: http://aka.ms/debug-containerhost.ps1 to troubleshoot issues with the container host.

If you have issues running NAV on Docker or Business Central Sandbox Containers, which you think might be related to problems in the Container images, please report these on Github nav-docker issues.

If you have issues running NAV on Docker or Business Central Sandbox Containers using navcontainerhelper, which you think might be related to problems in navcontainerhelper, please report these on Github navcontainerhelper issues.

If you have issues running NAV on Docker or Business Central Sandbox Containers in Azure VMs using the ARM templaes (http://aka.ms/getnav, http://aka.ms/bcsandbox, etc.), which you think might be related to problems in the ARM templates, please report these on Github nav-arm-templates issues

 

NAV GDPR Tools In Action (@NAV 2018 CU4)

Original URL…

NAV GDPR Tools In Action (@NAV 2018 CU4)

Hi Guys,

I have published several posts on the GDPR, we are currently implementing it from several customers, many people still ask me for information on the subject. I have already talked about what to do for the old versions of NAV (which are no longer under maintenance)

But yesterday … the CU4 of NAV 2018 was released (and the other CUs for NAV 2015. 2016, 2017) which includes the TOOLS useful for GDPR. The technical\application modifications have been introduced since CU3, from the CU4 onwards all the necessary tools will be inserted.

PS: Soon my article relational to the GDPR Topic will be published on NAVUG Magazine (article prepared before the CU4 of NAV 2018, therefore generic)

In this post (as promised yesterday in the post on the publication of the CU4 of NAV 2018) i will explain what has been done in CU 4 and how the GDPR tools work.

NAV 2018 CU4 GDPR Tools

If you set this profile you can access to “Data Privacy” menu

PROFILE -> Administration & Security

DATA CLASSIFICATIONS -> Data Classification Worksheet

From this it is possible to classify sensitive data (as described in the GDPR Whitepaper issued by Microsoft), field by field for standard and other custom tables.

It is also possible to set the sensitivity of the data in a massive way, Microsoft has set a standard (base) classification that must be verified and validated.

 

EXAMPLE

Set Data Privacy on Customer Table

SETUP DATA CLASSIFICATION (WIZARD)

It is possible to export and import from Excel, importing from Excel is useful if you have made a map of the data required for processing (sensible and personal date types).

WIZARD IN ACTION!

Choose the right option!

SAVE TO EXCEL

DATA PRIVACY UTILITY

With this button you can execute two functions:

Export data of the subject

Creation of a configuration package (yes, Microsoft has decided to use the old package introduced in NAV 2013 to export import data and manage the cancellation of data…)

Example
Creation of a configuration Package for “Employee” table

SENSIBLE DATA DECTIONFILTEREXPORT

Now you can export sensitive data detected in the system using this Wizard, you can filter what you need.

TYPE OF DATA

  • Sensitive
  • Personal
  • Company Confidential
  • Normal
  • Unclassified

FILTER ON DATA SENSIVITY: “ONLY SENSITIVE DATA” in this case

GENERATE PREVIEW

You can extract data in Preview Mode before exporting it, you can check it before exporting it to Excel

EXPORTING TO EXCEL FUNCTION

After exporting to Excel the system logs what has been done (AUDIT & LOGGING FEATURE)

CREATION OF NEW CONFIGURATION PACKAGE

it is possible to create a new configuration package from this wizard

And.. BINGO!!!

..THIS IS A PACKAGE WITH SENSITIVE DATE

Should I encrypt it? NO, it’s not clear, it’s already in binary code.

DATA PRIVACY ACTIVITY LOG

Each activity is tracked and written in the log (as required by the GDPR)

CHANGE LOG ENTRY

You can activate use the old Change Log Entry to track changes to the data (function existing from the first versions of NAV). Take a look at my old post if you do not use it.

My Post about “Track activities Change” in NAV https://robertostefanettinavblog.com/2015/06/09/nav-2015-tracking-sessions-users-activity-change-log/

Using Business Central as Microservice

Original URL…

Upgrading software is hard. Not because merging software is hard. It’s hard because people are creatures of habits.

Let me give you an example. We recently upgraded from NAV 2016 to NAV2018. This means big changes to the Customer Card. I’m fine with that. While in the process I moved my customizations to a Page Extension and I was a happy IT manager/developer.

Few days/weeks later one of our users comes to our service desk with a posted sales invoice in a currency code we’ve never used before. After some investigation the guy handling the support call figures out that since the upgrade new customers are created wrongly.

Someone at Microsoft (I love saying that) decided it was a great idea to move the Currency Code to another tab or a promoted field, I can’t remember what it was.

The person who creates new customers could not find the field and just thought not to care anymore. However it turns out that in the old version she would always change the currency to euro. When “we” were implemented 12 years ago my predecessor decided to create customer templates with currency codes and they were wrong. Nobody ever reported it. Changing to Euro was just part of the procedure.

Business Central is a monolithic application and therefore hard to upgrade. It has more than 5.000 C# files that are created from C/Side or AL Extensions. The way this all works behind the scenes is pure genius.

Mark, wait a minute… Mololithic? Microservice? What the f…?

Ok, if you are not familiar with these terms you should read at least this article and probably a few more. It’s by Martin Fowler so you cannot go wrong.

The idea behind Microservices is that you break up your architecture into individual components that communicate using API’s. There you go in a nutshell.

Even though Business Central has a brilliant API it is not used by Microsoft itself. When a Production Order needs to post something to the General Ledger it does not use the API but everything internally is written tightly connected.

It makes a lot of sense if you consider that Business Central is based on Navision which was designed 30 years ago.

One of the fundamental design principles of Business Central is transaction integrity. As a developer you should not be able to break that. Well, not unless you put COMMIT everywhere in your event subscribers.

On top of that Business Central has transaction isolation to prevent users to post to the General Ledger at the same time.

All of this is fine until you want to grow with the application and this is where Microservices get interesting.

It’s the API stupid

With microservices you can create several applications that all work together. These applications can be existing software that you buy or subscribe to.

At the company I work for we decided to stop trying to put everything in NAV several years ago. Back then I was against that decision but now I am a big fan.

Because different departments use different software they can all individually upgrade, have small changes done (Extensions in Business Central are brilliant for that) as long as they respect the API.

Most of the API’s I work with respect versioning. If a new version of the software is released the old API works for quite a while until you get notified that it will be depreciated. Giving you time to upgrade.

New Design Paradigm

If you’ve used NAV as a development platform you’ve probably created your own monolithic application and you should reconsider that architecture.

I would encourage every partner if possible to investigate if it is possible to use the API and seperate your IP from Business Central.

In the next set of blog posts I am going to explain how to connect the bits together. Personally I’ve decided to replace NAV with other Microsoft Tech. We’ve chosen Asp.Net Core II with Angular giving us a C# server and a TypeScript front end. So far it is an interesting journey and I’ve created a strategy that will allow us to move bit by bit.

Since I am not yet sure what will happen with CDS/CDM we’ve decided not to choose a database yet. Uncle Bob has learned us never to start with choosing a database. Always make sure you can switch databases.

I LOVE Business Central

Don’t miss interpret me. We are NOT moving away from NAV or Business Central. In fact, part of the bigger strategy is to move to the Microsoft hosted option so we can benefit from continuous upgrades and interesting apps from AppSource, CDS, CRM etc.

I just want to move away from Monolithic design into Microservices and Business Central is my financial Microservice of choice every day of the week.