AFTER CONSTRUCT block
AFTER CONSTRUCT block in singular and parallel CONSTRUCT dialogs
In a singular CONSTRUCT instruction, or when used as parallel dialog,
the AFTER CONSTRUCT is only executed once when dialog is ended.
Use an AFTER CONSTRUCT block to execute instructions after the user
has finished search criteria input.
AFTER CONSTRUCT is not executed if an EXIT CONSTRUCT is
performed.
The code in AFTER CONSTRUCT can for example check if a criteria
combination of different fields is required or denied, and force the end use to enter all
Before checking the content of the fields used in the CONSTRUCT, make sure
that the INT_FLAG variable is FALSE. In the case that the user
cancels the dialog, the validation rules must be skipped.
Since no program variables are associated with the form fields, you must query the input buffers of the fields to get the values entered by the user.
CONSTRUCT BY NAME where_part ON ...
...
AFTER CONSTRUCT
IF NOT INT_FLAG THEN
IF length(DIALOG.getFieldBuffer(cust_name))==0
OR length(DIALOG.getFieldBuffer(cust_addr))==0 THEN
ERROR "Enter a search criteria for customer name and address fields."
NEXT FIELD CURRENT
END IF
END IF
END CONSTRUCT
To limit the validation to fields that have been modified by the end user, you can call the
FIELD_TOUCHED() function or the DIALOG.getFieldTouched() method to
check if a field has changed during the dialog execution. This makes your validation code execute
faster if the user has only modified a couple of fields in a large form.
AFTER CONSTRUCT block in CONSTRUCT of procedural DIALOG
In a CONSTRUCT sub-dialog of a procedural DIALOG
instruction, the AFTER CONSTRUCT block is executed when the focus is lost by a
group of fields driven by a CONSTRUCT sub-dialog. This trigger is invoked if a
field of the sub-dialog loses the focus, and a field of a different sub-dialog gets the focus.
If the focus leaves the current group and goes to an action view, this trigger is not executed, because the focus did not go to another sub-dialog yet.
AFTER CONSTRUCT is executed after the AFTER
FIELD and before the AFTER DIALOG block.
Executing a NEXT FIELD in the AFTER CONSTRUCT control
block will keep the focus in the group of fields.
In this example, the AFTER CONSTRUCT block is used to build the SELECT
statement:
CONSTRUCT BY NAME sql ON customer.*
AFTER CONSTRUCT
LET sql = "SELECT * FROM customers WHERE " || sql