Ve verzi 4D v16 R6 byly představeny dynamické formuláře, které umožňují vytvářet formuláře za běhu, a to tak, že je vytvoříte v objektu nebo je načtete z textového souboru. To je velmi výhodné ve světě, kde se formuláře často mění podle potřeb aplikace.
Ve 4D se pořadí zadávání typicky řídí pořadím z pro binární i dynamické formuláře. Ve verzi 4D v17 R6 můžete nyní definovat pořadí zápisu, které nemusí být nutně spojeno s pořadím z.
Pro každou stránku v definici formuláře máte k dispozici atribut „objekty“ obsahující seznam prvků formuláře uspořádaných podle pořadí z. Byl přidán nový atribut„entryOrder„, který vám umožní zadat vlastní přizpůsobené pořadí vstupu. Pokud je tento atribut nedefinovaný, použije 4D pořadí z (pořadí definované v atributu „objects“).
Zde je příklad dynamického formuláře se dvěma vstupními poli a tlačítkem:
// 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)
To lze znázornit jako:
{ "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" ] } ] }