4D v17 obsahuje dynamické formuláře, které byly původně představeny ve verzi 4D v16 R6 a představují výkonný a flexibilní způsob dynamického vytváření formulářů plně přizpůsobených potřebám koncových uživatelů. Možnosti dynamických formulářů jsou obrovské. V tomto příspěvku si ukážeme konkrétní příklad toho, co všechno můžete s těmito novými formuláři dělat.
Ale popořadě. Ve své databázi potřebujete vstupní/výstupní formulář pro všechny své tabulky. A ještě lépe, proč tyto formuláře nevytvářet dynamicky ze šablony? Díky objektovému zápisu je manipulace s objekty velmi snadná. Stačí definovat vstupní šablonu, výstupní šablonu a objektovou šablonu. Za běhu pak můžete generovat formuláře podle vybrané tabulky a polí.
V níže uvedené ukázce vám nabízíme dvě výstupní a dvě vstupní šablony formulářů a také ukázku kódu pro přidání tabulky a polí.
Tipy: Použití dynamických formulářů
Příklad výstupního formuláře
Krok 1
Vytvořte šablonu výstupního formuláře obsahující pouze tlačítka a prázdné pole se seznamem. V tomto příkladu je šablona uložena ve složce„template“ ve složce„resources“ databáze:
$pathname:=Get 4D folder(Current resources folder)+"template "+Folder separator+"outputTemplate.json"
$oFormTemplate :=JSON Parse(Document to text($pathname))
Krok 2
Poté pomocí kódu přidejte název formuláře, jméno a zdrojovou tabulku pole seznamu.
$oFormTemp:=OB Copy($oFormTemplate)
$oFormTemp .windowTitle:=arrTableName{arrTableName}
$oFormTemp .name:="ListForm: "+arrTableName{arrTableName}
$oFormTemp .pages[1].objects.myListBox.table:=arrTableName{arrTableName}
Krok 3
Dále vložte sloupec se seznamem polí pro každé vybrané pole. Poté definujte název objektu sloupce, zdroj sloupce a název záhlaví sloupce.
$oFormTemp.pages$oColumn[1].objects.myListBox.columns:=New collection()
C_LONGINT ($numItem)
$numItem :=0
For ($i;1;Size of array(arrFieldName))
If (arrFieldDisplay{$i}=True)
C_OBJECT(
$oColumn)
// Create a list box column
$oColumn:=OB Copy($oObjectTemplate.colListbox)
xml-ph-0035@deepl.inter.
objectName:="col "+arrFieldName{$i}
$oColumn .dataSource:="["+arrTableName{arrTableName}+"]"+arrFieldName{$i}
$oColumn .header:=New object("text";arrFieldLabel{$i})
// Insert the column in form
$oFormTemp.pages[1].objects.myListBox.columns[$numItem]:=$oColumn
$numItem :=$numItem+1
End if .
End for
Vstupní formulář
Stejný princip lze použít i pro vstupní formulář. Stačí přidat statický text a vstupní objekt pro každé vybrané pole.
Příklad kódu je k dispozici v databázi příkladů.
Šťastné kódování!