Introducing Extensions in Microsoft Dynamics NAV 2016

We are very excited to announce the arrival of new development capability in Microsoft Dynamics NAV 2016, called Extensions.

Extensions enable you to modify your Microsoft Dynamics NAV system without directly altering the source resources, making it easier to deploy, manage, and upgrade customizations or extensions. While you will still use the existing Microsoft Dynamics NAV Development system to customize or extend Microsoft Dynamics NAV, a new set of Windows PowerShell cmdlets have been introduced that mean you can add your changes into a proprietary package format, called a .navx package file. These packages can be installed, and more importantly uninstalled, from a Microsoft Dynamics NAV system with ease. Packages can be automatically upgraded through the installation process, so up taking newer versions is made easier.


You might be wondering by now how an extension can be used to customize a system without modifying the source code? Extensions are, in the simplest terms, the runtime application of objects and object deltas for a specific combination of extension and tenant. When an extension is published to a Microsoft Dynamics NAV deployment, it compiles the objects in it against the current application database, and then an app installation for a tenant stores the association and builds the needed data schema. At runtime, it simply loads the associated objects for that app and tenant.

By doing this, we remove the need to merge code but we also introduce some limitations, specifically on what properties you can modify on objects such as pages and tables, and there are complete restrictions on altering existing codeunits. To affect the logic in extensions, you need to use the new eventing model that is also being introduced in Microsoft Dynamics NAV 2016. It’s important to note that there are no restrictions on the introduction of new objects or codeunits.

For a list of object types that are supported in extensions for Dynamics NAV 2016, see Extension Packages Capability Support Matrix.

To create and deploy an extension:


If you need to update an extension, you simply uninstall the old version and then install the updated one. As a developer, you will need to code specially named upgrade functions in one of your codeunits in your extensions. These functions are automatically called when the extension is installed and can access the data that was automatically archived by the system when the previous version was uninstalled. For more information, see Extending Microsoft Dynamics NAV Using Extension Packages.

We plan to continue to enhance the extensions story in future versions of Microsoft Dynamics NAV, so stay tuned!

Comments (10)

    1. navteam says:

      Thanks for the catch, Kai! The link has been updated.

  1. says:

    First of all: Great feature! We have been waiting for this a long time!
    But i have one question that bothers me:
    Why can we not add any object tape?? This makes it kind of useless for any bigger type of application! We are extensively using all the new cool stuff you provided us like odata webservice trough queries etc. So why can’t we add xmlports and queries? I don’t see why this would not be possible, and still it is not listed as supported in here:

    1. Morten Jensen (MSFT) says:

      Thanks for the feedback and positive comments. We’re working hard to add and support more object types.
      // Morten

  2. Campl3r says:

    I understand the problem with modifying existing Codeunits, but it serves a challenge, that e.g. you can’t extend the Item Journal Line and the Capacity/Item ledger Entries with a new field (and fill the field in the Journal Line and transfer it to the Ledger Entry). Another problem with this is the not calling of the Triggers (Validate, Modify, Insert) in the standard Codeunits.

    1. Morten Jensen (MSFT) says:

      Thanks Peter.

      Do you by “problem with this is the not calling of the Triggers” mean the triggers of your added fields cannot be “added”? If so, please refer to the new Events feature which supports events being raised before and after most table (and page) triggers, e.g. OnAfterInsert, OnBeforeInsert, …

      Introducing Events:

      // Morten

      1. Peter says:


        I have added a field in the Item Journal Line which gets filled by the user. How do I transfer this field with an extension in the corresponding ledger tables (Capacity and Item?) .

  3. Inel says:


    Is extension will allow to make personalization nav code?

    Because I wonder if the VAR will used to customize the code of customers.

  4. Puneet Kumar says:

    I have a question and i hope you can help me out. How can we use the fields in reports and xmlports fields which are part of the extension package. Actually i want to use a report which have fields which are included in extension package as we cannot include reports in an extrnsion package. Please help me out.


  5. IvicaSD says:

    Extensions are able to add fields and change some properties of existing fields.
    Will extensions be able to OVERRIDE the code in some triggers/functions from core objects without modifying the objects themselves?

Skip to main content