Controlling field values
Fields values in dynamic dialogs can be manipulated dynamically.
Unbuffered mode is the default
Dynamic dialogs behave by default in UNBUFFERED
mode. When an action is fired
and the corresponding trigger handler is executed, the field is validated and the value is available
in the corresponding program variable. When changing the variable value by program, the value is
automatically displayed to the corresponding form-field.
For more details see The buffered and unbuffered modes.
Default form-field values
A dynamic input dialog created with ui.Dialog.createInputByName
behaves like a static INPUT
dialog using the WITHOUT DEFAULTS
option: The DEFAULT
attribute of the form-field is not used.
A dynamic input array dialog created with ui.Dialog.createInputArrayFrom behaves like a static INPUT
ARRAY
using the WITHOUT DEFAULTS
option: The values set in the internal
rows before starting the dialog will be used. However, like with a static INPUT
ARRAY
, when adding a new row, the DEFAULT
attributes of the form-fields
are used.
For more details about the WITHOUT DEFAULTS
clause, see Form field initialization.
Setting an getting field values
A dynamic dialog stores field values in internal buffers based on the field definitions provided in the creation method. Access to these values is required, to implement the dynamic dialog.
For example, to set default values before entering the dialog loop, modifying and/or querying values during the dialog loop, and to get the entered values after dialog termination when accepted by the user.
ui.Dialog.setFieldValue()
and
ui.Dialog.getFieldValue()
methods.When implementing a display array or input array dynamic dialog handling a record list, the
set/get field value methods apply to the current row. If you want to set or get field values of a
particular row, first move to the row with the ui.Dialog.setCurrentRow()
method.
d_list
), to the field buffers of a record input dynamic dialog
(d_rec
):CALL d_list.setCurrentRow("sr_custlist", index)
FOR i=1 TO fields.getLength()
CALL d_rec.setFieldValue( fields[i].name,
d_list.getFieldValue(fields[i].name)
)
END FOR
Getting query conditions for a field
A dynamic dialog created with ui.Dialog.createConstructByName() handles query by example input (like
CONSTRUCT
).
LET field_condition = DIALOG.getQueryFromField("customer.cust_name")
WHERE
part for the SELECT
statement,
iterate through all form fields and concatenate the form field condition by separating with the
AND
or with the OR
operator:FOR i=1 TO fields.getLength()
LET field_condition = d.getQueryFromField(fields[i].name)
IF field_condition IS NOT NULL THEN
IF where_clause IS NOT NULL THEN
LET where_clause = where_clause, " AND "
END IF
LET where_clause = where_clause, field_condition
END IF
END FOR