El poder de los formularios dinámicos fue introducido con 4D v16 R6, permitiéndole construir sus formularios sobre la marcha construyéndolos en un objeto o cargándolos desde un archivo de texto. Esto es muy conveniente en un mundo en el que los formularios se cambian con frecuencia para satisfacer las necesidades de una aplicación.
En 4D, el orden de entrada suele seguir un orden z tanto para los formularios binarios como para los dinámicos. Con 4D v17 R6, ahora puede definir un orden de entrada que no está necesariamente asociado con el orden z.
Para cada página de su definición de formulario, tiene el atributo «objects» que contiene una lista de elementos del formulario ordenados según el orden z. Se ha añadido un nuevo atributo «entryOrder» para que puedas especificar tu propio orden de entrada personalizado. Si este atributo no está definido, 4D utilizará el orden z (el orden definido en el atributo «objects»).
He aquí un ejemplo de formulario dinámico con dos campos de entrada y un botón:
// Create inputs and button
$text1:=New object("type"; "input"; "top";20; "left";140; "width";100; "height";18)
$text2 :=New object("type"; "input"; "top";20; "left";20; "width";100; "height";18)
$button :=New object("tipo"; "botón"; "texto"; "OK"; "arriba";60; "izquierda";140; "ancho";100; "alto";20)
// Create entry order collection
$entryOrder :=New Collection("texto2"; "texto1")
// Create page with form objects and entry order
$page :=New object("objetos";New object("texto1";$text1; "texto2";$text2; "botón";$button); "entradaOrden";$entryOrder)
// Create form
$form:=New object("páginas"; New collection(Null;$page); "windowTitle"; "My form"; "rightMargin";20; "bottomMargin";20)
// Load the form
$w :=Open form window($form)
DIALOG (
$form)
Esto se puede representar como:
{ "pages": [ null, { "objects": { "text1": { "type": "input", "top": 20, "left": 140, "width": 100, "height": 18, "events": ["onClick"] }, "text2": { "type": "input", "top": 20, "left": 20, "width": 20, "height": 18, "events": ["onClick"] }, "button": { "type": "button", "text": "OK", "top": 60, "left": 140, "width": 20, "height": 20, "events": ["onClick"] } }, "entryOrder": [ "text2", "text1" ] } ] }