Updating Dexterity code for Microsoft Dynamics GP 2013 continued
I have grouped the discussion points into logical groups, listed below. Many of the Web Client topics discussed are also covered in Part 9: Chapter 43 of the Microsoft Dynamics GP 2013 Integration Guide manual installed with Dexterity.
The Dex.ini file is now separated into two parts. There is a Global or system level Dex.ini file which still resides in the Data subfolder of the application's install folder (by default). However, there is now a User level Dex.ini file which is created in the local workstation's temporary folder. The contents of the User level Dex.ini file are stored in between sessions in the new syUserDexIniSettings (SY01405) table in the System database.
After login the EnablePerUserIni setting in the Global Dex.ini file is checked to see if User level Dex.ini files are enabled, and if it is the LoadUserSettings of form syUserDexIniSettings procedure is called to create the User level Dex.ini file. There is also a call to the SaveUserSettings of form syUserDexIniSettings procedure to save the settings back into the table when the user logs out.
There have been a number of enhancements to the Defaults_ function library to support this functionality. The Defaults_Write() and Defaults_Read() functions can now have an optional target specified as GLOBAL_INI or USER_INI to control which Dex.ini file is written to or read from.
As Dynamics GP enables User level Dex.ini files as standard, your existing code (without the target specified) will write to the User level Dex.ini file and read from both Global and User Dex.ini files. So if your Dexterity customisation needs to read and write to the Global Dex.ini file for settings to affect all users or settings which need to be read before login, your code will add the GLOBAL_INI target parameter.
The addition of the Web Client for Microsoft Dynamics GP 2013 has added a number of additional considerations if you want your code to work well in the web client interface.
Firstly, you will want to identify if your code is running on the Web Client. You have a couple of options here, you can use the IsWebClient() function which gives you the option to override the Runtime_GetClientType() function using the IsWebClient Dex.ini setting. The setting can set to TRUE or FALSE to override the function library command, if missing or any other value, the Runtime_GetClientType() function is used. Or you can call the Runtime_GetClientType() function directly. Using the IsWebClient() function makes it simpler to test behaviour of the Dexterity code without actually running it on the Web Client.
Once you have identified that your code is running on the Web Client, before your code tried to write to the local file system, you will want to check if the Silverlight application is trusted and actually has access to the local file system. You can use the Runtime_GetWebClientTrustLevel() function library command to confirm the trust level.
It is also important to note that COM (Component Object Model) calls to other applications or objects will not work if the applications or objects are not available on the Session host machines. Operating system level calls will probably work fine, but calls to external applications probably will not work.
The Macro system is also not fully enabled in the Web Client and so certain functionality (such as screenshot capture used by the SDT) will not work. If you use on-the-fly created macros in your Dexterity code, you might get a message that the Macro System is in Play Mode if you attempt to perform an unsupported feature.
Finally, not all modules in Microsoft Dynamics GP 2013 are Web Client enabled. Support for the Web Client is being added in Waves. Below is a list of the waves and the modules being added.
- Wave 1 includes System, Financials, Distribution
- Wave 2 adds HR, Payroll
- Wave 3 adds Project Accounting
- Wave 4 adds Field Service
- Wave 5 adds Manufacturing
The method used to disable a window until it is ready to be Web Client enabled is to have a record in the syResourceExclusions (SY05200) table which is checked by the Security() function in the Dynamics dictionary.
Web Client UI
This section covers the User Interface issues that you might see when your application runs in the Web Client. Some of them are minor issues and some of them are ways for you to enhance the user experience when your application is running in the Web Client interface.
List Controls: If your code uses a blank list control (such as a drop down list) and populates the values in the list using the add item command in your code, then you must be aware that on the full client Dexterity does not honour the Sort List checkbox on the data type. However on the Web Client this check box setting is honoured. This can result in the items in a list appearing in a different order when on the Web Client. Make sure the Sort List checkbox on the Static Text Values window is unchecked for blank list fields.
Note: In Dexterity, if you issue a redraw field statement after populating the list field and the Sort List option is checked, the list will be sorted.
See the example screenshots below showing the drop down list unsorted on Dexterity and sorted on the Web Client:
Menus: In the Web Client, there are no Application level or Windows level menus. So options added to the Tools menu, for example, will not be available on the Web Client and alternative navigation via the Area pages or Quick Links will be needed.
Toolbars: In the Web Client, there are no Application level toolbars. Alternative navigation might need to be offered for your application.
Radio Buttons: As the Radio Button control is a little bigger on the screen, the prompts are positioned a 4 more pixels to the right in the Web Client. If using a prompt with Static Text on the data type, you will just need to check that the text still fits. If using a separate text prompt added and linked to the control, then you will either need to move the prompt to the right or make its background Transparent to avoid the prompt overwriting the right edge of the control.
Checkboxes: As the Checkbox control is a little bigger on the screen, the prompts are positioned a 4 more pixels to the right in the Web Client. If using a prompt with Static Text on the data type, you will just need to check that the text still fits. If using a separate text prompt added and linked to the control, then you will either need to move the prompt to the right or make its background Transparent to avoid the prompt overwriting the right edge of the control.
See the example screenshots below. The first shows that the checkboxes look the same in Layout mode while developing, but the prompts are now shifted 4 pixels right when in Runtime mode and this can cause the right edge of the checkbox to disappear in the Web Client:
Checkboxes in Layout Mode
Checkboxes in Dexterity Client
Prompts: Prompts are not underlined in the Web Client. Prompts placed above a field could cause the border of the field to be overwritten. Changing the background to Transparent can be used to resolve this issue.
See the example screenshots below. Notice the top line of the field is missing until the prompt's background was changed:
Window Resizing: Windows in the Web Client cannot be resized, so make sure your windows minimum size is usable without having to expand the window.
No Sound: The Web Client does not play any sounds from the beep command, so you cannot rely on audio cues.
Ribbons: The Web Client replaces the Dexterity Window Control Area (toolbar) with a Ribbon. For information on how to change the default Ribbon behaviour see Part 9: Chapter 44 of the Microsoft Dynamics GP 2013 Integration Guide manual installed with Dexterity.
Window Groups: The Web Client allows related windows to be joined together into a Window Group which is then displayed as tabbed windows in the user interface. For information on how to create Window Groups see Part 9: Chapter 45 of the Microsoft Dynamics GP 2013 Integration Guide manual installed with Dexterity. This feature is used on the Vendor and Customer Maintenance windows as well as the Sales Transaction Entry window.
As there are no window level menus in the Web Client, remember that when editing data in a Scrolling Window, you can use the right click menu to access Delete Row and Insert Row.
Please provide comments and feedback if you have found any other "gotchas" to be aware of.
20-Feb-2013: Added link to Dex - Illegal address for field 'System Database Name' exception post.