Candy,
First:
You should use unique tab indexes: If several fields have the same tabindex, only the first found can be reached with tab.
However, tabindex don't need to be sequential (1,2,3,4,5,6). You can define groups like (101,102,103; 201,202,203; etc).
Then:
Normally we should support dynamic modification of the tabIndex attribute during dialog execution. Since multiple dialogs, and especially in 2.20 with the ON ACTION INFIELD, we have to pre-calculate the tabbing list when the dialog starts. So your code would work in 2.1x with singular dialogs but not with DIALOG / END DIALOG or singular dialogs in 2.20 (use now the same code).
Note that I wrote "modification of the tabIndex attribute during dialog execution", this is important I believe, since you want to allow users to change the tabbing order while using a form. Tabbing list is calculated when a dialog starts, but remember with DIALOG / END DIALOG you don't leave the dialog as often as with the singular dialogs such as INPUT.
I think we should support dynamic changes of tabIndex during dialog execution, this was just working before multiple dialogs code.
So I filed a bug (#11922) to track this issue.
Seb