Como criar uma forma dinâmica a partir de uma mesa em 3 passos!

Tradução automática de Deepl

4D v17 inclui formulários dinâmicos, inicialmente introduzidos em 4D v16 R6, uma forma poderosa e flexível de construir dinamicamente formulários totalmente adaptados às necessidades dos seus utilizadores finais . As possibilidades das formas dinâmicas são tremendas. Neste post, veremos um exemplo concreto do que se pode fazer com estes novos formulários.

Primeiro as primeiras coisas. Na sua base de dados, precisa de um formulário de entrada/saída para todas as suas tabelas. Melhor ainda, porque não criar estes formulários de forma dinâmica a partir de um modelo? Com a notação de objectos, é muito fácil manipular objectos. Tudo o que tem de fazer é definir um modelo de entrada, um modelo de saída, e um modelo de objecto. Depois, em tempo de execução, pode gerar os seus formulários de acordo com a tabela e os campos seleccionados.

Na amostra abaixo, fornecemos-lhe dois modelos de formulários de saída e dois de entrada, bem como uma amostra de código para adicionar uma tabela e campos.

Dicas: Utilize formulários dinâmicos

exemplo de formulário de saída

Passo 1

Criar um modelo de formulário de saída contendo apenas botões e uma caixa de listagem vazia. Neste exemplo, o modelo é guardado na pasta“modelo ” na pasta“recursos” da base de dados:

$pathname:=Get 4D folder(Current resources folder)+"template "+"Folder separator+"outputTemplate.json"
$oFormTemplate :=JSON Parse(Document to text($pathname))

Passo 2

Depois, por código, adicionar o título do formulário, nome, e a tabela de origem da caixa de listagem.

$oFormTemp:=OB Copy($oFormTemplate)
$oFormTemp .windowTitle:=arrTableName{arrTableName}
$oFormTemp .name:="ListForm: "+arrTableName{arrTableName}
$oFormTemp .pages[1].objects.myListBox.table.arrTableName:=arrTableName{ }

Output Form Template

Etapa 3

A seguir, inserir uma coluna de caixa de listagem para cada campo seleccionado. Depois definir o nome do objecto da coluna, a fonte da coluna, e o nome do cabeçalho da coluna.

$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.interobjectName:="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

Output Form With Column

Formulário de entrada

O mesmo princípio pode ser aplicado ao formulário de entrada. Basta adicionar texto estático e um objecto de entrada para cada campo seleccionado.

Um exemplo de código está disponível na base de dados de exemplo.

Feliz codificação!

Vanessa Talbot
• Proprietário do produto - Vanessa Talbot entrou ao time 4D Program em Junho de 2014 como Proprietária do Produto e está a cargo de escrever as histórias dos usuários e depois traduzi-las em especificações funcionais. Seu papel também é garantir que a implementação da funcionalidade entregue cumpra com as necessidades do cliente. Desde sua chegada, trabalhou na definição de funcionalidades chaves em 4D. Trabalhou na maioria das novas funcionalidades multithread preemptivo e também em um tema muito complexo: a nova arquitetura para a aplicação engined. Vanessa é formada pela Telecom Saint-Etienne. Começou sua carreira no Instituto de Investigação Criminal como desenvolvedora do departamento audiovisual. Também trabalhou em meios de comunicação e no âmbito médico como especialista em assistência técnica, produção e documentação de novas funcionalidades.