O poder dos formulários dinâmicos foi introduzido com 4D v16 R6, permitindo-lhe construir os seus formulários na mosca, construindo-os num objecto ou carregando-os a partir de um ficheiro de texto. Isto é muito conveniente num mundo em que os formulários são frequentemente alterados para satisfazer as necessidades de um pedido.
Em 4D, a ordem de entrada segue tipicamente uma ordem z tanto para formulários binários como dinâmicos. Com 4D v17 R6, pode agora definir uma ordem de entrada que não está necessariamente associada à ordem z.
Para cada página da definição do formulário, tem o atributo “objectos” contendo uma lista de elementos do formulário organizados de acordo com a ordem z. Foi adicionado um novo atributo“entryOrder” para lhe permitir especificar a sua própria ordem de entrada personalizada. Se este atributo for indefinido, 4D utilizará a ordem z (a ordem definida no atributo “objectos”).
Eis um exemplo de um formulário dinâmico com dois campos de entrada e um botão:
// 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("type"; "button"; "text"; "OK"; "top";60; "left";140; "width";100; "height";20)
// Create entry order collection
$entryOrder :=New Collection("text2"; "text1")
// Create page with form objects and entry order
$page :=New object("objects";New object("text1";$text1; "text2";$text2; "button";$button); "entryOrder";$entryOrder)
// Create form
$form:=New object("pages"; New collection(Null;$page); "windowTitle"; "My form"; "rightMargin";20; "bottomMargin";20)
// Load the form
$w :=Open form window($form)
DIALOG (
$form)
Isto pode ser representado 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" ] } ] }