TSeekButton Personalizado no MultiField Prezados bom dia, Estou implementando uma tela no qual utilizando TMultiField. Neste TMultiField o usuário aciona um TSeekButton personalizado. O usuário realiza a pesquisa e ao retornar, o sistema não atualiza os campos dentro do TMultiField. Sei que o o problema é a forma que o TSeekButton retorna os dados. Da maneira usual, informo o formulário e ele retorna para o campo do ...
CG
TSeekButton Personalizado no MultiField  
Fechado
Prezados bom dia,

Estou implementando uma tela no qual utilizando TMultiField.

Neste TMultiField o usuário aciona um TSeekButton personalizado.

O usuário realiza a pesquisa e ao retornar, o sistema não atualiza os campos dentro do TMultiField.

Sei que o o problema é a forma que o TSeekButton retorna os dados.

Da maneira usual, informo o formulário e ele retorna para o campo do formulário.

Seguindo a mesma lógica, informei o nome do TMultiField no lugar do form, mas não deu certo.

Alguém sabe como que faço para funcionar?

Segue o trecho do meu código:

 
  1. <?php
  2. //lookup veículo
  3. $objveiculo = new VeiculoSeekForm;
  4. $actionveiculo = new TAction(array($objveiculo, 'onReload'));
  5. $veiculo_id->setAction($actionveiculo);
  6. TSession::setValue('Form_VeiculoSeek','veiculos');
  7. $veiculos = new TMultiField('veiculos');
  8. $veiculos->setOrientation('horizontal');
  9. $veiculos->setHeight(140);
  10. $veiculos->addField('veiculo_id', 'Código do Veículo', $veiculo_id, 200, TRUE);
  11. $veiculos->addField('placa_veiculo','Placa do Veículo', $placa_veiculo, 200, TRUE);
  12. ?>

Curso Dominando o Adianti Framework

O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado!


Dominando o Adianti Framework Quero me inscrever agora!

Comentários (6)


CG

Apenas complementando, faltou o código do campo placa do veículo:

 
  1. <?php
  2. $placa_veiculo = new TEntry('placa_veiculo');
  3. $placa_veiculo->setEditable(FALSE);
  4. ?>
PD

é carlos esse erro é bem comum, mas te darei a luz, rere

 
  1. <?php
  2. // cria o multifield
  3. $mult = new TMultiField('servicoss');
  4. // cria o TSeekButton
  5. $servico_id = new TSeekButton('servicoss_id');
  6. //observe os nomes dos campos,
  7. todos tm prefix igual ao nome do multfield
  8. $servico_nome = new TEntry('servicoss_nome');
  9. $servico_preco = new TEntry('servicoss_preco');
  10. $servico_nome->setEditable(false);
  11. $servico_preco->setEditable(false);
  12. // class PStandartSeek
  13. $obj = new PStandartSeek();
  14. //prefix usado nos campos
  15. //ex categoria_id
  16. $obj->setPrefix('servicoss');
  17. // mode a ser usada
  18. $obj->setModel('Servicos');
  19. //primary key da model
  20. $obj->setKey('id');
  21. //formulario de retorno
  22. $obj->setParentForm('form_Clientes');
  23. //banco a ser usado
  24. $obj->setBanco('sample');
  25. //capos a serem mostrados na gris
  26. //campo=>label
  27. // estes campos seram retornados al selecionar um registro
  28. //mas o campo deve ter o prefixo
  29. //ex categoria_nome
  30. $obj->setCampos(array('id'=>'Codigo','nome'=>'Nome','preco'=>'Preco'));
  31. //campo a ser usado para filtro
  32. $obj->setFiltro('nome');
  33. //altura da janela
  34. $obj->setHeight(300);
  35. //largura da janela
  36. $obj->setWidth(500);
  37. //titulo da janela
  38. $obj->setTitulo('Servicos');
  39. //cria a action
  40. $action = new TAction(array($obj,'onReload'));
  41. // iseri a action no TStandartSeek
  42. $servico_id->setAction($action);
  43. $mult->addField('id','Codigo',$servico_id,50);
  44. $mult->addField('nome','Nome',$servico_nome,100);
  45. $mult->addField('preco','Preco',$servico_preco,100);
CG

Fala meu amigo,

Deu certo!!

Mais uma vez muito obrigado.
CG

Fala meu amigo bom dia,

A sua solução funcionou quando o form possui apenas 1 Multifield.

Porém, quando tenho 2 Multifields no mesmo form não dá certo.

No lookup (tela de consulta do do seekbutton) exibe somente a segunda tela de pesquisa.

Tentei de outras formas, mas não consegui.

Poderia me ajudar?
PD

Carlos,

Quando você usa TSeekButton com TMultifield, o nome dos campos deve ser precedido pelo nome do próprio Multifield, veja que adicionei "produtos_" na frente...

 
  1. <?php
  2. $action->setParameter('receive_key','produtos_produto_id');
  3. $action->setParameter('receive_field','produtos_produto_nome');
  4. ?>



Caso você tenha dúvidas de como eu fiz, dê uma olhada no cadastro de livros do Library, pois lá tem uma multifield de autores, que usa seekbutton:
www.adianti.com.br/framework-library

Att,
Pablo
CG

Fala Pablo!

Entendi.. mas resolvi de outra maneira.

Criei 2 SeekButtons personalizados e no retorno do para a tela principal coloquei o nome do multifield precedendo o nome do campo.

Segue o trecho do código que faz com que minha funcionalidade funcionasse:

 
  1. <?php
  2. function onSelect($param)
  3. {
  4. try
  5. {
  6. $key = $param['key'];
  7. TTransaction::open('sollus');
  8. // load the active record
  9. $notafiscal = new NotaFiscalCliente($key);
  10. $formSession = TSession::getValue('form_notafiscalclienteseek');
  11. $object = new StdClass;
  12. if ($formSession == 'form_Viagem'){
  13. $object->notasfiscais_id = $notafiscal->id;
  14. $object->notasfiscais_numero = $notafiscal->numero;
  15. $object->notasfiscais_DataEmissaoFormatada = $notafiscal->get_DataEmissaoFormatada();
  16. }else{
  17. $object->notafiscalcliente_id = $notafiscal->id;
  18. $object->numero = $notafiscal->numero;
  19. $object->dataemissao = $notafiscal->get_DataEmissaoFormatada();
  20. }
  21. // closes the transaction
  22. TTransaction::close();
  23. //TForm::sendData('form_Aeroporto', $object);
  24. // busca o form da seção
  25. TForm::sendData($formSession, $object);
  26. parent::closeWindow(); // closes the window
  27. }
  28. catch (Exception $e) // em caso de exceção
  29. {
  30. // clear fields
  31. if ($formSession == 'form_Viagem'){
  32. $object->notasfiscais_id = '';
  33. $object->notasfiscais_numero = '';
  34. $object->notasfiscais_dataemissao = '';
  35. }else{
  36. $object->notafiscalcliente_id = '';
  37. $object->numero = '';
  38. $object->dataemissao = '';
  39. }
  40. //TForm::sendData('form_Aeroporto', $object); //form_Endereco
  41. // busca o form da seção
  42. $formSession = TSession::getValue('form_notafiscalclienteseek');
  43. TForm::sendData($formSession, $object);
  44. // undo pending operations
  45. TTransaction::rollback();
  46. }
  47. }
  48. ?>