TDBSeekButton com Filtro não funciona No exemplo do tutor http://www.adianti.com.br/framework_files/tutor/index.php?class=FormSeekButtonView o 3o edit filtra as cidades menores que 5 ( corretamente) Mas se você digitar no edit o no 5( cidade 5) retorna a cidade sendo que ela não poderia ser retornada porque deveria filtrar também quando digitar. Como fazer para o Filtro TDBSeekButton também funcione quando digitar. ...
EF
TDBSeekButton com Filtro não funciona  
No exemplo do tutor
www.adianti.com.br/framework_files/tutor/index.php?class=FormSeekBut

o 3o edit filtra as cidades menores que 5 ( corretamente)
Mas se você digitar no edit o no 5( cidade 5) retorna a cidade sendo que ela não poderia ser retornada porque deveria filtrar também quando digitar.

Como fazer para o Filtro TDBSeekButton também funcione quando digitar.

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 (3)


AC

Acompanhando.
NR

A solução mais rápida seria modificar a função onSelect da classe TStandardSeek:
 
  1. <?php
  2. public static function onSelect($param)
  3. {
  4. $key = $param['key'];
  5. $database = isset($param['database']) ? $param['database'] : TSession::getValue('standard_seek_database');
  6. $receive_key = isset($param['receive_key']) ? $param['receive_key'] : TSession::getValue('standard_seek_receive_key');
  7. $receive_field = isset($param['receive_field']) ? $param['receive_field'] : TSession::getValue('standard_seek_receive_field');
  8. $display_field = isset($param['display_field']) ? $param['display_field'] : TSession::getValue('standard_seek_display_field');
  9. $parent = isset($param['parent']) ? $param['parent'] : TSession::getValue('standard_seek_parent');
  10. $criteria = isset($param['criteria']) ? unserialize(base64_decode($param['criteria'])) : TSession::getValue('standard_seek_criteria');
  11. try
  12. {
  13. TTransaction::open($database);
  14. // load the active record
  15. $model = isset($param['model']) ? $param['model'] : TSession::getValue('standard_seek_model');
  16. $repos = new TRepository($model);
  17. $pk = constant("{$model}::PRIMARYKEY");
  18. if (! $criteria)
  19. {
  20. $criteria = new TCriteria();
  21. }
  22. $criteria->add(new TFilter($pk,'=',$key));
  23. $activeRecord = $repos->load($criteria);
  24. if ($activeRecord)
  25. $activeRecord = $activeRecord[0];
  26. else
  27. $activeRecord = new $model;
  28. $object = new StdClass;
  29. $object->$receive_key = isset($activeRecord->$pk) ? $activeRecord->$pk : '';
  30. $object->$receive_field = isset($activeRecord->$display_field) ? $activeRecord->$display_field : '';
  31. TTransaction::close();
  32. TForm::sendData($parent, $object);
  33. parent::closeWindow(); // closes the window
  34. }
  35. catch (Exception $e) // in case of exception
  36. {
  37. // clear fields
  38. $object = new StdClass;
  39. $object->$receive_key = '';
  40. $object->$receive_field = '';
  41. TForm::sendData($parent, $object);
  42. new TMessage('error',$e->getMessage());
  43. // undo all pending operations
  44. TTransaction::rollback();
  45. }
  46. }
  47. ?>

Mas acredito que a solução ideal seja você criar uma classe baseada na TStandardSeek e modificá-la conforme desejado, evitando mexer na classe do framework.
EF

Funciona. mas deveria ser acrescentado no adianti para uma correção.