A very interesting question.
Over the years I’ve also been using several methods. But the last 4 years I’ve “frozen” my solutions to one method. The reason is that I’ve been running large international implementations. And when you run implementations with many different developers with different backgrounds from different companies, then you need a very strict and documented method. Basically we are following the same Dynamics NAV standard, as Microsoft applies to NAV.
In my method document I have the following section:
8.4 Version Control
When you are delivering a new version, you may have performed several modifications. You might have updated the objects with an improvement you obtained from Dynamics NAV. You might have an add-on that a created. You have your own core customizations. Plus, you might have changed the core customizations either as an update of the core or as a new.
You have a lot to keep track of. This collection of changed objects is unique and you need to know where all of these objects came from, and that is not all. Suppose, that installing an add-on changed an object and customizing it for the core version further changed it. Now, what will happen when Dynamics NAV releases yet another improvement that affects this object? How do you know which object can just be loaded on and which will take more work than that?
It is for these reasons that you need a method of Version Control. In Dynamics NAV, there are various tools built into C/SIDE that will help you with your version control.
8.4.1 Modification Flag
The Modification Flag is a kind of automatic version control. Whenever you change an object, the modification flag is automatically checked. The only way it is unchecked is if you deliberately uncheck it.
Do not uncheck the modification flag. This is only to be done as part of the release process.
8.4.2 Version Tags
The “version tags” are located in the Object List in the column called Version List. In order to work correctly with the Import Object utility within Dynamics NAV, the version tags require a fairly standardized format. Therefore, first we must cover how the Import Object utility uses the version tags.
The first version tag is usually the Dynamics NAV world wide base application. It consists of parts; if the version tag says NAVW13.10.01.25, the “NAV” is the product (Dynamics NAV), “W1” indicates that it is a world wide object, “3” is the major release, “.10” is the minor release, “.01” is the maintenance release (service pack), and the “.25” is the unreleased (but published) hot fix number. In all cases, before we publish a release or an improvement, we turn the Modification flag off. If a level is missing, for example, NAVW13.10, the numbers are left off. The major and minor release numbers are always present, but there may not be a service pack or hot fix as of yet. Since the import utility uses ASCII compare (character by character), NAVW13.10 is considered earlier than NAVW13.10.01.
8.4.2.1 Standard Dynamics NAV version tags
The version tags consist of:
- Base Application version tags (first world wide, then localized NTR versions)
- Other Dynamics NAV Product version tag (i.e. commerce portal)
- Add-on version tags
- ISS modifications version tag
Here are some other examples:
A released base application object from an NTR:
NAVW13.10
The same released base application object, with hot fix number 23:
NAVW13.10.00.23
The same object, with ISS core version 1.00:
NAVW13.10.00.23,ISSC1.00
8.4.2.2 ISS Usage
You must always leave the Dynamics NAV version tags alone! As you are making changes, you should leave the modification flag on, this is only done upon release of the object.
A new version is only created by the Dynamics NAV development team.
The development team works with major versions (i.e. ISSC2.00), minor versions (i.e. ISSC1.50), maintenance service packs or regular periodical releases (ISSC1.50**.01**).
8.4.2.2.1 Hot Fixes
Hot fixes does not get a version tag, but keeps the DIL# tag until the issue is included in a regular periodical release.
Versions with our “in-progress” tags (DIL#’s and initials) may never be released to production.
8.4.2.3 Standard ISS Core Version Tag Codes
The general ISS version tag to use is:
ISSC ISS World Wide Core
We do not put any version information into the time of the objects. But neither do we set it to a default like 12:00 like MS. And that’s basically because we have see that the ZUP file is not always updated correctly if the time of the object is not changed (even though the date is changed). And that has caused some forms not to work correctly.
The above not the only part in our methodology document describing the use of the version lists. Because whereas the normal version list is basically “out of the book”, then the other usage is more specialized. In my methodology a issue requiring development is called a Development Issue List Number - DIL#. And this number is used by our developers whenever they change an object.
8.1.1 Work In Progress Version Lists
You must now “lock” the object. This is done by adding the DIL# (i.e. #231) to the version list in the Development Database and your initials.
If the object is already locked, then you can not start doing your changes before the other user has “un-locked” the object again.
The DIL# is our reference to the DIL (Development Issue List) so that we know what changes was included when we install an update. Changes without a DIL# are not allowed. So make sure that you’ve registered it before starting the process.
Example on work in progress version list:
#4231-ABC
If you are modifying and existing object, then your WIP version is added to the existing version, i.e.:
NAVW13.00,#4421-ABC
If the object you are modifying contains non-released versions (versions with #), then add your new DIL# to the version list like:
NAVW13.00,#4421,#4434-ABC
Make sure that you never have more than one work-in-progress version at the time.
Installed purchased add-on packages, also in connection with add on-upgrades, must always carry the version from the vendor. But while “in-progress” (in the development, development-test and release databases, as well as in the training databases during user and release tests) they must also carry the DIL#, to allow us to filter on the objects that must be released. In the DIL system the developer must then manually maintain the correct version list of the object after the release.
Whenever the modifications are released to the production database, then the DIL# part of the version list is removed, and replaced with the version list code for the release (see the above description). The locking of the objects are removed when the DIL# is approved by the QA manager, and not until then our other developers are not allowed to use the objects. It’s out method to avoid using Visual Source Safe. And as long as you have a very active QA manager, then this works very good.