This is a reposting of an article I originally wrote on my Developing for Dynamics GP blog.
Today, we go back to basics. It is always good to make sure that we have the foundations handled properly. When I teach the Dexterity, I always go through the standard checklist below for creating (or modifying) Dexterity windows.
This checklist is valid for Dexterity when creating new windows or editing existing windows which will become alternate windows. It is also valid when using Modifier to modify existing windows.
- Check the User Interface (UI)
There are User Interface Guidelines in Appendix F of the Dexterity Basics training manual (see links below). These guidelines should be followed to ensure that your windows or changes to windows cannot be told apart from the original windows. Some common issues I find are:1) 3D line under the Window Control Area (Toolbar) to cover the black line is missing, or the line is present, but has not been made wide enough to fully reach the right hand edge of the window.2) Buttons in the Window Control Area (Toolbar) are not separated by 2 pixels with a 3D vertical line (starting at vertical position 3 with length 16) between each button AND after the last button.
3) When two fields are next to each other the borders create a double thick line between them. To fix, click on the fields to the left and press Shift-Right Arrow to increase the size by 1 pixel.
4) When creating Scrolling windows, turn the borders off for the fields in the scrolling window and draw new borders with the line tool. Make sure that every drawn line is set to 2D Border. This will prevent the 1 white pixel of a vertical 3D line breaking up the horizontal lines.
- Link Prompts
For the prompts to be “greyed out” when the field is disabled, hidden when the field is hidden or to show in a different style for a required field, the field must be linked to the prompt.
- Link Lookups
For lookups to be be disabled when the field is disabled, or for the Ctrl-L keyboard shortcut to work, the field must be linked to the lookup button.
- Tab Sequence
To make your windows keyboard friendly, the tab sequence should include all fields as well as the main action buttons. The first field in the sequence should be the first field on the window, which is usually the primary key field. The tab sequence should then work right, across the fields in a column then down the lines to the end of the section. Then if the window has more than one column, the tab sequence goes back to top of that column and works down. When the end of the section is reached it starts back at the top left of the next section and repeats zig zagging its way through the fields. Once the last field is reached then it should go through the toolbar buttons and then finally any buttons at the side or bottom of the window.Note: Remember to press Tab in between each field when setting the tab sequence, otherwise the tab sequence will be reversed.
- Position Window
You should position the window away from the top left corner. If this window will be used with other windows, you can position it so that it will be visible or at least not completely hidden by the other windows.
If the field includes fields that can be resized, such as lists, scrolling windows, treeviews or listviews, you might want to change the window to use per field resizing and then define the behaviour wanted for ALL fields, prompts and lines. Use the Ctrl-5 preview mode from window layout to test the resizing.
Always compile all the code when you think you have finished. Logical errors cannot always be avoided, but leaving syntax errors in code is completely avoidable.
Everything you develop should be tested and tested and then tested again. By the way… did I mention that you should test your code.
Here are the links for the Dexterity training materials (which include the UI guidelines):
Note: The latest materials are for v9.0, but the content is applicable to v10.0 and later.
If you are new to Dexterity, this article will help you learn what you need:
Hope you find this best practice checklist useful.
This article was originally posted on the Developing for Dynamics GP Blog and has been reposted on http://www.winthropdc.com/blog.