Category Archives: General

Everything that does not fit in one of the categories

NAV2016CU2 | Obsolete Commands Cleaned Up!

When CU2 was released, I totaly forgot to test something I should have.

Based on my “what the BEEP” post my friends at Microsoft decided that it was time to “clean up” and gave me a heads up.

If you type “BE” in NAV2016CU2 the keyword you get is BEGIN, not BEEP.


NAV2016CU2 Intellisense

From what I have been told the obsolete commands are hardcoded. If you find anything that should be removed, just reply to this blog. Microsoft folks read it :). (Trust me I know).

As far as I could test I could not find the BEEP in the Symbol menu either, but I might have looked in the wrong place.

NAV2016CU2 | Symbol Menu & More

NAV 2016 Cumulative Update 2 is released. I have to admit, normally I don’t pay that much attention to updates, but the last ones are on my radar because of some promisses.

Symbol Menu

Nobody could be happier with the new code editor than me. It makes me more productive and makes our environment sexier and more attractive to young people.

However, the very first piece of feedback I gave was that in some cases the Symbol Menu was not bad.


This feedback was first ignored during the Technical Preview process, but due to pressure after release it is now back.

Glad I was not the only one.

Events & Extensions

There are a couple of interesting KB articles in CU2. Mainly about Extensions and Events.

376710 You cannot publish an extension if it contains too many objects.

So somebody is trying to wrap their entire vertical solution in an Extension? 😉

376969 An extension object cannot be added when a deleted base object had the same ID.

This is a strange one. First and foremost, if you package an extension ALWAYS use ID’s in you CfMD range. I don’t recommend packaging custom objects as Extension.

You can change the automatically generated ID in the Database-Alter menu on the Advanced Tab.

StartID UidOffset

I admit, it does not work too well with distributed development where each developer has their own database.

Hopefully in the (near) future Microsoft will make the required changes in NAV to make proffesional development easier out of the books so we can safely say distributed development is easy. I would also like to see GIT support.

How I upgraded to NAV2016, without upgrade toolkit

Back home from NAVTechDays. It’s a rainy saturday, nothing much to do in the garden. Kids are playing or doing their saturday activities with sports and scouting. I figured it was time for me to catch up with bookkeeping and some paperwork after all the traveling.
Continue reading

Learning Dynamics NAV Patterns | The book has shipped!

Today I was a happy man when I got home. I unboxed the first 25 copies of my new book Learning Dynamics NAV Patterns. Just in time for Directions EMEA next week.


I will take 25 copies with me next week. If you would like a copy, find me at the event, between the 1000+ other people. You can easily find me. I am the tall guy with the ponytail wearing a NAV Skills t-shirt.


I hope and expect the book to have a positive impact on the way the NAV partners develop software. I believe it is time to take the next step in proffesional software. This book explains how and which elements of Dynamics NAV are good to be reused.

Looking forward to see you next week!

(Did I say I am happy?)

PS: You can order the book here

Or on Amazon:

Microsoft How Do I Video Series | Behind the scenes

Microsoft produces How Do I videos for many of their products. They can be found on MSDN where they are grouped by product.

For Microsoft Dynamcis NAV we have recorded over 100 videos for NAV2013, NAV2013R2 and NAV2015. The recordings for NAV2016 are being prepared as I write this blog.

I came on board for NAV2013R2 to do a series about NAV Development Best Practices that we then decided to call Design Patterns. I also did a handful of other videos about the Job Queue, Word Reporting and lately some functional end user scenario videos.

Let’s take a look behind the scenes and see how these videos are being made.

Scenario & PowerPoint

The videos are created using a scenario. This is often the title of the video with a small description of the steps. After beign approved by Microsoft the recording can start.

Most of the videos are recorded at home or office. We use Camtasia which makes it relatively easy to record them. Lately the editing such as zoom and highlight is done by an editor which saves a lot of time, before that this had to be done by the author.

The PowerPoint has evolved to a nice moving introduction to the video. Most of the How Do I video should take place in the product itself, not in powerpoint.

The Recording Studio

Some videos are recorded in the studio. The one we use in Europe is in Belgium. The same studio as used for Plataan TV which most of you know from other online training.


The studio is at the research campus in Hasselt.


The first time you are in a studio like this it is a strange experience. No matter how many videos you have recorded at home, this is different. But once you are used to the cameras it is fun and when well prepared we can be very productive in the studio.

Do you want to join the team? Leave a message on the blog and I will forward it to the team.

Dynamics NAV 2013 | Dimensions (I)

This blog post is brought forward from my old blog to be linked into my new book.

Ok, let’s go back to what matters. The cool stuff about NAV 2013.

At NavTechDays Antwerp I did a deep dive into the changes that are made in Dimensions. In the comming blogs I am going to share this.

What are dimensions

Dimensions are first introduced in version 3 as a replacement for project and department codes and have two main functional purposes. The first is restriction checks on posting. We can for example give a G/L account a mandatory product dimension or vice versa block a certain dimension or dimension value for posting. The second purpose of dimensions is data analysis. Using dimensions allows us to define analysis views that we can use for reporting and analysis.

The main elements in Dimensions are Master Data, Journal and Document registration, posting and analysis.

Problems & Challenges

Let’s look at the problems and challenges we have with Dimensions and the reasons for the redesigned in NAV7.

Storage Firstly we have the storage issue. Dimensions can consume up to 33% of the space in a database.

Performance Moving the data through the database takes a cut out of the performance. This is at least 30 % even if you don’t use dimensions.

Coding I think many developers here agree, to take dimensions into account when posting a journal or document you need quite a substantial piece of coding.

Design Pattern

Let’s compare the design pattern in NAV 6 or earlier and NAV 7.

If we look at the first part, master data, we can see that there are almost no changes in the masterdata part of dimensions. A special one in this list is the Job Task Line dimensions. Microsoft considers this table master data, also because you can assign multiple dimensions.

The biggest change is in the way dimensions are assigned to journals in documents. All the tables that are designed for this in previous versions have been replaced by one new table Dimension Set Entry. In this table NAV stores all used dimension combinations. Rather than storing all separate dimensions for each record, each record is assigned to a unique set combination.

This allows us to do what I personally consider the nicest change in this new architecture, to move the dimensions through the posting routines, all you need to do is assign the correct Dimension Set ID.

To analyse the data, codeunit 410 has been changed. This codeunit has always been a bottleneck in Dynamics NAV for performance reasons. In Dynamics NAV 7 this is based on the new query object.

Dimension Sets

The Dimension Set is the biggest change in NAV 7.

Each table that contains dimension information should contain a new field Dimension Set ID. In the core product this is always field 480.

Calculating the SET ID is done in codeunit 408.

This codeunit is also been on a huge diet. Because there is no longer need for the data moving functions 50% of this codeunit has been removed. Perhaps even more because the new code for the Set handling has been added.

Each table should have a new function for showing the dimensions. This is done using the dimension set entry table as a temporary table.

— To Be Continued —

ANNOUNCING: New Book | Learning Dynamics NAV Patterns

Since Packt Publishing put it on their website, I might as well reveal a secret project I’ve been working on for the last couple of months, almost a year.

My new book Learning Dynamics NAV Patterns is about to be released. I am in the final stages of processing reviews.

Learning Dynamics NAV Patterns

You can order the book here.

The book is a written version of the Master Class for Application Architecture and Patterns I am currently teaching accross the globe and contains a lot of information about the Dynamics NAV DNA in a structured, easy to follow way. Things that have been in the product, some 30 years, some only one or two releases.

It also contains coding best practices, anti-patterns and refactoring methodologies and finaly a real world example of how to apply patterns while architecting a solution, working with Delta files and using Visual Studio Online to host your IP in the cloud.

The book is a more abstract and technical version of my first book Microsoft Dynamics NAV 2013 Application Design. All the things I learned from being part of the Design Patterns project and Partner Ready Software have been applied to this hands on bundled work. I would like to thank all other members from the teams for their inspiration during the meetings and brainstorm sessions and I hope they enjoy the way the efforts are combined and for everyone to grab although the book is my view and solely my opinion on the matter. The book would have also been worse without the reviewers. One in particular who shall remain anonimous had a big impact on the final version.

I’ve also read countless articles about clean code, object orriented programming and design patterns. I can’t mention them all but I would like to thank everyone for sharing their views and vision with the world.

Please (pre) order the book and enjoy.

Mark Brummel


NAV 2015 | Import FOB, back to MS-DOS?

Although I understand the investments in Multi-Tenancy from a Microsoft perspective it does not always make our live easier.

Today during the import of a Fob at a customer I am upgrading to NAV2015 I got this message.


I don’t even run a Multi-Tenant system. This means I have to start PowerShell and run this command.

Although I love the power of PowerShell, I hate using it. Why isn’t this available from the development environment?

This case was getting even more strange since the error PowerShell gave was on a table that was not affected by the fob. The Object name already exists. I could only solve the issue with changing the tablename.

Where is the simplicity in that.

Sorry for my rant, but maybe this post helps someone having the same issue.

NAV2015 | Performance Tuning

This post also applies to NAV2013, any version since we moved to the new SQL client and dropped classic client.

I am currently in progress of upgrading two of my oldest customers. One with 10 and one with 15 years of data. Large databases, highly customised and tuned for performance to perfection what can be done in those versions.

One of the things you promise these customers is better performance, since NAV2013 and beyond are the fastest versions of Navision ever.

However, after the initial data upgrade and making all the pages more or less usable this is not just the case. Actually the performance is completely terrible. Rubbish.

Ai ai.

The reasoning behind this is relatively simple. Microsoft has made a couple of changes to the way it talks and works with SQL Server that make old performance tuning tips work less and new tips to be required.


First of all we have the “OUTER APPLY”. This is an actual JOIN between flowfields and tables that happens when running pages. Instead of fetching flowfields row by row Navision now creates one query that joins all the flowfields. This can cause the system to slow down if SQL is not optimised for joins.

Learning to optmise SQL for joins is basic knowlegde for DBA’s. Something I learned from sessions organised by SQL Skills. Its all about creating indexes that have the fields from the where clause. Covering indexes also make huge differences.

Second we have the statistics. It used to be best practice to turn off auto create statistics beacuse Navision used cursors. Well, it does no longer do that. We can now safely turn on the default values and not worry about updating them asynchronously.

Lastly there is paralelism on the SQL Box. This used to be set to 1 for NAV databases. Don’t do that anymore. Because of the “OUTER APPLY” we actually bennefit from multiple CPU treads.


Lessons learned? Well this is not my first NAV2013 implementation/upgrade. I learned all this the hard way while emailing back and forth with my former SQL Perform friends. I actually think I had one of the first 100GB+ NAV2013 databases after an early upgrade.

NAV2013 and newer are the fastest versions ever, but performance tuning is an art. It always was and always will be.


Can you screw it up? Yes off course. As a user could Navigate to an Item Ledger Entry in classic client, remove the filter and place a new one and blow up the system, in NAV2013 they can accidentaly sort on an unindexed column. In the last scenario SQL Server will generate and use statistics, but statistics cannot replace indexes.

Enjoy this summer read.