PD
Reaproveitando a mesma seek em formulários diferentes
Fechado
No framework, podemos criar seeks para localização de registros de maneira automática, por meio do componente TDBSeekButton. Entretanto, o TDBSeekButton permite apenas um campo de buscas na janela que se abre. Caso seja necessário abrir uma janela de busca de registros com vários campos de buscas e também listando várias colunas, é necessário construir uma seek manual, usando o componente TSeekButton e vinculando à uma controller que irá ser aberta na janela de buscas. Ambos exemplos podem ser vistos aqui:
www.adianti.com.br/framework_files/tutor/index.php?class=FormSeekBut
Para criar uma seek manual, basta olhar a classe TestCitySeek do tutor.
Uma classe de busca de registros possui métodos como
www.adianti.com.br/framework_files/tutor/index.php?class=FormSeekBut
Para criar uma seek manual, basta olhar a classe TestCitySeek do tutor.
Uma classe de busca de registros possui métodos como
<?phpclass SeekPessoas extends TWindow{ function __construct(); // define o form de buscas e a datagrid function onSearch(); // cria o filtro usado pelo usuário na busca function onReload($param = NULL); // carrega a datagrid de buscas function onSelect($param); // chamado para fechar a janela e preencher o formulário-pai function show();}?>
É comum a necessidade de termos de reaproveitar uma seek manual em formulários diferentes. Uma seek de pessoas é necessária em vários pontos do sistema. Vejamos que o método onSelect() da seek manual usa o nome do formulário-pai para enviar os dados. Entretanto este nome de formulário-pai muda de caso para caso, veja a seguir "form_pessoas". Esta dependência dificulta o reaproveitamento da seek manual.
<?php function onSelect($param) { try { $key = $param['key']; TTransaction::open('samples'); $pessoa = new Pessoa($key); TTransaction::close(); $object = new StdClass; $object->id_pessoa = $pessoa->id; $object->nome_pessoa = $pessoa->nome; TForm::sendData('form_pessoas', $object); parent::closeWindow(); // closes the window } .// ... }?>
Para resolver esse problema, podemos definir uma classe básica de buscas (Ex: busca de pessoas). Ex: SeekPessoas. Em seguida, deve-se criar classes-filhas específicas conforme o formulário em que a busca de pessoas é necessária. Como no exemplo a seguir. Assim, a classe SeekPessoas possuiria todos os métodos necessários para a busca, com exceção do método onSelect(), que por sua vez seria definido nas classes filhas. A classe-base SeekPessoas ainda pode ser definida como classe abstrata, assim como o método onSelect(), para forçar sua definição nas classes filhas.
<?phpclass SeekPessoasPedido extends SeekPessoas{ function onSelect($param) { try { $key = $param['key']; TTransaction::open('samples'); $pessoa = new Pessoa($key); TTransaction::close(); // ... TForm::sendData('form_pedidos', $object); parent::closeWindow(); // closes the window } .// ... }}?>
Assim, em cada formulário que a seek de pessoas fosse necessária, só teríamos de criar uma classe filha com um método onSelect(), definindo o nome do formulário-pai e quais campos gostaríamos de enviar para esse formulário.
Eu resolvi o problema de outra forma, como a questão basicamente era a indicação do formulário que deveria receber dos dados, criei inicialmente dois outros métodos na classe de busca que servem para indicar o formulário de iteração e para buscar tal informação. O nome do formulário fica registrado na TSession:
Após, realizei uma pequena alteração no método onSelect:
Por fim, ao criar o objeto CidadeBusca, utilizei o método para registrar o formulário de interação.