Do people still use keyboards in this day and age of graphical user interfaces and mice?  You be they do!  After all, it's really hard to type with a mouse and removing your hand from the keyboard to move and click the mouse button actually lowers productivity.

So, if you use the keyboard to perform data entry while in Microsoft CRM, you have probably noticed what I consider to be a non-standard tab order implementation.

CRM tabs from top-to-bottom, left-to-right
( within a section; after which it moves on to the next section ):

 Example 1: ( CRM Tab Order )

Field1 Field3
Field2 Field4

Most other applications tab from left-to-right, top-to-bottom:

  Example 2: ( Normal Tab Order )

Field1 Field2
Field3 Field4 

 

How the Tab Order Works 

Each data entry field has a property called tabIndex which is a number ( integer ) that instructs the window the order in which to move the cursor between the various fields.  The order is from from lowest to highest, i.e., from 1 to 10,000, or whatever. 

This means your first field has the lowest tabIndex value and your last field as the highest.

Microsoft CRM appears to set the first data entry field tabIndex to 1000 and increases the tabIndex by 10 for each subsequent field. For example:

Example 3: ( CRM Tab Order, with TabIndex Values )

Field1: TabIndex=1000 Field3: TabIndex=1020
Field2: TabIndex=1010 Field4: TabIndex=1030

 

Changing the Tab Order

In certain cases, you may wish to change the tab order so that users are not so confused by the change ( and you as the form designer are not confused as to where and how to place your fields ).  All we need is a little JavaScript code in the Form's OnLoad event, and we're set:

crmForm.all.Field1.tabIndex = 1000;
crmForm.all.Field3.tabIndex = 1010;
crmForm.all.Field2.tabIndex = 1020;
crmForm.all.Field4.tabIndex = 1030;

Note: replace Fieldx with the schema name of the field and leave the rest as is.

Which produces the following Tab Order:

Example 3: ( Tab Order Reset )

Field1: TabIndex=1000 Field3: TabIndex=1010
Field2: TabIndex=1020 Field4: TabIndex=1030

 

Final Notes:

  1. Setting the tabIndex to 0 will result in the field being ignored by the tab order. While you don't run into this requirement often, it is there if you need it.
  2. Setting the tabIndex values to random numbers would be:
    1. Funny ( for a little bit )
    2. Would confuse the heck out of the users
    3. Would generate support calls
    4. And probably get you fired. :)