An international solution should be able to co-exist with any other add-on. License wise this has been enabled by specific objects ranges assigned to the add-on which assures that CSIDE objects – i.e tables, table fields, forms, reports, etc. – do not conflict (however see note 1).
Unfortunately NAV does not have an automatic mechanism that prevents that lower level objects in your solution, like controls and variables – including functions and text constants -, might conflict with other solutions. So you have to make sure controls and variables have ids within your number range. There for you need to enable the GetUidOffset function in COD1. That’s what we did for our solutions.
Some background – Version 3.xx
With version 3.xx, and until version 4.xx, the only way to do this was:
- to trust on the development license you had (see note 2) and/or
- manually assign a specific id to a control/variable in your add-on range
This applied for both development partner and NTR – Navision Territorial Representative – (see note 3).
Some more background – Version 4.xx
Version 4.00 was the first NAV release under the umbrella of MS. The first release where one team had to take care of multiple localizations. Like our WEMEA team that took care of 15 of them (AT, BE, CH, DE, ES, FI, FR, GB, GR, IT, NL, NO, PT, SE, TR). The first release where single developers were going to write code for multiple countries. And instead of forcing them to switch license whenever they had to change from one country to the other a new technical feature was designed, i.e. function 212122 in COD1: GetUidOffset.
Veterans among us will recall that in the first major and minor releases of 4.xx this function could be found in COD1, but after that the NAV build did clean it from the database before a release and a lot of you felt like having been taken away one of your major toys not knowing/being aware you could easily revive it by simply adding the code to COD1. Read more here.
If GetUidOffset does not exist in COD1 the client will fall back on the range that applies for thecountry in your licens (see note 2).
- Reserved object ranges assure that object ids are unique, they however do not assure that object names are unique. Thus add-ons could collide due to duplicate name usage.
- With version 3.xx (starting with Navision Solutions!) every control/variable was automatically assigned a unique id taken from a range depending on the country your license was issued for. I know we had this table in our localization guide at GDL listing all countries with their id range, but as non-MSFT I have no longer access to that. Searching on the web unfortunately did not help me. So I dusted my pile of old product CD and found it listed in the What’s New in C/SIDE 3.10 document. Making me smile and think of days gone by as I was the initial author of this doc. [:)]
Navision United Kingdom
Navision Czech Republic
Navision New Zealand
Navision South Africa
General customer modifications
Add-ons and converted objects
Update 2011-04-29: accidently I did find an online version of this list here today. Now I wonder why I did not come across it before. [:$]
- In pre-MS times a generic localization of NAV was the full responsibility of the Navision NTR. Assignment of control/variable ids in these localizations was based on the same principle as what applied for partners. For that reason many (standard) local features like Telebanking (NL), Cartera (ES), Simulation (FR), still have controls/variables in the country range as listed above.
- GetUidOffset only provides you with a starting number for your ids, but does not help you to keep them within a range; i.e. there is no guard on the upper limit. This might result in controls/variables having ids that are outside of your reserved number range. CSIDE does allow that and most probably you will never have an issue as the next range (following yours) is reserved for an add-on that might never be used alongside your add-on.
- A variable id is assigned within its context, meaning that it’s unique within the local or global context the variable is defined for. You might have two variables in the same object with the same nameand/or id as long as one is global and the other local.