Giving the focus to a form element

How to force the focus by program, to move or stay in a specific form element.

Use the NEXT FIELD instruction to force the focus to a specific field or screen record (list). The NEXT FIELD instruction expects a form field name.

In a DIALOG block, when the specified field is the first column identifier of a sub-dialog driven by a DISPLAY ARRAY block, the read-only list gets the focus. If the field name is not known at compile time, you can alternatively use the ui.Dialog.nextfield() method.
DIALOG ATTRIBUTES(UNBUFFERED)
   INPUT BY NAME p_cust ATTRIBUTES(NAME="cust")
     ...
   END DISPLAY
   DISPLAY ARRAY p_orders TO orders.*
     ...
   END DISPLAY
   ON ACTION go_to_header 
      NEXT FIELD cust_num 
   ON ACTION go_to_detail 
      NEXT FIELD order_lineno 
   ...
END DIALOG
When a BUTTON exist in the form layout, it can get the focus if the DIALOG block defines a COMMAND clause as action handler. Currently there is no way to give the focus to a BUTTON by program.
DIALOG ATTRIBUTES(UNBUFFERED)
   ...
   COMMAND "print" 
      CALL print_order()
   ...
END DIALOG
In some seldom cases (especially when using folder tabs), it may be need to show a part of the form that is not controlled by the dialog (i.e. there is no active field or button that can get the focus in that form part, thus the above techniques cannot work). To show temporary a given part of the form that cannot get the focus, use the ui.Form.ensureFieldVisible() or ui.Form.ensurelementVisible() methods.
DEFINE form ui.Form
...
DIALOG ATTRIBUTES(UNBUFFERED)
   ...
   BEFORE DIALOG
      LET form = DIALOG.getForm()
   ...
   ON ACTION show_image1 
      CALL form.ensureElementVisible("image1")
   ...
END DIALOG