AFTER FIELD block
In dialog instructions INPUT
, INPUT ARRAY
,
CONSTRUCT
or in a DISPLAY ARRAY
using the
FOCUSONFIELD
attribute, the AFTER FIELD
block is executed every
time the focus leaves the specified field.
For single record inputs driven by INPUT
or query by example (QBEs) driven by
CONSTRUCT
, the AFTER FIELD
block is executed when moving the focus
from field to field.
For editable lists driven by INPUT ARRAY
, the AFTER FIELD
block
is executed when moving the focus from field to field in the same row, or when moving to another row
in the same column.
For record lists driven by DISPLAY ARRAY
using the FOCUSONFIELD
attribute, the AFTER FIELD
block is executed when moving the focus from field to
field. However, the fields will not be editable as in an INPUT ARRAY
.
The AFTER FIELD
keywords must be followed by a
list of form field specifications. The screen-record name can be omitted.
AFTER FIELD
is executed before
AFTER INSERT
, ON ROW CHANGE
, AFTER
ROW
, AFTER INPUT
or AFTER
CONSTRUCT
.
When a NEXT FIELD
instruction is executed in an AFTER
FIELD
block, the cursor moves to the specified field,
which can be the current field. This can be used to prevent
the user from moving to another field / row during data input. Note
that the BEFORE FIELD
block is also executed
when NEXT FIELD
is invoked.
The AFTER FIELD
block of the current field is not executed when performing a
NEXT FIELD
; only BEFORE INPUT
, BEFORE CONSTRUCT
,
BEFORE ROW
, and BEFORE FIELD
of the target item might be executed,
depending on the sub-dialog type.
When ACCEPT DIALOG
, ACCEPT INPUT
, or ACCEPT
CONTRUCT
is performed, the AFTER FIELD
trigger of the current field is
executed.
Use the AFTER FIELD
block to implement field validation
rules:
INPUT BY NAME p_item.* ...
AFTER FIELD item_quantity
IF p_item.item_quantity <= 0 THEN
ERROR "Item quantity cannot be negative or zero"
LET p_item.item_quantity = 0
NEXT FIELD item_quantity
END IF