Create forms dynamically
Dynamic dialogs are typically used with forms that are generated at runtime.
Purpose of dynamic forms
Before you instantiate a new ui.Dialog object, you must load an existing
compiled .42f form, or create a new form dynamically in your program.
Since dynamic dialogs are build at runtime (because form fields are not known at compiled time), the corresponding form is also created (or completed) at runtime.
Dynamic form creation with createForm()
Forms built at runtime must be created with the ui.Window.createForm() method, and must contain a valid definition with
layout containers, form fields, and screen records.
The createForm() method must be invoked by using the current window. The window
is typically created with OPEN WINDOW such as:
OPEN WINDOW w1 WITH 10 ROWS, 30 COLUMNS
Then create the ui.Form object, and get the om.DomNode object
to build your form:
DEFINE f ui.Form, n om.DomNode
LET f = ui.Window.getCurrent().createForm("myform")
LET n = f.getNode()
... create the AUI elements of the form
CURRENT WINDOW IS SCREEN instruction before
using the ui.Window.getCurrent() method and create the form. Otherwise,
getCurrent() would return
NULL:CURRENT WINDOW IS SCREEN
LET f = ui.Window.getCurrent().createForm("myform")Use om classes, to build your form dynamically. A good practice in creating
dynamic forms is to write first a .per file, that implements a static version
of one of the forms you want to build at runtime. Compile the .per to a
.42f and inspect the generated XML file, to understand the structure of the
form file.
COMBOBOX initializers
Combobox initializers are called when
executing the DISPLAY FORM or OPEN WINDOW WITH FORM
instructions.
When creating a form dynamically with COMBOBOX fields, the initialization
functions are not called. The combobox items must be created as part of the combobox node.