Preview of Dynamics 365 Business Central 2019 release wave 2

Update 2021/2/10: Microsoft stopped creating images for Docker in the summer of 2020. We now publish artifacts, which can be used to spin up containers and BcContainerHelper has replaced NavContainerHelper. This blog post reflects the old way of using NAV/BC on Docker and references NavContainerHelper, which is outdated.

As of today, we have started to create Docker images of Business Central 2019 Wave 2 preview on bcinsider. This blog post will describe how to get the image, what you can use it for and what you should be aware of.

Get the image

The image tag for the preview images are:

bcinsider.azurecr.io/bcsandbox-master:<country>-<platform>

where <country> is the country code for the localization you need and <platform> is either ltsc2016 (for Windows Server 2016 or Windows 10 pre-1809) or ltsc2019 (for Windows Server 2019 or Windows 10 1809 or later).

The bcinsider repository requires authentication. The credentials are available through Microsoft Collaborate as part of the “Ready to Go” program. Read more about the “Ready to Go” program here: https://docs.microsoft.com/en-us/dynamics365/business-central/dev-itpro/developer/readiness/readiness-ready-to-go?tabs=learning

Get the latest ContainerHelper

Please make sure you are using the latest version of the NavContainerHelper PowerShell module, here: https://www.powershellgallery.com/packages/navcontainerhelper – you need at least version 0.6.2.9.

Use the image for extension development

When using the image for extension development you basically start the container exactly like we have done since we shipped the first preview containers. Note that includeCSIDE and all functions working with C/AL objects are no longer supported and will return an error. Example:

$imageName = "bcinsider.azurecr.io/bcsandbox-master:w1"
$containerName = "test"
$auth = "UserPassword"
$credential = New-Object pscredential 'admin', (ConvertTo-SecureString -String 'P@ssword1' -AsPlainText -Force)
$licenseFile = "<licensefile>"

New-BCContainer -accept_eula `
                -imageName $imageName `
                -containerName $containerName `
                -auth $auth `
                -credential $credential `
                -licenseFile $licenseFile `
                -updateHosts

The output after starting the container should be something like:

...
Creating SUPER user
Container IP Address: 172.25.15.205
Container Hostname : test
Container Dns Name : test
Web Client : http://test/BC/
Dev. Server : http://test
Dev. ServerInstance : BC

Files:
http://test:8080/AL-15.0.34329.0.vsix

Initialization took 121 seconds
Ready for connections!
Reading CustomSettings.config from test
Creating Desktop Shortcuts for test
Container test successfully created

Download the .vsix file (in this case from http://test:8080/AL-15.0.34329.0.vsix) and install it in VS Code using Install from VSIX in the … menu.

AL: Go! will after selecting the directory for your project, ask you for a target platform:

target platform

4.0 is Business Central 2019 release wave 2 (sorry for the wrong caption).

Modify the server and serverinstance in launch.json:

"server": "http://<containername>",
"serverInstance": "BC",

Use the container name you used.

Note: The serverInstance in 15.x containers and later is BC.

Download Symbols and press F5 and you will be running your first Wave 2 extension.

Please note the changes in app.json if you want to compile and publish your own extension to a preview container.

Use the image for Code Customizations

The process for creating a container, which should be used for code customizations is very much like described here: https://freddysblog.com/2019/04/15/c-al-to-al-code-customizations/

$imageName = "bcinsider.azurecr.io/bcsandbox-master:base-ltsc2019"
$containerName = "test"
$auth = "UserPassword"
$credential = New-Object pscredential 'admin', (ConvertTo-SecureString -String 'P@ssword1' -AsPlainText -Force)
$licenseFile = "<licensefile>"

New-BCContainer -accept_eula `
                -imageName $imageName `
                -containerName $containerName `
                -auth $auth `
                -credential $credential `
                -licenseFile $licenseFile `
                -updateHosts `
                -includeAL `
                -memoryLimit 10G

Note that the only extra parameters are -includeAL and an increased memory limit (-memoryLimit 10G). If you are using process isolation, you don’t need the memoryLimit flag.

After this you will need to create a folder with the source from the container, which you can work with in VS Code. This also follows the process from the former blog post. First extract the source:

$alProjectFolder = "C:\ProgramData\NavContainerHelper\AL\BaseApp"
Create-AlProjectFolderFromNavContainer -containerName $containerName `
                                       -alProjectFolder $alProjectFolder `
                                       -useBaseLine `
                                       -addGIT `
                                       -useBaseAppProperties

Then compile the app:

$app = Compile-AppInNavContainer -containerName $containerName `
                                 -credential $credential `
                                 -appProjectFolder $alProjectFolder `
                                 -appOutputFolder $alProjectFolder

Then publish the new BaseApp to the container:

Publish-NewApplicationToNavContainer -containerName $containerName `
                                     -appDotNetPackagesFolder (Join-Path $alProjectFolder ".netpackages") `
                                     -appFile $app `
                                     -credential $credential `
                                     -useCleanDatabase

You only have to extract the source once of course – containers created on othrer computers do still need -includeAL, but then you can add -doNotExportObjectsToText  and -useCleanDatabase to start a container, which is ready for publishing a new BaseApp.

Organize your files

You might quickly discover that the source files after creating an al project with 15.x are significantly differently named and organized, compared to creating the same with 14.x.

This might of course cause issues when comparing sources etc. (as you probably can imagine). A seperate blog post will describe how you can specify a function to Create-AlProjectFolderFromNavContainer in which you can define how you want to structure your files, stay tuned.

Please be aware…

Things are not cast in stone, things will change…

Below is a list of things to be aware of when using the image:

  • The Test Toolkit, the Test Libraries and the Tests are not included yet. We are currently refactoring tests into individual apps and will include those on the image as soon as we are ready.
  • The filename of the .vsix in the image is AL-<platformversionnumber>.vsix, uses the version number of the platform, which is NOT the version of the .vsix. In a future image, this will follow the version number of the .vsix.
  •  finsql.exe can still be found on the image. This doesn’t mean that C/AL still exists. finsql.exe is only used for database creation and will be removed when this functionality is moved to a different tool.
  • You will still find a folder called RoleTailored Client in the image. This doesn’t mean that the Windows Client still is available. The folder contains some tools, that needs to be moved before removing the folder.

What’s next

We will start shipping daily builds from master as of today. There might be days, where no builds are available and there can be multiple reasons for this. The image name above is always the latest available and use -alwaysPull if you need the latest at any time.

We will also ship preview DVD images (approx. biweekly) on collaborate, probably starting within the next 2 weeks.

If you need a specific image, you can add the version to the image tag, example:

bcinsider.azurecr.io/bcsandbox-master:15.0.34648.0-dk-ltsc2019

You will see blog posts describing what’s new and how to do things both on Freddys blog https://freddysblog.com/category/al-development/ and on the team blog https://cloudblogs.microsoft.com/dynamics365/it/product/business-central/.

You will also see various Business Central PMs to start sending updates and requests for feedback on Yammer (https://www.yammer.com/dynamicsnavdev). We love your feedback about all the new features and will provide details and platform to talk about those. We are also planning to use Yammer to share more info when some of the features are lighting up in the consecutive builds as not everything may be fully enabled yet.

For reference please also look at our 2019 Release wave 2 Plan: https://docs.microsoft.com/en-us/dynamics365-release-plan/2019wave2/dynamics365-business-central/

And…

Please remember to thank all the people in the development team working hard every day to make this possible – I only created the Docker images and some helper scripts on top of everything they did…

Enjoy

Freddy Kristiansen
Technical Evangelist

67 thoughts on “Preview of Dynamics 365 Business Central 2019 release wave 2

    • Thanks for the nice words.
      My love to extensions is because I know that this is the right way to go and without extensions, we would be in a much worse place.
      I cannot comment on the things you indicate in your post. I do think we have a lot of tests, but you probably never can have enough.
      I do however know that with Business Central online and the rapidly increasing number of customers we have on SaaS, we are going to taste our own medicine and ALL bugs are hitting us directly. I hope this will over time remove the concerns you have.
      Note also, that I am dedicated to help people use code customizations, but I will (in every post) mention that this is not the long term right way. The first time I forget that, I will have partners telling other partners that code customizations is the way to go – Freddy says so:-)

      Like

  1. Hi Freddy, are images with the :base tag supported by the New-BCContainer commandlet? Having troubles creating a container with data using bcinsider.azurecr.io/bcsandbox-master:base, even when pulling the latest image (maybe my images are corrupt?)

    Or is there another way to get a container with demo data?

    Like

    • base comes with onprem demo data.
      the other countries comes with online demo data.
      base is supported, but the way it works is, that the base image is created first and then the localizations. At this time, there is a lot of stuff going on, so I test the base image before building the local ones.
      The base image created today failed – a new one has just been pushed and the local versions will follow within the next hour.
      So – pull a new one and you are good (I hope:-))

      Like

  2. Hi Freddy,
    I’m trying to create a new container and I get this “strange” error (sorry for the French version):

    >>>>>>>>>>
    Get-Item : Impossible de trouver le chemin d’accès « C:\WINDOWS\system32\True\ServiceTier\program files\Microsoft Dynamics NAV », car il n’existe pas.
    Au caractère C:\Program Files\WindowsPowerShell\Modules\navcontainerhelper\0.6.2.9\ContainerHandling\New-NavContainer.ps1:505 : 28
    + … vversion = (Get-Item -Path “$dvdPath\ServiceTier\program files\Micros …
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : ObjectNotFound: (C:\WINDOWS\syst…ft Dynamics NAV:String) [Get-Item], ItemNotFoundException
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetItemCommand
    <<<<<<<<<>>>>>>>>>
    NavContainerHelper is version 0.6.2.9
    Host is Microsoft Windows 10 Entreprise – ltsc2019
    Docker Client Version is 19.03.1
    Docker Server Version is 19.03.1
    Pulling image bcinsider.azurecr.io/bcsandbox-master:base-ltsc2019
    base-ltsc2019: Pulling from bcsandbox-master
    Status: Image is up to date for bcinsider.azurecr.io/bcsandbox-master:base-ltsc2019
    Using image bcinsider.azurecr.io/bcsandbox-master:base-ltsc2019
    <<<<<<<<<<

    Do you have an idea ?
    Thank you very much for your help

    Franck

    Like

  3. Pingback: Preview of Dynamics 365 Business Central 2019 release wave 2: few notes - Stefano Demiliani's NAV Blog - Dynamics 365 Business Central/NAV User Group - Dynamics User Group

  4. Pingback: Public Preview of MSDYN365BC 2019 Release Wave 2 – Roberto Stefanetti NAV & Business Central Blog

  5. Pingback: Preview of Dynamics 365 Business Central 2019 release wave 2 | Pardaan.com

  6. Pingback: Business Central on Docker for non-experts… | Freddys blog

  7. Pingback: Build on the System Application in Dynamics 365 Business Central using Docker - Dynamics 365 Blog

  8. Pingback: Build on the System Application in Dynamics 365 Business Central using Docker - Microsoft Dynamics CRM Team Blog - Dynamics 365 Sales/CRM User Group - Dynamics User Group

  9. Pingback: Build on the System Application in Dynamics 365 Business Central using Docker - Supply Chain Management in Dynamics AX - Dynamics 365 for Finance and Operations/AX User Group - Dynamics User Group

  10. Pingback: Build on the System Application in Dynamics 365 Business Central using Docker - Microsoft Dynamics AX Support - Dynamics 365 for Finance and Operations/AX User Group - Dynamics User Group

  11. Pingback: Business Central 2019 release wave 2 - Modern clients features - Jatin Patel - Microsoft Dynamics NAV/365 Business Central

  12. Hi Freddy

    I’m trying to follow your example to extract the AL-code from master.

    I can run this:

    New-BCContainer -accept_eula `
    -imageName $imageName `
    -containerName $containerName `
    -auth $auth `
    -credential $credential `
    -licenseFile $licenseFile `
    -updateHosts `
    -includeAL `
    -memoryLimit 10G

    Create-AlProjectFolderFromNavContainer -containerName $containerName `
    -alProjectFolder $alProjectFolder `
    -useBaseLine

    and I get a healthy container, but I was expecting AL-code in this folder: C:\ProgramData\NavContainerHelper\Extensions\Original-15.0.35659.0-W1-al

    Shouldn’t the AL code of the base app be in that folder?

    And why do I get hyperv isolation when I’m runing Windows 10.0.18362. On all other contariners I create I have to use -useBestContainerOS to get process isolation. In this case I didn’t since I wanted to follow your example by the book.

    Thanks!

    Like

    • I prefer to get issues on http://www.github.com/microsoft/navcontainerhelper/issues.
      The reason for hyperv is, that Windows version must match 100% with the container version to run process isolation (sharing the core). You are running 1903 containers are 1809 (https://en.wikipedia.org/wiki/Windows_10_version_history).
      When using useBestContainerOS, I extract the files from one container and just-in-time install them on a generic image with 1903 (hence getting process isolation). There is a difference, but you should be able to use that if you like.
      Reg. the AL folder – this is probably because the container is a different version – somewhere in the output it says Version; a.b.c.d – your AL folder will be named after this based on your image name above.
      If you still have an issue, head over to github, create an issue and share the variables used and the output.
      Thanks

      Like

  13. Pingback: Running tests in 15.x insider containers | Freddys blog

  14. Do you need an Azure account for this installation? Because when I try to pull the image it says that I need to login to bcinsider.azurecr.io which redirects me to the Azure account creation page.

    Like

  15. Hi Freddy,
    we joined the ReadyToGo program in MS Collaborate, I can see “Ready! for Dynamics 365 Business Central” under programs and “2019 Release Wave 2 Preview” under engagements but there are no packages showing up. It only tells me “There are no packages based on the search criteria.” whenever I search for packages.
    Do you have any advice for me what to do or who to ask?
    Thank you,
    Christian

    Like

  16. Hi Freddy,
    I have slight problem with downloading image for docker…
    I’m (personally and as company) subscribed to MS Collaborate and access to Ready-To-Go, all acesses are as AAD. I cannot download image from insider without logging to repo and after I try to login (with “docker login “bcinsider.azurecr.io” “) I get “Error response from daemon: Get https://bcinsider.azurecr.io/v2/: unauthorized: authentication required”. I’ve tried both accounts with no success.
    I found out that i should have some specific password for that (but it should be one to Ready-To-Go so my AAD should be enough).
    Did I miss something, some account, some switch… some action from MS?

    Thanks in advance 🙂

    Like

  17. Pingback: Microsoft Dynamics 365 Business Central 2019 release Wave 2: Full keyboard shortcut support

  18. Pingback: Microsoft Dynamics 365 Business Central 2019 release Wave 2: Full keyboard shortcut support - Waldo's Blog - Dynamics 365 Business Central/NAV User Group - Dynamics User Group

  19. Pingback: Business Central as an app: getting to the al source code

  20. Pingback: How to create Business Central Online Sandbox with API. Wave 2 with F8. - Microsoft Dynamics NAV Community

  21. Pingback: Customization INSIDE the System Application in Dynamics 365 Business Central - Dynamics 365 Blog

  22. Pingback: Customization INSIDE the System Application in Dynamics 365 Business Central - Microsoft Dynamics 365 Community

  23. Pingback: Customization INSIDE the System Application in Dynamics 365 Business Central - Microsoft Dynamics CRM Team Blog - Dynamics 365 Sales/CRM User Group - Dynamics User Group

  24. Pingback: Customization INSIDE the System Application in Dynamics 365 Business Central - Microsoft Dynamics AX Support - Dynamics 365 for Finance and Operations/AX User Group - Dynamics User Group

  25. Pingback: Publishing a New Base Application | Freddys blog

  26. Pingback: Publishing a New Base Application - Dynamics 365 Business Central Community

  27. Pingback: Publishing a New Base Application - Freddy's Blog - Dynamics 365 Business Central/NAV User Group - Dynamics User Group

  28. Pingback: How to prepare your Per-Tenant Extension for the Business Central Wave 2 Update - Microsoft Dynamics NAV Community

  29. Pingback: Microsoft Dynamics 365 Business Central 2019 release Wave 2: Full keyboard shortcut support | PA

  30. Hi Freddy!

    Thanks for the great post!

    Not sure what I’m doing wrong, but I have the latest BC image on a local docker container, and I have download and installed the latest navcontainerhelper module into PoweShell ISE. The docker image runs perfectly on the web, however, I’m having hard time running commands against this container. Almost all commands I try to run (e.g Export-NavContainerObjects, and many others…), return the same error:

    Container does not support the function Export-NavContainerObjects

    I do have an updated DEV flf license file for BC, freshly downloaded from Partnersource, and used when creating the container.

    Another hiccup – I can’t access older container images (e.g for NAV 2018 or 2017). I am using the right tags, however, I always get the latest BC image. Has MS removed the older images?

    Thanks much!

    Like

  31. Pingback: Customization INSIDE the System Application in Dynamics 365 Business Central - Dynamics 365 Business Central Community

  32. Pingback: How to get Preview Version of Business Central - Dynamics 365 Business Central Community

  33. Hello,
    i got error white write unit test in busiess cenal version 16 also add all dependancy.
    do you have any idea or MS changed to wite unit test.

    Like

  34. Pingback: Customization INSIDE the System Application in Dynamics 365 Business Central - Power Community

Leave a comment