Back home from NAVTechDays. It’s a rainy saturday, nothing much to do in the garden. Kids are playing or doing their saturday activities with sports and scouting. I figured it was time for me to catch up with bookkeeping and some paperwork after all the traveling.
My system is (was) running on NAV2015. I use the small business application (miniapp / Dynamics C5) with some small changes. The biggest changes are:
- The tiles and charts show turnover incl. VAT. I don’t want to see the VAT. For this I had to change the source from Customer Ledger Entries to G/L Entries. There is (AFAIK) no way to show turnover w/o VAT from Customer Ledger.
- Sales Invoice Report: I have to print an extra line for legal requirements in my company.
- I want to use G/L Accounts in the Small Business App. Main reason is that I started using NAV 10 years ago and want to continue posting the way I did before the Miniapp came. Maybe I sould adopt the standard, but hey…
So I want to upgrade to NAV2016. This should be easy right. And it is, and if you don’t use approvals it is actually really easy.
Step 1 is to download NAV2016 CU1. You can do this using the link on the NAV Team Blog. My NAV runs on Azure (yes Aida, I do like Azure don’t worry) and I can install NAV2016 with NAV2015 side-by-side. Just make sure 2016 uses a different port than 2015. After the installation I had to reboot my machine and install some windows updates. Probably a coincidence.
Step 2 was specific to my database, you probably don’t have to do this, but just in case. I had some garbadge leftover from my previous upgrade from NAV2013R2 to NAV2015. The upgrade toolkit was still in the database, as were the obsolete tables. I had to delete those before running the merge commands.
Step 3 is to merge the objects. This is where I used my biggest takeaway from NAVTechDays. In the keynotes Thomas Hejlsberg told that you don’t need to split into individual files before comparing. That save a bunch of steps and keeps my disk a lot cleaner. So for the sake of simplicity I just export the orriginal NAV2015 objects and the objects from my database to the D:\ drive of Azure. This drive is automatically cleaned up by Microsoft which is fine for me.
Tip: Always leave the clean, orriginal database that you started with at your machine. Microsoft is changing the NAV downloads every month.
This is my merge script:
Compare-NAVApplicationObject -OriginalPath “D:\NAV2015.txt” `
-ModifiedPath “D:\NAV2015-MARK.txt” `
-DeltaPath “D:\Delta\” `
About as simple as PowerShell gets. To bad the Development Environment does not allow me to open two or three databases and do this from the UI.
Tip: Use the NAV2016 Merge Commands for the entire process. The 2015 version does not support the new properties and the new version is compatible with 2015. (For what I have tested). The NAV2016 version was also able to handle a conflict that NAV2015 could not.
Step 4: Clean up. Look at your Delta files and investigate if you still need the changes. For example: in my delta I had some changes that I made because I made a mistake during posting. I don’t need these changes anymore.
In Step 5 we apply the Delta to NAV2016. I understand that step 3 & 5 can be combined, but I like to see the deltas and do some cleanup. In my case I had no conflicts. First and foremost because I cleaned up and fixed some code.
Step 6 is optional. I backup my database and restore it with 2016 in the name. My SQL Server database always has the main version in the databasename. This also allows me to go back to the 2015 version. I do this in SQL Server Management Studio, but if you like PowerShell you can script this off course.
Step 7, open your NAV2015 database in NAV2016. This will convert the database binaries to the new version.
Step 8: Create a new service tier in NAV2016 or map the default tier to your database, whichever one you prefer. This can be done in the Administration tool which installs side-by-side in CU1.
Step 9: Schema validation and compile objects. You can do this from the Development Environment. No need for PowerShell. Just run the DevEnv as Administrator and start it from the menu.
Step 10: Create a fob from 2016 with all objects modified in this version (*9.00*). Import this into the 2015 database (Synch Later) Import the merged text objects and compile all objects with Synch Now.
Step 11: Fix errors. Even though the merge has no conflicts, there might still be errors, since the merge does not compile. In my case, Microsoft had removed a global function in page 25. One of my drilldown from the cue used that function. This had to be fixed. This is why upgrades, even in the future, can never be done by a customer as next, next finish. (Sorry Marko)
Step 12: Run Codeunit 2. This will create new setup like workflows.
Step 13: Remove obsolete objects.
CU44, 439, 440
Step 14: Optional, but you could move to a new Azure server. I moved my database to a Windows 2016 CTP3 server with SQL2016 CTP3 and Office 2016. I guess I like 2016.
Is this better than standard procedure? I don’t know. It works quite well and it is fast. You have to run upgrade toolkit for:
- Global Dimension 3 to 8
- Custom Report Layouts
If you don’t have this (like me) you don’t need to run it.
Tip: This way of investigating Upgrade Toolkit is always interesting. It can save you a ton of time to skip steps you don’t have to do.
For me, the next steps are
- Getting the phone client to work. This was/is my most important reason to upgrade. I want to be able to use my phone to scan invoices and receipts.
- Moving my changes to an Extension. This would make the merge next time obsolete. I’d have to see if my code changes can be moved to an event. I must also run hybrid, my Sales Invoice report cannot be in the Extension because of the current limitations.
Great post – just what I needed regarding obsolete objects. How to get the list of obsolete objects the easiest way myself (other than just looking at this post). In my case, i want to be able to upgrade 2015 db with no modifications, and export companies from upgraded db to new standard nav 9-0 db. But if I do not delete obsolete objects, my import says it’s a no-go…
Global Dimensions 3 to 8 ??? You do mean Shortcut Dimensions right or have I missed something?