Binding variables to form fields

Some dialogs need program variables to store form field values.

Program variables are the data model for dialog instructions

Dialogs handling data fields input or display (INPUT, INPUT ARRAY, DISPLAY ARRAY) need program variables to store the information displayed in form fields during the dialog execution. The exception is CONSTRUCT, which needs only one string variable that holds the SQL condition produced.

When implementing a dialog controlling form fields, you specify what program variables must be bound to the form fields of the current displayed form:

   INPUT BY NAME custrec.* ...
      ...
   END INPUT

Program variables (simple records and arrays) used in dialogs can have a flat definition, or structured definition with sub-records.

Dialog variables binding methods

There are different ways to bind program variables to screen record fields.

Program variables can be bound to form fields by name or by position, depending on the binding clause used in the dialog definition.

When binding program variables with a screen record followed by a .* (dot star), program variables are bound to screen record fields by position. Make sure that the program variables are defined (or listed) in the same order as the screen array fields. This is true for INPUT, DISPLAY ARRAY and INPUT ARRAY.

For more details about binding methods, see dialog-specific syntax reference topics in Dialog instructions.

Variables and form fields data types

The program variables can be of any simple data type supported by the dialogs; the runtime system will adapt input and display rules to the variable type. When the user enters data for an INPUT or INPUT ARRAY instruction, the runtime system checks the entered value against the data type of the variable, not the data type of the form field. For example, if you want to use a DATE variable, the dialog will check for a valid date value when the user enters a value in the corresponding form field.

With CONSTRUCT, no program variable is used for fields. Only one string variable is required, to hold the generated SQL condition.

The CONSTRUCT dialog uses the field data types defined in the form file.

Program variables are typically declared with a DEFINE LIKE clause to get the data type of a column as defined in the database schema file. When the form fields are also defined like a column of the database schema, this ensures that the program variable and form field data type matches the underlying database column type. If a variable is declared LIKE a SERIAL / SERIAL8 / BIGSERIAL column, the runtime system will treat the field as if it was defined as NOENTRY in the form file. Since values of serial columns are automatically generated by the database server, no user input is required for such fields.

If the program variable has the same structure as a database table (this is the case when the variable is defined with a DEFINE LIKE clause), you may want to use only some of the fields in your form layout. You can achieve this by using PHANTOM fields in the screen array definition of the form. Phantom fields are only used to bind program variables, and are not transmitted to the front-end for display.