Identifying actions in ui.Dialog methods
In ui.Dialog methods such as setActionActive(), the first parameter identifies the action object to be
modified. This parameter can be fully-qualified or partly-qualified. If you don't specify a
fully-qualified name, the action object will be identified based on the focus context.
The action name specification can be any of the following:
- action-name
 - dialog-name.action-name
 - dialog-name.field-name.action-name
 - field-name.action-name (singular dialogs only)
 
Here action-name identifies the name of the action specified in
ON ACTION action-name or COMMAND "action-name"
handlers, while dialog-name identifies the singular dialog or sub-dialog and field-name
defines the field bound to the action INFIELD clause
of ON ACTION.
The runtime system will raise the error -8089 if the action specified by [dialog-name.][field-name.]action-name can not be found within the current dialog.
As a general rule, assign unique action names for each specific dialog action, to avoid the usage of dialog and/or field identifiers.
ON ACTION PrintReport
...
CALL DIALOG.setActionActive("PrintReport", FALSE)In the DIALOG
instruction, actions can be prefixed with the sub-dialog identifier. However, if methods like setActionActive() are
called in the context of the sub-dialog, the prefix can be omitted. When using a field-specific
action defined with the INFIELD clause of ON ACTION, you can
identify the action with the fully-qualified name
dialog-name.field-name.action-name. Like sub-dialog actions, if you specify only
action-name, the runtime system will search for the action object based on the
focus context.
Note that an INPUT or
CONSTRUCT sub-dialogs
have no identifier by default. The dialog name can be defined with the NAME
attribute. For more details, see Identifying sub-dialogs in DIALOG.
When using a singular dialog like INPUT, you can identify field-specific
actions by field-name.action-name, if the dialog was defined without a
NAME attribute.
Example
MAIN
  DEFINE cust_rec RECORD
            num INT,
            name VARCHAR(50),
            city INT
         END RECORD
  DEFINE orders DYNAMIC ARRAY OF RECORD
            ord_num INT,
            cust_num INT,
            ord_date DATE
         END RECORD
  OPEN FORM f1 FROM "cust_ord"
  DISPLAY FORM f1
  DIALOG ATTRIBUTES(UNBUFFERED)
   INPUT BY NAME cust_rec.* ATTRIBUTES(NAME="cust")
      ON ACTION compare
         CALL compare()
      ON ACTION check INFIELD cust_city
         CALL check_city(cust_rec.city)
   END INPUT
   DISPLAY ARRAY orders TO sr_ord.*
      ON ACTION archive
         CALL archive()
   END DISPLAY
   ON ACTION print
      CALL print()
   ON ACTION disable_all
      CALL DIALOG.setActionActive("cust.compare", FALSE)
      CALL DIALOG.setActionActive("cust.cust_city.check", FALSE)
      CALL DIALOG.setActionActive("sr_ord.archive", FALSE)
      CALL DIALOG.setActionActive("print", FALSE)
  END DIALOG
END MAIN