O Lua Form foi desenvolvido de forma a se conectar facilmente ao NodeDatabase para criar interfaces que salvam dados.
Para integrar um lua form ao Node Database é preciso duas coisas:
As tags/controles que se conectam ao NodeDatabase são:
Toda tag/controle que suporta NodeDatabase precisa de um escopo de dados, isto é, um objeto nodo de um nodedatabase onde os dados serão salvos.
As tags form, popup e dataScopeBox possuem o método "controle:setNodeObject" que permitem definir o escopo de dados e, após definido um objeto nodo como escopo, todas as tags que estão dentro passarão a salvar/carregar dados neste obeto nodo.
Exemplo:
Suponha a seguinte interface:
<form name="minhaTagForm"> |
Se o seguinte trecho de código Lua executar:
minhaTagForm:setNodeObject(NODO_A) |
o edit passará a ler e salvar dados em NODO_A.campoNome...
Agora, se o seguinte trecho de código Lua executar:
minhaTagForm:setNodeObject(OUTRO_NODO) |
o edit agora passará a ler e salvar dados em OUTRO_NODO.campoNome...
E, por fim, se o seguinte trecho de código Lua executar:
minhaTagForm:setNodeObject(nil) |
o edit agora ficará desabilitado, pois utilizamos o atributo "field" mas não há nodo escopo de dados associado.
Importante: O SDK3 define o escopo de dados automaticamente para os modelos de fichas, ao usar a tag recordList e para as janelas acopláveis:
Nas tags que suportam NodeDatabase, o atributo "field" contém o nome do campo de um objeto nodo a qual o controle deve se conectar.
Exemplo:
<?xml version="1.0" encoding="UTF-8"?> <edit field="nomeESobrenome"/> <label field="forca"/> |
No exemplo acima, quando a interface estiver rodando, o primeiro edit irá se ligará ao campo "nomeESobrenome" do objeto nodo, isto é:
Idem para as demais tags que tem o atributo "field" definido.
Acessando/salvando dados que estão em um nodo filho.
É possível utilizar o caractere "." para informar que o campo na verdade está em um nodo filho do nodo escopo.
Exemplo:
<?xml version="1.0" encoding="UTF-8"?> <edit field="atributos.modificadores.forca"/> <edit field="nodoFilho.nodoNeto.campo1"/> |
No exemplo acima, o primeiro edit se ligará ao campo "forca" do nodo de nome "modificadores" que está dentro do nodo de nome "atributos" que, por sua vez, está dentro do nodo escopo.
Se o usuário alterar o conteúdo do edit e o não existir um nodo de nome "atributos" no nodo escopo, o SDK3 automaticamente criará este nodo antes de salvar os dados. Idem para o nodo "modificadores" dentro do nodo "atributos".
Os códigos que estão dentro de um Lua Form tem acesso à uma variável chamada "sheet" que representa o objeto nodo escopo do form.
Exemplo:
<?xml version="1.0" encoding="UTF-8"?> <edit field="campoDeForca"/> </form> |
No exemplo acima, ao clicar no botão, a propriedade "campoDeForca" será alterado para "8" e a mudança será refletida no edit já que está ligado ao mesmo campo que sofreu alteração.
Veja também:
<?xml version="1.0" encoding="UTF-8"?> <layout left="20" top="20" height="500" width="250"> <layout align="top" height="32"> <label name="labMaiorDeIdade" text="Preencha a idade" align="top" horzTextAlign="center"/> <dataLink field="idade"> if idade ~= nil then |
Neste exemplo foram usados:
Veja também:
Created with the Personal Edition of HelpNDoc: Don't Let Unauthorized Users View Your PDFs: Learn How to Set Passwords