Guidelines for Partners
NAV Upgrade Assessment Tool allows Dynamics NAV end-users to receive an assessment of their upgrade from Microsoft Dynamics NAV to Business Central. It will show two possible scenarios and determine whether an upgrade is easy, medium, or hard in each of those scenarios. The goal of this tool is to show how difficult it would be to migrate in the two scenarios:
- Data upgrade, tables, and add-ons only
or
- Full upgrade, including customizations
This tool will help you collect the necessary information for the automated evaluation. When installed and run in your NAV environment, it will show you the following statistics:
- number of companies in the database,
- size of the database,
- current NAV/BC version,
- number of custom and customized tables,
- number of all objects,
- a number of add-ons. It will also run a check whether those add-ons have new versions and migration path available.
Guideline about “NAV Upgrade Assessment Tool”
The NAV Upgrade Assessment Tool is a FOB file that contains the following three objects in the custom range: page 50098 NAV Upgrade Assessment Tool, page 50099 Assessment Tool Table List, and MenuSuite 1070 NAV Upgrade Assessment Tool.
1. Import NAV Upgrade Assessment Tool
Open your Microsoft Dynamics NAV Development Environment. Please ensure you have the permissions and licenses necessary to import objects. Also check if you have the object IDs free for the above objects. If the custom page or menusuite IDs are not free, you must renumber our objects before using this tool. Press File -> Import
Choose the proper file and press ‘Open’. Choose ‘No’ if you want to open the Import Worksheet or ‘Yes’ to import pages/forms.
2. Run NAV Upgrade Assessment Tool
After import, please open object designer, find page/form “50098 NAV Upgrade Assessment Tool” and run it.
Once you run that page, it will open in your NAV client. Please use the button “Get Information” to retrieve it. You should see something like the screenshot below:
In case you do not receive any information, please use the “Test SQL Connection” and “Test WS Connection” actions to learn where the issue might be. If you are still receiving issues, please share a detailed message to us at [email protected].
Description of how the displayed data in the image is obtained:
- Number of companies to migrate – Number of companies is calculated by counting all the records of table 2000000006 “Company”.
- Current NAV version – version is retrieved from codeunit’s 9015 “Application System Constants” using standard procedure “ApplicationVersion” which returns build version of current NAV. Then, by using the system function STRPOS, we specify the version of NAV without the numbers indicating cumulative update.
IF STRPOS(AppVerString, '14.') <> 0 THEN AppVerString := '14' ELSE BEGIN IF STRPOS(AppVerString, '13.') <> 0 THEN AppVerString := '13' ELSE BEGIN IF STRPOS(AppVerString, '11.') <> 0 THEN AppVerString := '11' ELSE BEGIN IF STRPOS(AppVerString, '10.') <> 0 THEN AppVerString := '10' ELSE BEGIN IF STRPOS(AppVerString, '9.') <> 0 THEN AppVerString := '9' ELSE BEGIN IF STRPOS(AppVerString, '8.') <> 0 THEN AppVerString := '8' ELSE BEGIN IF STRPOS(AppVerString, '7.1') <> 0 THEN AppVerString := '71' ELSE BEGIN IF STRPOS(AppVerString, '7.0') <> 0 THEN AppVerString := '7' ELSE BEGIN AppVerString := AppMgt.ApplicationVersion; END; END; END; END; END; END; END; END;
- Number of custom tables to migrate – Number of custom tables is calculated by counting the records of table 2000000038 “AllObj” after applying filter ‘50000..99999’ to the field “Object ID”.
- Number of customized standard tables to migrate – Number of standard tables that have added custom fields is calculated by using the code:
AllObject.RESET; AllObject.SETFILTER("Object Type", '1'); AllObject.SETFILTER("Object ID", '1..49999|100000..1000000|99000750..99008535'); IF AllObject.FINDSET THEN BEGIN REPEAT Field.RESET; Field.SETRANGE(TableNo, AllObject."Object ID"); Field.SETFILTER("No.", '50000..99999'); IF Field.FINDFIRST THEN CustomizedStandardTables += 1; UNTIL AllObject.NEXT = 0; END;
Variable AllObject is record of table 2000000038 “AllObj”, variable Field is record of table 2000000041 “Field”.
- Number of Add-ons – After applying filter ‘100000..99008535’ to the field “ID” of table 2000000001 “Object”, the tool’s code checks in every filtered record if the table’s field “Version List” contains a version that is not a standard one. If a nonstandard version is found in the version list, then the table 2000000001 “Object” is filtered by the detected version to determine the ID range of the found add-on. The SOAP request sends the determined ID range to our database, which contains a list of existing add-ons and returns a response that contains information identifying the detected add-on (name, provider). If our database does not have information about add-on, then it’s marked as ‘unknown’. The ‘Number of Add-ons’ is calculated by counting all detected add-ons.
Moreover, after counting the add-ons, all the add-ons that were found are listed in the page group “Add-ons”. Check marks “Add-on Migration Tool Exists” and “ Add-on Extensions Exists” indicates whether identified add-on has the data migration toolkit and extension in the newer version.
- Unknow Add-on Exists – Checkmark is checked if an unknown add-on is found.
- Number of Unknown Add-on’s objects – Number of unknown add-on objects is calculated by counting all the records of the table 2000000001 “Object” after filtering it’s field “Version List” with unknown add-on’s version tag for every found unknown add-on.
- Current NAV Localization – localization is retrieved from codeunit’s 9015 “Application System Constants” using standard procedure “ApplicationVersion” which returns build version of current NAV. Function’s returned value contains tag of NAV’s localization and we retrieve it by using system function COPYSTR.
AppLocaliztion := COPYSTR(AppMgt.ApplicationVersion, 1, 2);
- Database size in GB – The database size is retrieved by sending SQL statement to SQL Server, which displays space usage information about the needed database. SQL Statement: ‘USE [database_name]; EXEC sp_spaceused’. Before sending the SQL statement, it is required to connect to the SQL Server. Class Data.SqlClient.SqlConnection is used to establish a connection to the SQL Server (from DotNet assembly System.Data.SqlClient.dll ). Connection is established with a connection string:
‘Data Source=ServerName;Initial Catalog=DatabaseName;Integrated Security= SSPI;MultipleActiveResultSets=TRUE’
Connection code:
_ConnString := STRSUBSTNO( 'Data Source=%1;' + 'Initial Catalog=%2;' + 'Integrated Security=%3;' + 'MultipleActiveResultSets=TRUE', ServerName, DatabaseName, 'SSPI'); IF ISNULL(_SQLConn) THEN _SQLConn := _SQLConn.SqlConnection(_ConnString); _SQLConn.Open;
ServerName is retrieved by using the class ServerUserSettings of assembly Microsoft.Dynamics.Nav.Types:
ServerName := ServerUserSettings.Instance.ServerName;
DatabaseName is retrieved from the field “Database Name” of table 2000000048 “Database” after filtering out records that have the field “My Database” set to ‘false’.
After connecting to the server and sending the SQL statement, the result of the statement is read. Function “ExecuteReader” from class SqlCommand is used to execute the SQL statement, and class SqlDataReader is used to read the result (both classes are from assembly System.Data.SqlClient.dll).
IF _SQLConn.State = 1 THEN BEGIN _SQLCommand := _SQLCommand.SqlCommand; _SQLCommand.Connection := _SQLConn; _SQLCommand.CommandText := STRSUBSTNO('USE [%1];'+'EXEC sp_spaceused;',_DatabaseName); _SQLReader := _SQLCommand.ExecuteReader; IF _SQLReader.HasRows THEN BEGIN IF _SQLReader.Read THEN; DatabaseSizeString := _SQLReader.GetString(1); END ELSE ERROR('No rows found'); END ELSE ERROR('The connection to the database has been closed.');
The database size from the result is in Megabytes, so we need to convert it to Gigabytes. SQL statement’s result is provided as a string, so before converting size to GB, we first convert it to Decimal type. Code that provides the final result of the database size:
DatabaseSizeString := CONVERTSTR(DatabaseSizeString,'.',','); DatabaseSizeString := SELECTSTR(1,DatabaseSizeString); EVALUATE(DatabaseSize,DatabaseSizeString); DatabaseSize := ROUND((DatabaseSize/1024),0.01,'=');
- The “Objects” page group displays the number of all objects in the database by type. Objects of each type are calculated by counting the records of table 2000000038 “AllObj”, filtered by each object type that exists in NAV. When counting tables and codeunits, filter ‘1..2000000000’ is applied to the field “Object ID” to exclude system objects. Code and displayed information:
AllObject.RESET; AllObject.SETFILTER("Object Type", '1'); AllObject.SETFILTER("Object ID", '1..2000000000'); TableCount := AllObject.COUNT; AllObject.RESET; AllObject.SETFILTER("Object Type", '3'); ReportCount := AllObject.COUNT; AllObject.RESET; AllObject.SETFILTER("Object Type", '5'); AllObject.SETFILTER("Object ID", '1..2000000000'); CodeunitCount := AllObject.COUNT; AllObject.RESET; AllObject.SETFILTER("Object Type", '6'); XMLPortCount := AllObject.COUNT; AllObject.RESET; AllObject.SETFILTER("Object Type", '7'); MenuSuiteCount := AllObject.COUNT; AllObject.RESET; AllObject.SETFILTER("Object Type", '8'); PageCount := AllObject.COUNT; AllObject.RESET; AllObject.SETFILTER("Object Type", '9'); QueryCount := AllObject.COUNT;
3. Review tables (optional)
Before submitting the number of tables to be upgraded, we suggest reviewing the table list and deciding whether all tables should be migrated. In order to view custom or customized tables, click on the field’s “Number of custom tables to migrate” calculated number.
The assessment Tool Table List page opens and shows all the custom tables counted (here it is possible to filter by “Version List”, ID, Date, and other fields if only some specific tables have to be included):
You can view table fields by pressing the “Table Fields” action:
4. Submit results for Assessment
Once you have reviewed the results, use the “Fill In Simplanova Form” button to send your statistical data to the Simplanova website. This will take you to Simplanova’s website’s online form.
You will see your NAV solution information automatically populated to the form under the “Technical information” tab. Please review. You will then be asked to fill-in the “Contact information” tab.
Once you submit the online form, you will receive an email with an assessment of your NAV Upgrade effort evaluation together with the inputs from your NAV solution. You can use this information to consult with your Microsoft Partner on the best migration path for you.
NAV Upgrade Assessment Tool is great for getting the required information for Microsoft’s „AIM“ incentive program for upgrading Dynamics NAV to Business Central SaaS. As a Microsoft Modernization Center, Simplanova can help you navigate through the program. You can find more information on the „AIM” incentive here: AIM with Simplanova. To download the NAV Upgrade Assessment Tool, click here: Nav Upgrade Assessment Tool. Don’t miss out on this opportunity because the program will run until June 30, 2024.