Představte si, že vaše databáze obsahuje několik tabulek typů nebo kategorií. Tyto tabulky jsou velmi jednoduché, často obsahují pouze identifikátor a textové pole. Pro demonstrační účely řekněme, že se jedná o databázi pro správu obuvi. Abychom mohli výrobky kvalifikovat, musíme definovat jejich typ, barvu, vzor, materiál, roční období atd.
Je těžkopádné spravovat každou z těchto tabulek ve formě seznamu a vstupního formuláře a souvisejících metod. V tomto případě je použití obecného formuláře nezbytné, aby se zabránilo duplicitám a zjednodušila se údržba.
A právě zde se hodí dynamické formuláře a ukazatele JSON!
V tomto příspěvku na blogu se seznámíte s jedním z možných způsobů vytváření generických formulářů.
Pomocí této databáze můžete otevřít pět různých dialogových oken, jak je znázorněno níže. Pokud se však vrátíte do režimu návrhu, všimnete si, že v Průzkumníku 4D nenajdete žádné formuláře…
Jak se tedy tyto formuláře vytvářejí?
Ve třech níže popsaných krocích:
1. Nejprve vytvoříme formulář seznamu, který uložíme do souboru JSON. Pro konkrétní informace o tabulce a polích použijeme ukazatele JSON. Řekněme například, že do názvu okna chceme zapsat název tabulky. V dynamickém formuláři stačí zadat:
"windowTitle": { "$ref": "#/info/table" }
Zde je další příklad, v poli seznamu chceme definovat zdroj dat sloupce, takže napíšeme:
"dataSource": { "$ref": "#/info/field1" }
2. Pak za běhu, když uživatel klikne na položku nabídky, injektujeme objekt definující tabulku s poli, která uživatel vybral.
C_OBJECT($o;$info)
$info :=New object("table";$table; "field1";"["+$table+"]"+"ID"; "field2";"["+$table+"]"+"Name")
$o :=JSON Parse(Document to text("RESOURCES/Form/CategoryOutputForm.json"))
$o .
info:=$info
3. Pro otevření formuláře není potřeba nic výjimečného, stačí použít příkaz Open form window příkaz. Jediné, co je třeba mít na paměti, je, že 4D při volání příkazu překládá ukazatele JSON. Open form window příkazu:
$ref:=Open form window($o;Plain form window)
Stejně lze postupovat i u vstupního formuláře. A nyní si to sami vyzkoušejte!