Field definition for Dynamic Dialogs
Dynamic dialog creation methods require field definitions in a dynamic array with a predefined structure.
Dynamic dialog creation methods such as ui.Dialog.createInputByName()
require a dynamic array as parameter, to
define the list of fields that the dialog will control.
This parameter must be defined as a
DYNAMIC ARRAY OF RECORD
, with
name
and type
members declared as
STRING
:DEFINE fields DYNAMIC ARRAY OF RECORD
name STRING,
type STRING
END RECORD
The names provided in the field definition list must identify
form fields of the current form. The field names can be specified with or without prefix. When a
field prefix is used, it must match one of the screen record definitions in the form file. If no
SCREEN RECORD
is explicitely defined for these fields in form file source, a
default screen record with the name of the database table (or "formonly") is available.For example, if the current form file defines the following
fields:
LAYOUT
...
END
TABLES
customer
END
ATTRIBUTES
EDIT f1 = customer.cust_id;
EDIT f2 = customer.cust_name;
...
END
The field names can be defined as follows:
LET fields[1].name = "customer.cust_id"
LET fields[2].name = "customer.cust_name"
...
The types provided in the field definition list will identify the data type to be used for data input and display.
Possible values for types are the string equivalents of the Genero BDL built-in types, for
example:
"INTEGER"
"VARCHAR(50)"
"DATE"
"DECIMAL(10,2)"
"DATETIME YEAR TO FRACTION(5)"
Note:
The type used to define form fields can be the returning value of a base.SqlHandle.getResultType()
method.
For example:
DEFINE fields DYNAMIC ARRAY OF RECORD
name STRING,
type STRING
END RECORD
DEFINE d ui.Dialog
OPEN FORM f1 FROM "custform"
DISPLAY FORM f1
LET fields[1].name = "customer.cust_id"
LET fields[1].type = "INTEGER"
LET fields[2].name = "customer.cust_name"
LET fields[2].type = "VARCHAR(50)"
...
LET d = ui.Dialog.createInputByName(fields)
...