Criando telas customizadas de entrada de dados em HTML
A função "Module.Run()" também permite que seja feita uma separação de forma que o código de processamento fique em um módulo e a geração do HTML fique em outro, de forma similar ao modelo de programação conhecido como MVC.
Vamos considerar um problema bem simples, sem muitas aplicações práticas, mas que demonstra bem as capacidades do uso do HTML dentro do Kankei.
Objetivo
Precisa-se de uma tela customizada onde o usuário entre com um nome e um endereço. Ambos os campos devem ser de preenchimento obrigatório. Após o usuário informar estes dados, o sistema deverá exibir os dados preenchidos num formato de tabela, com um link para poder retornar à tela anterior e digitar outro nome e endereço.
Tela inicial:
Validação dos dados:
Resultado:
Obs.: Ao clicar em "Voltar", o sistema deve voltar à tela inicial
Solução
Vamos citar a seguir um exemplo de uma operação que será composta por 3 módulos:
- modController => É o módulo principal, responsável por fazer as validações e chamar um dos outros dois quando for adequado;
- modViewParametros => É o módulo que irá gerar o HTML com os campos para o usuário preencher (no caso, nome e endereço) e um botão ENVIAR;
- modViewResultado => É o módulo que irá exibir uma tabela com os dados informados pelo usuário, bem como um link para retornar à tela de parâmetros.
modController
Este módulo deve ser do tipo template, configurado para exibir o resultado como HTML.
<%
if (Parameters('__IsPostBack') != '1') {
// Esta é a primeira execução, exibir parâmetros
Module.Run('modViewParametros');
} else {
// O usuário clicou em ENVIAR
if (Parameters('nome') == '' || Parameters('endereco') == '') {
// Campos obrigatórios não preenchidos, exibir parâmetros novamente
Parameters('mensagem') = 'Nome e endereço são obrigatórios';
Module.Run('modViewParametros');
} else {
// Campos preenchidos corretamente. Exibir resultado
Module.Run('modViewResultado');
}
}
%>
A primeira coisa que o módulo faz é testar o parâmetro reservado "__IsPostBack", que serve para determinar se está ocorrendo um "PostBack" (ou seja, se o módulo está sendo executado novamente após o usuário ter pressionado o botão ENVIAR).
Caso não seja postback, é chamada a função Module.Run() para executar o módulo "modViewParametros" que irá gerar o HTML da página inicial. Se for postback, o módulo irá validar os dados que o usuário digitou e voltará a executar o "modViewParametros" caso os dados não sejam válidos; neste caso, uma mensagem é colocada no parâmetro "mensagem", para que o módulo "modViewParametros" saiba que tem uma mensagem de erro a ser exibida. Se os dados forem válidos será executado o módulo "modViewResultado".
modViewParametros
Este módulo deve ser do tipo template, configurado para exibir o resultado como HTML.
<html>
<body>
<form name="main" action="<%=K.BD.GetResourceURL('module', Module.Code)%>" method="post">
Nome:
<input name="nome" type="text" value="<%=Parameters('nome')%>" />
<br />
Endereço:
<input name="endereco" type="text" value="<%=Parameters('endereco')%>" />
<br />
<input type="submit" value="Enviar" />
<div>
<%=Parameters('mensagem')%>
</div>
</form>
</body>
</html>
Perceba que a URL a ser informada no atributo "action" da tag "form" deve ser gerada com K.BD.GetResourceURL(). A expressão "Module.Code" irá retornar o identificador do módulo atualmente sendo executado (que neste exemplo é o "modController").
Também é importante que as propriedades "value" das tags "input" sejam informadas desta forma, para mostrar o valor atual dos parâmetros, caso contrário, se o usuário preencher um campo e deixar o outro em branco, o módulo exibirá mensagem de campo não preenchido e o HTML vai ser gerado como no começo, perdendo-se o valor que o usuário informou.
modViewResultado
Este módulo deve ser do tipo template, configurado para exibir o resultado como HTML.
<html>
<body>
<table>
<tr>
<td>Nome:</td>
<td>
<b><%=Parameters('nome')%></b>
</td>
</tr>
<tr>
<td>Endereço:</td>
<td>
<b><%=Parameters('endereco')%></b>
</td>
</tr>
</table>
<a href="<%=K.BD.GetResourceURL('module', Module.Code)%>">Voltar</a>
</body>
</html>
Este módulo apenas monta uma tabela com os dados digitados e um link "Voltar". Perceba que a propriedade "href" do link utiliza K.BD.GetResourceURL() para gerar o link de destino, da mesma forma que a tag "form" do módulo "modViewParametros".
O link poderia ser substituído por botão, mas para isso precisaríamos incluir uma tag "form" da mesma que no "modViewParametros", e o "modController" precisaria saber quando este botão tivesse sido clicado para agir de acordo. Então, neste caso é mais simples usar um simples link.
Conclusão
Tendo um pouco de conhecimento em HTML, estes novos recursos do Kankei facilitam bastante a criação de telas customizadas para os mais diversos fins.
Algumas aplicações como o KankeiZila já se utilizam de links entre módulos há algum tempo, mas agora esta funcionalidade está sendo expandida também ao KankeiDesktop, que agora executa localmente o módulo destino ao invés de abrir o KankeiWeb no Internet Explorer.
