Dynamics NAV 2016 Released

Well, It’s official. NAV 2016 is released. (You can find it here by the way)

Here’s a quick run through of the “What’s new”, from a technical view (taken from the NAV 2016 Development Environment help).

Mind you, I won’t go into detail too much for this post. But expect a lot of blog posts everywhere in the next few days. I’m sure a lot of NAV enthusiast will start blogging.

New C/AL Editor

Oh boy, this one is very nice… Completely renewed with IntelliSense, Improved syntax highlighting and colorization.

Here’s a little preview:


look at that “Autocomplete” đŸ™‚

New shortcuts for accessing globals/locals directly (CTRL+G and CTRL+L)

Did you notice the new icon in the top? Here’s a closeup:

XMLPorts: Multiple Namespaces

Before, you could only add 1 namespace, there is now a possibility to add multiple namespaces.

New Function types

NewFunction Types

Try Function

Instead of using IF CODEUNIT.RUN THEN, you can now use IF Codeunit.TryFunction THEN

This will clean up a lot of codeunits, and make code only more readable.


Well, this is really great… Remember my post about PRS?
Here I talked about hooks, by only adding 1 line of code in the Insert trigger for example. This is no longer necessary, we can subscribe to events, which will make sure our code is executed, without even touching the default NAV object!

Addition support for other numeric types in Queries

Before, we could only do a count / sum / … on a decimal field. Now, we can also do these aggregate functions on Integer, BigInteger and even Duration field types.


I think most of you will know that every record contains a Timestamp field on SQL Server for the NAV tables?

It’s automatically managed by NAV and contains the timestamp (duh) of the last change. It is used as a version number of the record. Now, we can view these fields in NAV, by adding a BigInteger field, and changing the property “SQL Timestamp” to Yes.

Now we could keep track of changed records we need to do something with, by storing the last processed Timestamp.

Mind you, the field is read only if “SQL Timestamp” is set to yes!

Automatic deployment of Add-ins

With NAV 2016 we have the possibility of adding our add-ins as a zip file to the add-in table. NAV will make sure they get deployed to the clients.

It will also be aware of the different versions.

64 bit client

We also have a 64 bit windows (RTC) client from now on.

Test Suite

It’s back! The last release we got was an NAV2013 version. But now we have a completely new test suite.

Camera and Location

For the table and phone client types, we can now use the camera and the GPS.

SQL Server authentication

The instance can now connect using an SQL Server login instead of a windows login.

Running NAS as administrator

When running a NAS, the user the nas runs as, needs to be added as a user in NAV. Now, if that user is running with administrator rights, it automatically is granted the SUPER permission set.

New C/AL Functions


Returns the client type which is executing the code, we have following types:
– Windows
– Web
– Table
– Desktop
– Phone

CurrentCompany (on a record)

returns the company the record is in (for when you had done a ChangeCompany)

IsTemporary (on a record)

On a record… Before, we had to load the record into a RecordRef and see if it was temporary, no more of this.

RecordID (on a record)

Again… On a record… I can already see use cases, and code thinning.

New C/AL Properties

Scope (on an action)

must an action be shown on a repeater or rather on a page, this is applicable on web, tablet or phone client

SQL Timestamp (on a field in a table)

See short description above

Table Type (on a table)

CRM or ExternalSQL, linked object seems gone and replaced by ExternalSQL

New C/AL Statements

oh yes, there are even a few new ones of these:


well, didn’t see this coming đŸ™‚

we can now run a foreach on a DotNet object, you can loop through a DotNet collection or array with this one

Something like this:

mylist : DotNet System.Collections.Generic.List
element : Text

// Instantiate the .NET Framework collection object
mylist := mylist.List();
// Populate the collection
mylist.Add('Item 1');
mylist.Add('Item 2');
mylist.Add('Item 3');
mylist.Add('Item 4');
// Iterate through the collection
FOREACH element IN mylist DO


This goes together with the foreach, but will also work on repeat, while and for iterations!



Well, this adds a lot of new functionality. And maybe for some people some issues…

If you have ever used RecordID as variable name, or even Foreach or break, you might want to update your code BEFORE upgrading. You might run into problems otherwise.

In any case. Looking forward to working with NAV 2016. I hope everyone else is as well!

I’m sure we’ll get used to the new functionality in no time. And maybe discover little other features not explicitly mentioned. Stay tuned.

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.