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
É 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.
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.
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.
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
- <?php
- class 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.
- <?php
- class 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.
Prezados , boa tarde ,estou precisando de ajuda , tenho um formulário com 3 campos o id,nome e código. Usei o Método "TDBSeekButton",mas não obtive exite pois só foi retornado o id e nome, o terceiro campo não consegui,ficando em branco. O Pablo me informou pro email mas tambem nao tive exito:
"POSFormView. O onExitProduct() é definido pelo setExitAction().
Lá tem o TForm::sendData() que manda os dados para form.
Basta definir mais atributos para enviar...
/**
* Exit action for the field product
* Fill some form fields (sale_price, amount, discount, total)
*/
public static function onExitProduct($param)
{
$product_id = $param['product_id']; // get the product code
try
{
TTransaction::open('samples');
$product = new Product($product_id); // reads the product
$obj = new StdClass;
$obj->sale_price = number_format($product->sale_price, 2, '.', ',');
$obj->amount = 1;
$obj->discount = 0;
$obj->total = number_format($product->sale_price, 2, '.', ',');
TTransaction::close();
TForm::sendData('form_pos', $obj);
}
catch (Exception $e)
{
// does nothing
}
}
"
Alguém pode me ajudar?
Olá Jonas, conseguiu resolver sua dúvida, se não, veja se o código abaixo funciona.
Atenção para criação das variáveis "sale_price, amount, discount, total"
no formulário que chama a SeekBusca.