Actions bound to the current row
Actions can be configured with the ROWBOUND attribute depending on
whether there is a current row.
When using a DISPLAY ARRAY or INPUT ARRAY dialog to control a
table view, actions can get the ROWBOUND attribute, in order to make the action only available when there
is a current row in the list.
The ROWBOUND attribute is typically used with TABLE and
TREE containers, but can also by used with SCROLLGRID and static
lists in GRID containers (however in last case there will be no row-specific
decoration of the action views)
The main purpose of the ROWBOUND attribute is to have the corresponding action enabled and disabled
automatically by the runtime system, depending on the existence of a row. The default decoration of
such action is front-end platform driven and is the consequence of using the
ROWBOUND action attribute. A DISPLAY ARRAY or INPUT
ARRAY can be used with a plain form that show a single row at a time. The rowbound actions
can also be used in such case, using form buttons as action views for example. These buttons will be
automatically enabled/disabled according to the list content.
In DISPLAY ARRAY, the actions created from modification triggers ON UPDATE
and ON DELETE are automatically defined as rowbound actions. Actions for ON
INSERT and ON APPEND are not considered as specific to a row.
The actions defined with the ROWBOUND attribute will be available by selecting
the three-dots button on the right of a table row.
If the action is disabled, the corresponding rowbound action view of the three-dots button will not be displayed.
DISPLAY ARRAY dialog implements three actions:- The "refresh" action is not "rowbound", and will always be available (active/visible), even if the list is empty.
- The "check" action is rowbound, and will only be available if there is a (current) row in the list.
- The "delete" action created by the
ON DELETEmodification trigger is implicitly "rowbounded".
DISPLAY ARRAY a_orders TO sr.* ATTRIBUTES(UNBUFFERED)
...
ON ACTION refresh -- not rowbound
CALL fetch_orders()
ON ACTION check ATTRIBUTES(ROWBOUND,TEXT="Check")
CALL check_order(arr_curr())
ON DELETE -- implicitly rowbound (text defined in default.4ad)
CALL delete_order(arr_curr())
...
END DISPLAY