Microsoft Dynamics NAV

Team Blog

  • Microsoft Dynamics NAV Team Blog

    Importing objects in a multi tenancy environment

    • 5 Comments

    The following posting is based on a support request where a partner wanted specific instructions what the process should be when trying to import a FOB file in a true multi tenant environment. If you simply import the FOB file, the
    following message box will first pop up to you:

    This box is new in Dynamics NAV 2015 and is not part of the scope of this blog posting. It is the other message box that needs more explanation:

    The first suggestion is to verify if the server is indeed running (of course it is) and the suggestion from support would be to always verify if the server is accessible via the mentioned port. If these are all true, then the second suggestion is to ensure all tenants are dismounted except one. This is because there should only be one tenant mounted that does have the option “Allow application database write to” enabled.

    Note that if you import objects into a multitenant deployment of Microsoft Dynamics NAV 2013 R2, you will see a different error message if you have more than one tenant mounted against your service instance:

    Tenant 'Default" could not be found.
    Check that:
    1. Tenant 'default' is mounted on the server, or
    2. Specify a different Tenant in Tools|Options.

    The meaning is the same as shown in the screenshot from Microsoft Dynamics NAV 2015: Before you import objects into a multitenant application, you must ensure that only one tenant is mounted against that Microsoft Dynamics NAV Server instance, and that this tenant is mounted with the database synchronization mode set to Force.

    The following configuration will generate the warning “Unable to process table changes because the request cannot be processed by the specified Dynamics NAV Server instance”:

    If you dismount all the tenants except the one that does have the option “Allow application database writes” enabled, the warning will not pop up and you will be able to continue the object import. The following configuration will therefore not generate the warning “Unable to process table changes because the request cannot be processed by the specified Dynamics NAV Server instance”:

    To dismount a tenant, you can utilize the Microsoft Dynamics NAV 2015 Administration Shell which may need to be start up with Run as Administrator:

    Dismount-NavTenant –ServerInstance DynamicsNAV80SSL –tenant marketing –force
    Dismount-NavTenant –ServerInstance DynamicsNAV80SSL –tenant production –force
    Dismount-NavTenant –ServerInstance DynamicsNAV80SSL –tenant sales –force
    Dismount-NavTenant –ServerInstance DynamicsNAV80SSL –tenant staff –force

    After you have done the necessary work to get the application upgraded with the latest rollup or whatever fob file you are trying to import, you need do mount the tenants again:

    Mount-NavTenant –ServerInstance DynamicsNAV80SSL –DatabaseInstance NAVDEMO –DatabaseName marketing –DatabaseServer SQL-02 –DefaultCompany ‘CONTOSO Marketing Ltd.’ –id marketing
    Mount-NavTenant –ServerInstance DynamicsNAV80SSL –DatabaseInstance NAVDEMO –DatabaseName production –DatabaseServer SQL-02 –DefaultCompany ‘CONTOSO Production Ltd.’ –id production
    Mount-NavTenant –ServerInstance DynamicsNAV80SSL –DatabaseInstance NAVDEMO –DatabaseName sales –DatabaseServer SQL-02 –DefaultCompany ‘CONTOSO Sales Ltd.’ –id sales
    Mount-NavTenant –ServerInstance DynamicsNAV80SSL –DatabaseInstance NAVDEMO –DatabaseName staff –DatabaseServer SQL-02 –DefaultCompany ‘CONTOSO Staff Ltd.’ –id staff

    Last but not least you need to synchronize the tenant with the application
    database:

    Sync-NavTenant –ServerInstance DynamicsNAV80SSL –tenant marketing 
    Sync-NavTenant –ServerInstance DynamicsNAV80SSL –tenant production
    Sync-NavTenant –ServerInstance DynamicsNAV80SSL –tenant staff 
    Sync-NavTenant –ServerInstance DynamicsNAV80SSL –tenant sales

    Hope this makes the process a bit more clear.

    Regards,

    Marco Mels
    CSS EMEA

    This posting is provided "AS IS" with no warranties, and confers no rights

    This blog post was updated on March 21, 2015, to include a note about the same scenario in Microsoft Dynamics NAV 2013 R2.

  • Microsoft Dynamics NAV Team Blog

    Windows PowerShell and Dynamics NAV for your coffee break - Deploy Dynamics NAV via Windows PowerShell

    • 5 Comments

    In this coffee break we will show a way to deploy Microsoft Dynamics NAV automatically. We assume that Microsoft Dynamics NAV is already installed on the machine, but we want to add additional installations / instances of Microsoft Dynamics NAV.

    Coffee Break 2: Automate a Microsoft Dynamics NAV deployment

    User Story:
    The customer has a system where they spin up a new Microsoft Dynamics NAV system every time they
      - Start a new branch
      - Start a new series of testing
      - Start a new Fiscal Year
      - etc
    In practical terms, a "new Microsoft Dynamics NAV system" could mean new Microsoft Dynamics NAV Server instance and database, a new company, or a new tenant. Typically you would end by starting a new Microsoft Dynamics NAV Server service or spinning up a new tenant. For simplicity in this example we just re-use an existing Microsoft Dynamics NAV Server service to start up on our new database.

    Pre requisites:
    We use a SQL Server PowerShell cmdlet: import-module sqlps. SQLPS module is provided with SQL Server installation, but you don't have to install SQL Server to obtain the module.

    If you don't have SQL Server installed on the box you're running PS on, you can install Microsoft SQL Server 2012Feature Pack:

    http://www.microsoft.com/en-us/download/details.aspx?id=29065

    #Preparation
    $MyNAVServerName = "DynamicsNAV80"
    $MySQLServerName = "."
    $MyNewCustomerName = "NewCustomer"
    $MyNewDatabaseName = "NewCustomerDatabase"

    Set-ExecutionPolicy unrestricted
    import-module "C:\Program Files\Microsoft Dynamics NAV\80\Service\NavAdminTool.ps1"
    Push-Location #jump back to standard prompt with pop-location
    import-module sqlps #ignore any warnings you may get

    #Restore SQL db (NAV demo db)
    #Relocate database files http://stackoverflow.com/questions/26400752/cannot-bind-relocatefile-when-using-restore-sqldatabase-cmdlet
    $mdf = New-Object Microsoft.SqlServer.Management.Smo.RelocateFile("Demo Database NAV (8-0)_Data", "C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\DB_Data_$MyNewCustomerName.mdf")
    $ldf = New-Object Microsoft.SqlServer.Management.Smo.RelocateFile("Demo Database NAV (8-0)_Log", "C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\DB_Log_$MyNewCustomerName.ldf")

    restore-SqlDatabase -ServerInstance $MySQLServerName `
                        -Database $MyNewDatabaseName `
                        -BackupFile "C:\NAVDVD\SQLDemoDatabase\CommonAppData\Microsoft\Microsoft Dynamics NAV\80\Database\Demo Database NAV (8-0).bak" `
                        -ReplaceDatabase `
                        -RelocateFile @($mdf,$ldf)
                       

    #Set network service as dbo
    $CreateServiceAccountUser = "CREATE USER [NT AUTHORITY\NETWORK SERVICE] FOR LOGIN [NT AUTHORITY\NETWORK SERVICE]"
    Invoke-Sqlcmd -ServerInstance $MySQLServerName -Database $MyNewDatabaseName -Query $CreateServiceAccountUser
    $AddServiceAccountAsDbo = "exec sp_addrolemember 'db_owner', 'NT AUTHORITY\NETWORK SERVICE'"
    Invoke-Sqlcmd -ServerInstance $MySQLServerName -Database $MyNewDatabaseName -Query $AddServiceAccountAsDbo

    pop-location # Finished with SQL commands so popping back to normal PS prompt

    #For NAV 2013(R2), to convert the database to latest executable version.
    #For NAV 2015 we don't need this (in fact we don't have the Invoke-DatabaseConversion cmdlet).
    import-module "C:\PSscripts\Upgrade\Cmdlets\NAVUpgradeCmdlets.psm1"
    Invoke-NAVDatabaseConversion -DatabaseServer localhost -DatabaseName "Demo Database NAV (7-1)" -FinSqlExeFile "C:\Program Files\Microsoft Dynamics NAV\71\Service\finsql.exe"

    #At this point the next steps depend on whether we want a new NAV Service, connect to an existing one, etc. Here we just reuse existing NAV Service
    #Configure then restart the service and get status
    Set-NAVServerConfiguration $MyNAVServerName -KeyName DatabaseName -KeyValue $MyNewDatabaseName
    Set-NAVServerInstance $MyNAVServerName -restart
    Get-NAVServerInstance $MyNAVServerName

     

     

    Jasminka Thunes, Escalation Engineer Dynamics NAV EMEA

    Lars Lohndorf-Larsen, Escalation Engineer Dynamics NAV EMEA

  • 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

    • 5 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

    • 1 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.  

Page 4 of 51 (756 items) «23456»