Microsoft Dynamics NAV

Team Blog

  • Microsoft Dynamics NAV Team Blog

    Announcing the Microsoft Dynamics ERP Translation Solution

    • 5 Comments

    The Microsoft Dynamics ERP Translation Solution is now available. This solution was developed by the MBS Engineering International team to improve the experience when Microsoft Dynamics AX and Microsoft Dynamics NAV partners translate our products or the solutions developed by them into existing and additional languages.

    The ERP Translation Solution is applicable to Microsoft Dynamics AX 2012 R3 and Microsoft Dynamics NAV 2015 or earlier releases. It provides automation for the translation related tasks through the ERP Translation Tool. Translation is done in the XLIFF format, a localization industry standard format, enabling partners to work with the translation editor of their choice.  The solution provides automated machine translation and access to MS linguistic assets through the Microsoft Translator Hub from Microsoft Research. Partners are also given the option to use the free light weight translation editor available in the Multilingual App Toolkit (MAT).

    Sign up in order to use  the ERP Translation Solution - the solution details and the sign up page are available at the Microsoft Dynamics Partner Localization and Translation Licensing Program Resource Center in Partner Source.

     

    Best regards,

    The Microsoft Business Solutions Engineering International team and the Microsoft Dynamics NAV team

  • Microsoft Dynamics NAV Team Blog

    Cumulative Update 4 for Microsoft Dynamics NAV 2015 has been released

    • 17 Comments

    Cumulative Update 4 includes all application and platform hotfixes and regulatory features that have been released for Microsoft Dynamics NAV 2015. 

     The cumulative update includes hotfixes that apply to all countries and hotfixes specific to the following local versions:

    •   AU - Australia
    •   AT - Austria
    •   BE - Belgium
    •   CH – Switzerland
    •   CZ – Czech Republic
    •   DE - Germany
    •   DK - Denmark
    •   ES - Spain
    •   FI  - Finland
    •   FR - France
    •   IS - Iceland
    •   IT - Italy
    •   NA - North America
    •   NL - Netherlands
    •   NO - Norway
    •   NZ - New Zealand
    •   RU – Russia
    •   SE - Sweden
    •   UK - United Kingdom

    Please note that Cumulative Update 4 requires a database conversion. This is caused by the introduction of the ability to return the Microsoft Dynamics NAV Tablet client as the current client type. You will be able to read about that in the MSDN Library after we complete the monthly update of the Microsoft Dynamics NAV 2015 content there on February 11, 2015. For more information, see Updated Help Content

    Where to find Cumulative Update 4

    You can download the cumulative update from KB 3035986  – Cumulative Update 4 for Microsoft Dynamics NAV 2015 (Build 39663). 

    Additional Information

    For information about how to install the cumulative update, see How to Install a Microsoft Dynamics NAV 2015 Cumulative Update

    For information about how to work around a recent process change, see How to Get Back the 'Hotfix Directories' from NAV 2015 Cumulative Update 1.

    For a list of all cumulative updates for this version, see Released Cumulative Updates for Microsoft Dynamics NAV 2015.  

  • Microsoft Dynamics NAV Team Blog

    Cumulative Update 16 for Microsoft Dynamics NAV 2013 R2 has been released

    • 4 Comments

    Cumulative Update 16 includes all application and platform hotfixes and regulatory features that have been released for Microsoft Dynamics NAV 2013 R2.

     The cumulative update includes hotfixes that apply to all countries and hotfixes specific to the following local versions:

    •   AU - Australia
    •   AT - Austria
    •   BE - Belgium
    •   CH – Switzerland
    •   CZ – Czech Republic
    •   DE - Germany
    •   DK - Denmark
    •   ES - Spain
    •   FI  - Finland
    •   FR - France
    •   IS - Iceland
    •   IT - Italy
    •   NA - North America
    •   NL - Netherlands
    •   NO - Norway
    •   NZ - New Zealand
    •   RU – Russia
    •   SE - Sweden
    •   UK - United Kingdom

    Where to find Cumulative Update 16

    You can download the cumulative update from KB 3035983  – Cumulative Update 16 for Microsoft Dynamics NAV 2013 R2 (Build 39665). 

    Additional Information

    For more information about cumulative updates for this version, see Announcement of update rollups for Microsoft Dynamics NAV 2013 R2.

    For a list of all cumulative updates for this version, see Released Cumulative Updates for Microsoft Dynamics NAV 2013 R2

    For a list of all hotfixes included in cumulative updates for this version, see the following CustomerSource and PartnerSource pages:

    CustomerSource:

    PartnerSource

  • Microsoft Dynamics NAV Team Blog

    Cumulative Update 23 for Microsoft Dynamics NAV 2013 has been released

    • 2 Comments

    Cumulative Update 23 includes all application and platform hotfixes and regulatory features that have been released for Microsoft Dynamics NAV 2013.

    The cumulative update includes hotfixes that apply to all countries and hotfixes specific to the following local versions: 

    • AU - Australia
    • AT - Austria
    • BE - Belgium
    • CH - Switzerland
    • DE - Germany
    • DK - Denmark
    • ES - Spain
    • FI - Finland
    • FR - France
    • IS - Iceland
    • IT - Italy
    • NA - North America
    • NL - Netherlands
    • NO - Norway
    • NZ - New Zealand
    • SE - Sweden
    • UK - United Kingdom

    Where to find Cumulative Update 23

    You can download the cumulative update from KB 3035980 - Cumulative Update 23 for Microsoft Dynamics NAV 2013 (Build 39671).

    Additional Information

    For a list of all cumulative updates for this version, see Released Cumulative Updates for Microsoft Dynamics NAV 2013

    For a list of all hotfixes included in cumulative updates for this version, see the following CustomerSource and PartnerSource pages:

    CustomerSource:

    PartnerSource:

  • Microsoft Dynamics NAV Team Blog

    Learn NAV PowerShell in your coffee breaks

    • 8 Comments

    For learning PowerShell in the lunch break we have this option.

    We thought that was a good idea. But we also thought we can do even better: Do some NAV PowerShell in your coffee breaks. This post is the first in a series of small script ideas of things you can do with NAV using PowerShell. If you find this useful or have ideas to improvements then please add your comments below and also suggest what you would like to see next.

     

    Coffee Break 1: Add AD users to NAV.

    User story

    Consider the following scenario: With the new security model in Microsoft Dynamics NAV 2013 and later versions, it is no longer possible to add users and permissions by merely adding Windows Groups. Besides, as of NAV 2013, you may not be using Windows authentication. The user wants to automate what is otherwise a trivial task of looking up Windows users, and entering them into NAV.
     
    The script below will give some ideas for adding NAV users in a batch.

    Pre requisites:

    Depending on which OS you run it on, you may need to install Remote Server Administration Tools (RSAT). Make sure to install the one that matches your OS and version. If you run Win 8.1 then install it from here:

    Remote Server Administration Tools for Windows 8.1
    http://www.microsoft.com/en-gb/download/details.aspx?id=39296

    If you run it on a server OS, you may just need to enable it. For more details:
    https://technet.microsoft.com/en-us/library/dd378937(v=ws.10).aspx

    To see if the module is installed, just try to import it and see if that works:

    Import-Module ActiveDirectory

     

     Coffee break 1 - importing NAV users from Active Directory

    #Suggestion: Run each line below one by one and then put them together as needed.

    #Install Remote Server Administration Tools (RSAT) first as described above, then import module

    Import-Module ActiveDirectory

     

    #Import NAV admin module for the version of Dynamics NAV you are using

    Import-Module 'C:\Program Files\Microsoft Dynamics NAV\80\Service\NavAdminTool.ps1'

     

    #Specify your Dynamics NAV Service name

    $NavServerName = "DynamicsNAV80"

     

    #AD filter for use in the next line. If you are not on a large domain, then run the next line (get-aduser) without this filter, or if you use the filter then adjust it to your scenario and domain.

    $Mysearchbase = "DC=<Domain>[,DC=<Corp Domain>,...]"

    #For example:

    $Mysearchbase = "DC=EUROPE,DC=CONTOSO,DC=com"

     

    #Next we will get AD users. If you want to import only users from a Windows group or a subdomain, you can filter the result set on sub-domain/group/...  Furthermore, we have chosen to retrieve only user name and alias in the example below, but choose any properties that fit your purpose. You can see the entire cmdlet output by running get-help <cmdletname>.Furthermore, we want to save this output into a list that we later can retrieve and modify if needed. The list format and default delimiter might vary depending on regional settings, a semicolon is defined here as a delimiter.

    get-aduser -filter 'samaccountname -like "*bill*"' -searchbase $Mysearchbase | Select-Object -Property Name,SAmaccountname | export-csv "c:\temp\userlist.csv" -notypeinformation  -Delimiter ';' -force 

    #Assign the list to a variable

    $myuserlist = Import-csv "c:\temp\userlist.csv"

    #Show the list

    $myuserlist

     

    #Another way of assigning the output to a variable is using outvariable. Next we want to  then pipe everything to New-NAVServerUser cmdlet to create new users in NAV. In the above example we have only read SamAccountName and User Name from  AD, so to add users as Windows users to NAV, following our Contoso scenario, we need to add the domain name too : DOMAIN\samaccountname. 

    import-csv C:\temp\userlist.csv -Delimiter ';' -OutVariable myuserlist | foreach {New-NAVServerUser -serverinstance $NavServerName -WindowsAccount "<DOMAIN>\$($_.samaccountname)"}

    #You can combine the above two actions (Reading AD users and then importing them into NAV) into one cmdlet, without saving the output as in the example above.

    #We're using a loop here and not the pipeline, as New-NAVServerUser doesn't seem to take the pipeline input

    get-aduser -filter 'samaccountname -like "*bill*"' -searchbase $Mysearchbase | foreach { New-NAVServerUser -serverinstance $NavServerName -WindowsAccount "<DOMAIN>$($_.samaccountname)"}

     

    <#Consider now the following scenario. User wants to get AD users using the export script above, but wants to add roles to this user list, before importing them into NAV. So he will break the above process into 2 steps again - in step 1 he will save AD users into a list, then assuming a modified list with added roles - he will import the list of users and their roles into NAV in step 2.

    Step one is then unchanged from the example above (using csv list). Next we will assume that the list is now modified to add roles to users.

    Example below shows step 2, where this list is imported to create users and assign permissions in NAV. Userlist2.csv file refered to in the script below is the name of the csv file containing users and permissions. Example below shows format of this file (csv, semicolon delimited) with Contoso users as examples:

     

    EUROPE\mrhill;BASIC,RAPIDSTART

    EUROPE\mssaddow;BASIC,COST,CASHFLOW

    EUROPE\joeroberts;SUPER

     

    If a user or a role defined in this list already exists in NAV, the cmdlet is expected to continue since the ErrorAction parameter is set to Continue (which is also the default value of this parameter). However it is singled out here to direct the attention to error handling opportunities that best fit the user's scenario. Review the possible values of this parameter and how to use them using get-help cmdlet. The following blog is worth checking:

    http://blogs.msdn.com/b/powershell/archive/2006/11/03/erroraction-and-errorvariable.aspx

    #>

     

    $NavServerName ="DynamicsNAV80"

    $list = Import-csv -Path C:\temp\userlist2.csv -Delimiter ';' -Header username,roleset

    foreach ($user in $list)

    {

      $navuser=Get-NAVServerUser -ServerInstance $NavServerName

       if(!($navuser.UserName -contains $user.username))

         { 

        New-NAVServerUser -ServerInstance $NavServerName -WindowsAccount $user.username -ErrorAction Continue

        }

    #In the csv file used in this example, the list of roles is divided by a comma

      $roleset=$user.roleset.Split(',')

         foreach ($role in $roleset)

        {

        $navrole=Get-NAVServerUserPermissionSet -ServerInstance $NavServerName -WindowsAccount $user.username

        if(!($navrole.PermissionSetID -contains $role))

            {

         New-NAVServerUserPermissionSet -ServerInstance $NavServerName -WindowsAccount $user.username -PermissionSetId $role -ErrorAction Continue

     

           }

        }

    }

     

     

    More coffee breaks to follow soon!

     

    Jasminka Thunes, Escalation Engineer Dynamics NAV EMEA

    Lars Lohndorf-Larsen, Escalation Engineer Dynamics NAV EMEA

     

     

  • Microsoft Dynamics NAV Team Blog

    .NET Exception Handling in C/AL

    • 2 Comments

    This pattern is brought to you by Mostafa Balat from the Dynamics NAV team here at MDCC in Denmark.

    Best regards,

    The NAV Patterns team

    Meet the Pattern

    When there is a need to use .NET classes within C/AL, one of the main challenges is to handle the exceptions the methods of these .NET classes may throw. Eventually, if not handled, they will basically bubble up as runtime errors, halting the current operation a user is doing without having a chance to properly display errors in a user-friendly format.

    Know the Pattern

    Using the .NET classes in order to extend the functionality in Microsoft Dynamics NAV usually triggers the need to create an add-in assembly. This is a pretty powerful approach and opens the door for empowering Microsoft Dynamics NAV with new and extra functionality while harnessing the full power of the .NET Framework.

    For example, integration with a web service in Microsoft Dynamics NAV can be done to extend the existing functionality, or to benefit from a service model offered through a 3rd party. To do so, it is possible to write a .NET add-in to handle the required bi-directional communication between Microsoft Dynamics NAV and the web service. Alternatively, the implementation itself can be done in C/AL, with no add-in dependency. The latter option simplifies customization, deployment and upgradeability. Additionally, it builds up on the knowledge Microsoft Dynamics NAV developers have with C/AL programming.

    On the other hand, not using an add-in exposes Microsoft Dynamics NAV to runtime errors due to unhandled exceptions that get thrown at different levels. The first is the communication layer, in which HTTP requests and responses are exchanged. The second is the business logic layer, at which the content of the requests and response is being prepared and groomed using XML Elements and being retrieved or edited based on the respective XPaths.

    Use the Pattern

    When .NET classes are used, they may throw exceptions upon failure. Some of these exceptions cannot pre-checked (e.g. like existence of a file on disk) and will only be figured out at runtime. Eventually, to present the error reason to a user and explain what needs to be done to address it, the exception needs to be handled gracefully. This also protects the client for unexpected crashes that may deteriorate the user experience.

    Read more about .NET Exception Handling on the Design Patterns Wiki..

  • Microsoft Dynamics NAV Team Blog

    Control Add-In dll’s files in Microsoft Dynamics NAV 2015

    • 6 Comments

    With Microsoft Dynamics NAV 2015 there comes one feature in Add-In files area – you do not need manually to copy add-in dll to client: when client doesn’t find it, NAV copies add-in from server.

    It is very good: If you’ve installed NAV client on some computer, you don’t care about all add-ins, when user needs it, he will have it.

    When NAV client can’t find add-in in client Add-ins folder, usually it is: c:\Program Files (x86)\Microsoft Dynamics NAV\71\RoleTailored Client\Add-ins\, then NAV copies whole add-ins folder from NST computer to client computer to folder C:\Users\[username]\AppData\Local\Temp\1\Microsoft Dynamics NAV\Add-Ins\

    But here are few points you need to know when updating add-ins or have strange issues related to your updated add-in functionality.

    • NAV recognizes add-ins by:

      • Product Name (it could be not the same as file name and file properties in windows file explorer doesn’t show it. You can see it by run power cmdlet “(Get-ItemProperty [filename]).VersionInfo.ProductName”);

      • Product version (it is not the same as file version, you can see it in file properties in windows file explorer or run powershell “(Get-ItemProperty [filename]).VersionInfo.ProductVersion”);

      • Public key token (you’ve set it in VisualStudio project when compiled add-in. You can see it by run developer command prompt statement “sn –T [filename]”). Details at http://msdn.microsoft.com/en-us/library/dd983825.aspx.
        So if any of these fields are different, NAV will recognize dll as different add-in.

    • NAV fill in assembly list table with these 3 fields and when NAV looks for dll it uses these fields to recognize which dll need to be loaded. If for some reasons you have 2 files with different names, but the same mentioned properties then for NAV there is only one add-in.

    • When NAV is looking for add-in, it looks in NAV add-ins folder, then in Temp folder and if hasn’t found then download from server add-ins folder. If you updated add-in on server and deleted it in client folder, it could be that old add-in version still remains in temp folder and NAV client will use it for work.

    • If you recompiled your add-in and have changed something, but you haven’t modified add-in properties, then you need to replace add-in files on server and on client computer (in NAV folder). It is not enough to replace file on server only, because NAV doesn’t recognize that new add-in needed to use and do not download add-in file from server. But it is also not enough to delete add-in file on client computer in NAV folder, just because old version could remain in temp folder too. Of course you can delete add-in file in both folders (in NAV and in Temp). But if computer is used by few users, then you need to delete files from every user temp folder, then maybe easier way is replace add-in file only in NAV folder. As soon as add-in file exists in folder, NAV doesn’t look it in temp folder.

     

    These postings are provided "AS IS" with no warranties and confer no rights. You assume all risk for your use.

    Gedas Busniauskas

    Microsoft Lithuania
    Microsoft Customer Service and Support (CSS) EMEA

  • Microsoft Dynamics NAV Team Blog

    How to control keyboards events in Add-in

    • 3 Comments

    With Microsoft Dynamics NAV Role Tailored Client we’ve received possibility to add ControlAddIn to any field on page. This opens huge possibilities to extend functionality with own controls.
    We can create any .Net control with Visual Studio, register it in NAV controls and add it to any field on page by describe control name in field “ControlAddIn” property.
    Then whenever user put focus on this field, NAV forwards full control to AddIn and now AddIn does whatever it wants.

    And here comes first issue: if AddIn controls everything then all NAV shortcuts are not active and then what to keyboard key to click if want to go on page to next field/control? Only way is to use mouse and click on another control. This is not best way for UX, especially if you want to do that fast.

    Issue was resolved with Cumulative Update 9 for Microsoft Dynamics NAV 2013 R2 (Build 37221) released in July 2014.
    https://mbs.microsoft.com/partnersource/global/deployment/downloads/hot-fixes/NAV2013R2PlatformHotfixOverview
    With this update NAV keyboard events are left for NAV – user can scroll per controls like in any other page.

    But here comes another issue: what to do if we want to leave some keyboard events to AddIn? For example we are using RichTextBox in AddIn for text managing, here <enter> key splits line and jumps to new line. But with CU9 cursor jumps to next page control as <enter> is used by NAV. What to do? We need something flexible: leave event to NAV or to AddIn depends what addin does.

    Here comes Cumulative Update 14 for Microsoft Dynamics NAV 2013 R2 (Build 38801) released in December 2014. It allows us to choose where <enter> must to be: in NAV or in Addin.

    With this update new interface is implemented in Microsoft.Dynamics.Framework.UI.Extensibility, it is “IControlAddInEnterKeyHandler”. And now we can decide how <enter> key is acting,
    will cursor stay in AddIn control

    public class ControlAddInWithKeyboardFilter : StringControlAddInBase, IControlAddInEnterKeyHandler

        {

            private RichTextBox rtb;

                     public override bool AcceptsEnterKey

            {

                //get { return false; }

                get { return true; }

            }

      

            protected override Control CreateControl()

            {

                rtb = new RichTextBox();

                rtb.Multiline = true;

                return rtb;

     

            }

     

    Or cursor jumps to next NAV control:
      public class ControlAddInWithKeyboardFilter : StringControlAddInBase, IControlAddInEnterKeyHandler

        {

            private RichTextBox rtb;

     

                    public override bool AcceptsEnterKey

            {

                //get { return true; }

                get { return false; }

            }

     

           

     

            protected override Control CreateControl()

            {

                rtb = new RichTextBox();

                rtb.Multiline = true;

                return rtb;

             }

     

     

    These postings are provided "AS IS" with no warranties and confer no rights. You assume all risk for your use.

    Gedas Busniauskas

    Microsoft Lithuania
    Microsoft Customer Service and Support (CSS) EMEA

  • Microsoft Dynamics NAV Team Blog

    Memory usage when is used .NET components

    • 5 Comments
    We already had few support request where NAV developers see big memory consumption increase when using .NET component.
    Especially when method is inside some loop.
    Like in this sample:

      FOR count := 1 TO 10000000 DO BEGIN
            varDOTNET :=varDOTNET.DotNetObject();
            varDOTNET.SetValue('par');
            CLEAR(varDOTNET);
       END;

     

    Even it looks like we create variable and then clear it – we can see continues memory usage increase in windows task manager.
    But this is not “memory leak” this is how NAV is managing memory. If you start process again then memory usage decrease and increase to the same number.
    So only during processing there could be issue that few users running the same code comes to memory limits.
    Resolution is to transfer .NET method execution to local function

     FOR count := 1 TO 10000000 DO 
     CallToFunction(‘par’);
    …………

    PROCEDURE CallToFunction@1(parameter@1170000001 : Text);
    VAR
      varDOTNET@1170000000 : DotNet "'MemoryExample, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.MemoryExample.DotNetObject";

            varDOTNET :=varDOTNET.DotNetObject();
            varDOTNET.SetValue(parameters);
            CLEAR(varDOTNET);

     

    Also here are other coding ways where you can transfer part DotNet variable execution to functions. But it is always more effective transfer execution to function where "garbage collector" can make his job faster and more effective.

     

    These postings are provided "AS IS" with no warranties and confer no rights. You assume all risk for your use.

    Gedas Busniauskas

    Microsoft Lithuania
    Microsoft Customer Service and Support (CSS) EMEA


  • Microsoft Dynamics NAV Team Blog

    “Timer” usage in Microsoft Dynamics NAV 2013

    • 2 Comments

    Last time we have seen our “old” NTimer.dll was Microsoft Dynamics NAV 2009. It was placed in  ..\Common\Microsoft Dynamics NAV\Timer\.. folder.
    Usually we have used it for NAS or other looping tasks.

    We want to have the same in Microsoft Dynamics 2013 and later, however we see that the same doesn’t work anymore.
    So how it is now?

    Since Microsoft Dynamics NAV 2013 timer becomes “.NET” type in add-in’s folder. Now it is named “Microsoft.Dynamics.Nav.Timer.dll” and placed on server in C:\Program Files\Microsoft Dynamics NAV\70\Service\Add-ins\Timer.. folder.
    Usage, manage and expected results are now different.

    First of all this is server side timer.

    We use timer as DotNet type variable like:
    Timer@1000 : DotNet "'Microsoft.Dynamics.Nav.Timer, Version=8.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'.Microsoft.Dynamics.Nav.Timer" WITHEVENTS;

    Use variable in code like:
    IF ISNULL(Timer) THEN BEGIN
                  Timer := Timer.Timer;
                  Timer.RedirectExceptions := TRUE;
                  Timer.Interval := 10000; // 10 seconds
                  Timer.Start();
                END;

    It has two events “Elapsed” and “ExceptionOccurred” (if RedirectExceptions = TRUE).
    Event “Elapsed” is executed when we want with code we want.
    If we use “Timer” in NAS then code in “Elapsed” event is code we want to be executed by NAS.

    And here comes big point:
    If error in our C\AL code occurs then error is logged to events, NAS stops and session is terminated. We have option in NAV service config – “Retry Attempts Per Day”. Default value is 3. It means that after error occurs and NAS stops, there will be NAS restart and this will be done 3 times. If we have started NAS first time manually then after error occurs there will be 3 attempts to restart NAS. Finally we’ll have 4 errors in event viewer and need to restart NAS manually.
    To avoid such situations we need move all our c\al code to codeunit and catch all errors with c\al code like:
    …….
    IF NOT CODEUNIT.Run(xxx) THEN
      InsertError(“A business logic error occurred: “ + GETLASTERRORTEXT);
    ……..
    Here in “Elapsed” event we execute some codeunit and if error during execution occurs, it is logged with some function InsertError.

    Event “ExceptionOccurred” is executed when unknown exceptions like polling data from http stream causing io/timeout etc. exception comes to timer. So in this event we can log some network issues with code like:
    InsertError(“A .NET exception occurred: “ + e.Exception.Message);
    Where “e.Exception.Message” is error message text received by timer. This error is logged to events and, NAS stops and session is terminated. We have the same situation like in “Elapsed” event: NAS will be restarted as many times as described in config settings.

    These postings are provided "AS IS" with no warranties and confer no rights. You assume all risk for your use.

    Gedas Busniauskas

    Microsoft Lithuania
    Microsoft Customer Service and Support (CSS) EMEA

  • Microsoft Dynamics NAV Team Blog

    Cumulative Update 22 for Microsoft Dynamics NAV 2013 has been released

    • 1 Comments

    Cumulative Update 22 includes all application and platform hotfixes and regulatory features that have been released for Microsoft Dynamics NAV 2013.

    The cumulative update includes hotfixes that apply to all countries and hotfixes specific to the following local versions: 

    • AU - Australia
    • AT - Austria
    • BE - Belgium
    • CH - Switzerland
    • DE - Germany
    • DK - Denmark
    • ES - Spain
    • FI - Finland
    • FR - France
    • IS - Iceland
    • IT - Italy
    • NA - North America
    • NL - Netherlands
    • NO - Norway
    • NZ - New Zealand
    • SE - Sweden
    • UK - United Kingdom

    Where to find Cumulative Update 22

    You can download the cumulative update from KB 3024895 - Cumulative Update 22 for Microsoft Dynamics NAV 2013 (Build 39369).

    Additional Information

    For a list of all cumulative updates for this version, see Released Cumulative Updates for Microsoft Dynamics NAV 2013

    For a list of all hotfixes included in cumulative updates for this version, see the following CustomerSource and PartnerSource pages:

    CustomerSource:

    PartnerSource:

  • Microsoft Dynamics NAV Team Blog

    Cumulative Update 15 for Microsoft Dynamics NAV 2013 R2 has been released

    • 0 Comments

    Cumulative Update 15 includes all application and platform hotfixes and regulatory features that have been released for Microsoft Dynamics NAV 2013 R2.

     The cumulative update includes hotfixes that apply to all countries and hotfixes specific to the following local versions:

    •   AU - Australia
    •   AT - Austria
    •   BE - Belgium
    •   CH – Switzerland
    •   CZ – Czech Republic
    •   DE - Germany
    •   DK - Denmark
    •   ES - Spain
    •   FI  - Finland
    •   FR - France
    •   IS - Iceland
    •   IT - Italy
    •   NA - North America
    •   NL - Netherlands
    •   NO - Norway
    •   NZ - New Zealand
    •   RU – Russia
    •   SE - Sweden
    •   UK - United Kingdom

    Where to find Cumulative Update 15

    You can download the cumulative update from KB 3024898  – Cumulative Update 15 for Microsoft Dynamics NAV 2013 R2 (Build 39354). 

    Additional Information

    For more information about cumulative updates for this version, see Announcement of update rollups for Microsoft Dynamics NAV 2013 R2.

    For a list of all cumulative updates for this version, see Released Cumulative Updates for Microsoft Dynamics NAV 2013 R2

    For a list of all hotfixes included in cumulative updates for this version, see the following CustomerSource and PartnerSource pages:

    CustomerSource:

    PartnerSource

  • Microsoft Dynamics NAV Team Blog

    Cumulative Update 3 for Microsoft Dynamics NAV 2015 has been released

    • 8 Comments

    Cumulative Update 3 includes all application and platform hotfixes and regulatory features that have been released for Microsoft Dynamics NAV 2015. 

     The cumulative update includes hotfixes that apply to all countries and hotfixes specific to the following local versions:

    •   AU - Australia
    •   AT - Austria
    •   BE - Belgium
    •   CH – Switzerland
    •   CZ – Czech Republic
    •   DE - Germany
    •   DK - Denmark
    •   ES - Spain
    •   FI  - Finland
    •   FR - France
    •   IS - Iceland
    •   IT - Italy
    •   NA - North America
    •   NL - Netherlands
    •   NO - Norway
    •   NZ - New Zealand
    •   RU – Russia
    •   SE - Sweden
    •   UK - United Kingdom

    Where to find Cumulative Update 3

    You can download the cumulative update from KB 3024901  – Cumulative Update 3 for Microsoft Dynamics NAV 2015 (Build 39368). 

    Additional Information

    For information about how to install the cumulative update, see How to Install a Microsoft Dynamics NAV 2015 Cumulative Update

    For information about how to work around a recent process change, see How to Get Back the 'Hotfix Directories' from NAV 2015 Cumulative Update 1.

    For a list of all cumulative updates for this version, see Released Cumulative Updates for Microsoft Dynamics NAV 2015.  

  • Microsoft Dynamics NAV Team Blog

    Using SQL Server Extended Events to produce a Blocked Process Report

    • 1 Comments

    Blocking in SQL Server is a mixed blessing! It is a SQL Server’s way of ensuring data integrity which is a basic requirement for any database management system but when users encounter a lot of blocking it makes the application appear slow and sometimes unusable. Therefore, system administrators need to be able to analyse SQL Server blocking and take action to minimise it in order to get the best database performance possible.

    A traditional approach to blocking analysis is to use Windows Performance Monitor. The “SQL Server:Locks” counters gives you a graphical view of lock activity, e.g:

    • How many locks are being requested per second
    • How long SQL queries are waiting due to blocking.
    • How many locks requests are timing out.

    You can then use SQL Server Agent to configure alerts on these performance counters and be notified, for example, when lock wait times exceed whatever threshold you deem acceptable.

    Troubleshooting blocking using Performance Monitor (or SQL Server Profiler) is all very well but can impose a performance hit which may not be practical for a busy, resource intensive live environment. Also, it may not provide all of the details you need to understand the cause of the blocking. If only there was a lightweight way of monitoring SQL Server blocking problems which would be suitable for a busy live environment!

    You might be surprised to find out that just such a lightweight monitoring mechanism has existed since SQL Server 2008 was released. Ladies and gentlemen, allow me to introduce my good friend, the “Extended Events” feature of SQL Server! Several key performance indicators can be monitored using SQL Server Extended Events. The following steps show in detail how you can create a “Blocked Process Report” for your SQL Server environment to capture relevant blocking details without incurring much of a performance penalty.

    First, you need to decide how many seconds a process should be blocked for in order for it to be included in the report, i.e. the blocked process threshold. If you set this value too low you may generate too much noise in the report. If you set it too high you might not get any processes waiting long enough to appear in the report. For Microsoft Dynamics NAV environments, the value should be less than any “Lock Timeout” setting which may be enabled (as set in the NAV Development Environment, see File -> Database -> “Alter Database” -> “Advanced” tab). For this exercise I will only include processes which are blocked for more than 5 seconds in my Blocked Process Report.

    So, I need to run some TSQL statements in order to configure 5 seconds as the blocked process threshold. The following will do the trick:

    exec sp_configure 'show advanced options',1;
    go
    reconfigure
    go
    exec sp_configure 'blocked process threshold',5;
    go
    reconfigure
    go

    NB: After running the above, you may want to consider setting the ‘show advanced options’ value back to ‘0’ if your SQL Server administrator prefers this.

    Now, to create and test the Blocked Process Report. The following are the steps required (examples are based on SQL Server 2012 SP1):

    1. Start SQL Server Management Studio (SSMS) and open the “Extended Events” folder as shown below:

    clip_image001

    2. Right click on the “Sessions” folder and select “New Session Wizard”. Click “Next” on the Introduction page.

    3. When prompted, provide a “Session Name”, e.g. My Blocked Process report.

    4. For the “Choose Template” page select “Do not use template”

    5. In the “Select Events To Capture” enter the word “blocked” in the “Event Library” text box. This will limit the events listed so you can easily identify the “blocked_process_report”. Select this report and then click on the ‘>’ button in order to move this into the “Selected events” pane. Then click “Next”.

    6. In the “Capture Global Fields” page, click on the “Finish” button.

    7. On the “Success” page, click on the “Close” button.

    8. At this stage you have created a Blocked Process Report and should be able to see it shown as an “Extended Report” Session, like this:

    clip_image002

    9. For our requirements, we want to store the report session data into a file as this will be more convenient to work with, especially if you want to send it to a Microsoft Support Engineer! To do this, right click on the “My Blocked Process Report” and select “Properties”.

    10. In the left pane of the “Session Properties” widow select the “Data Storage” page (see screenshot in the step below:

    11. Click on the “Add” button to add a new storage type. In the “Type” column select “event_file” as shown here:

    clip_image003

    12. Now fill out the “Properties” to specify a where you want the report file to be placed and what space values you want to allow. Then click “OK”

    Of course, there are many other options you can configure and additional information you can capture but for this exercise we will just create a simple report in order to try out the feature. You can right-click on the “My Blocked Process” report and change other properties later if you like.

    So, let’s start our report session and then cause some blocking so you can see how the report looks. The following steps can achieve this:

    1. To start the session simply right click on “My Blocked Process Report” and select “Start Session”.

    2. To create some blocking, first run the following TSQL commands in a SSMS Query window:

    use tempdb
    go
    create table Table1 (a1 int)
    go
    begin tran
    insert into Table1 values(1)
    go

    3. Now start a 2nd TSQL Query Window and run the following command which will be blocked behind the connection running the above statements:

    use tempdb
    go
    select * from table1

    4. Leave the 2nd TSQL Query Windows running in a blocked state for a few moments so that the blocking report can start to accumulate blocking events. After about a minute, enter the following TSQL statement in the 1st SSMS Query Window to remove the cause of this blocking incident:

    rollback tran

    5. Now right-click on the “My Blocked Process Report” in SSMS and select “Stop Session”.

    6. To review the details in the blocked process report go to the file location you specified for the “event-file” you stipulated earlier (see step 11 above). In the folder you specified you should see a file with a name like this:

    “My Blocked Process Report_0_130651143384850000.xel”

    7. Double click on this report and it will open it in SSMS. It should contains some events related to the blocking we created above and will look like this:

    clip_image004

    8. As you can see, there are multiple events recorded. This is because we had a single blocked process which was waiting for over 5 seconds (but it was blocked for a minute so it was reported multiple times). Double-click on the first of these events and you will see some more detail about the blocking incident, like this:

    clip_image005

    9. At first glance, the fields shown above may appear only mildly interesting. The duration value is in microseconds so the above event records a blocking process which had been in a blocked state for just over 5 seconds. You can see that the block occurred in the tempdb database along with some other details. You could be forgiven for being underwhelmed by the information displayed here but before giving up take a closer look at the “blocked_process” field which contains some xml content. This is the good stuff we are looking for. Double-click on the xml value in this field to open it up in SSMS. You will see something like the following:

    image

    10. This information can be extremely useful for understanding the blocking problem. Notice that it contains the following details (and more):

    For the Blocked Process:

    • Object ID
    • Wait time (in milliseconds this time)
    • When the transaction started
    • Lock Mode
    • Transaction status (e.g. suspended)
    • Connection ID (SPID)
    • Client application name
    • Machine name (Hostname)
    • Login name
    • Isolation level
    • Input buffer, i.e. the actual SQL statement which was blocked.

    For the Blocking process:

    • Object ID
    • Wait time
    • Connection ID
    • Input buffer, i.e. the SQL statement which caused the blocking. Please note that this only appears on the first event record for each distinct blocking incident.

    Hopefully you will find this approach to diagnosing blocking problems helpful. As you may have noticed, Extended Event Sessions can be used to collect all sorts of other system information from SQL Server but in this blog we have only been concerned with blocking analysis. The fact that these Extended Event Sessions are fully integrated with the SQL Server engine means that they have very little impact on performance making this approach ideal for monitoring live environments.

    Gerard Conroy
    Dynamics NAV Support EMEA

    P.S: Have you ever wondered “How do I Profile Application Code in Microsoft Dynamics NAV 2013 R2”? If so, you need look no further: http://msdn.microsoft.com/en-US/dynamics/nav/dn858631

  • Microsoft Dynamics NAV Team Blog

    C/AL Coding Guidelines used at Microsoft Development Center Copenhagen

    • 4 Comments

    Recently, the NAV Design Patterns team published the C/AL Coding Guidelines that we use at Microsoft Development Center Copenhagen to the Dynamics NAV Community Wiki site. Please join us there if you want to read and discuss the guidelines. 

    However, we've been asked for a printable version of the guidelines as well, so we attached a PDF file with the current version to this blog post. This PDF file will not be updated if and when the guidelines change, so please consider them a snapshot as of January 2015. For more information, see the Dynamics NAV Community Wiki.

     

    Best regards,

    The NAV Design Patterns team

Page 5 of 52 (769 items) «34567»