Imagine que a sua base de dados contém várias tabelas de tipos ou categorias. Estas tabelas são muito simples, frequentemente apenas com um identificador e um campo de texto. Para fins de demonstração, digamos que é uma base de dados de gestão de sapatos. Para qualificar os produtos, precisamos de definir o seu tipo, cor, padrão, material, estação do ano e assim por diante.
É incómodo gerir cada uma destas tabelas numa forma de lista e num formulário de entrada e métodos associados. Neste caso, a utilização de um formulário genérico é essencial para evitar duplicações e simplificar a manutenção.
E é aí que os formulários dinâmicos e as indicações JSON são úteis!
Neste post do blogue, verá uma forma possível de construir formulários genéricos.
Com esta base de dados, é possível abrir cinco diálogos diferentes, como se mostra abaixo. Mas se voltar ao modo de desenho, notará que não encontra formulários no Explorador 4D…
Então, como são criados estes formulários?
Nos três passos descritos abaixo:
1. Em primeiro lugar, criamos um formulário de lista que guardamos num ficheiro JSON. Para as informações específicas sobre tabela e campos, utilizamos apontadores JSON. Por exemplo, digamos que queremos escrever o nome da tabela no título da janela. No formulário dinâmico, só temos de entrar:
"windowTitle": { "$ref": "#/info/table" }
Aqui está outro exemplo, na caixa de listagem, queremos definir a fonte de dados da coluna, por isso escrevemos:
"dataSource": { "$ref": "#/info/field1" }
2. Depois, em tempo de execução, quando o utilizador clica no item do menu, injectamos um objecto que define a tabela, com os campos que o utilizador escolheu.
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. Para abrir o formulário, nada de excepcional é necessário, basta usar o Open form window comando. A única coisa a lembrar é que 4D resolve as indicações do JSON ao chamar o Open form window comando:
$ref:=Open form window($o;Plain form window)
O mesmo pode ser feito com o formulário de entrada. E agora experimente-o por si mesmo!