Binding action views to action handlers
How are action views of the forms bound to action handlers in the program code?
Form action views (such as
buttons) are bound to action handlers by
the name
attribute. Action handlers are defined in interactive instructions with an
ON ACTION
clause or COMMAND
/ ON KEY
clauses.
ATTRIBUTES
section of the form, a button may be
defined as follows:BUTTON b1: show_help, TEXT="Show Help";
show_help
" action
name:ON ACTION show_help
CALL ShowHelp()
TOOLBAR tb
ITEM show_help ( TEXT="Show Help" )
...
BUTTONEDIT
buttons (using the ACTION
attribute to define the
action name):BUTTONEDIT f1 = customer.cust_city, ACTION = open_city_list;
The COMMAND
/ ON KEY
clauses are typically used to
write text mode programs. Such clauses define the name of the action and the decoration
label. It is recommended that you use ON ACTION
clauses instead,
because they identify user actions with an abstract name. However, if required, you can
use a COMMAND
clause in a non-menu dialog to include the corresponding
action view in the focusable form items.
ON ACTION action-name
clause, the name of the action must
be a valid identifier, preferably written in lowercase letters. In the abstract user
interface tree (where the action views are defined), action names are case sensitive (as
they are standard DOM attribute values). However, identifiers are not case sensitive in
the language. The fglcomp compiler always converts the action
identifiers of ON ACTION
clauses to
lowercase:ON ACTION PrintRecord -- will be compiled as "printrecord"
To avoid confusion, always use lowercase names for action names (for example,
print_record
instead of PrintRecord
).
BUTTON b1 = cust_list.append, TEXT="Add new customer"; -- cust_list is the sub-dialog id
With
a simple name, the action will be automatically enabled, if the action exists for the sub-dialog
having the focus, and the action is enabled. With a sub-dialog name as prefix, the action view will
be active even if the focus is not in the corresponding sub-dialog. For more details, read Sub-dialog actions in procedural DIALOG blocks