Combo dependente não carrega Olá, Estou tenho dois combos no formulário, o segundo é carregado conforme seleção do primeiro, porém o segundo não carrega. Alguem pode me ajudar ? Segue trecho do código. ...
RB
Combo dependente não carrega  
Olá,

Estou tenho dois combos no formulário, o segundo é carregado conforme seleção do primeiro, porém o segundo não carrega.

Alguem pode me ajudar ?

Segue trecho do código.

 
  1. <?php
  2. //combo 1(master)
  3. $organizacao_id = new TDBCombo('organizacao_id' ,'teste','ViewOrganizacaoJuridica','id','nome','nome asc');
  4. $organizacao_id->setDefaultOption(false);
  5. $organizacao_id->setChangeAction( new TAction( array($this, 'onChangeActionUnidade')) );
  6. $filter1 = new TCriteria;
  7. $filter1->add(new TFilter('id', '<','0'));
  8. //combo 2 (detail)
  9. $unidade_id = new TDBCombo('unidade_id','teste','ViewOrganizacaoUnidade','id','name','name asc',$filter1);
  10. $unidade_id->setDefaultOption(false);
  11. .................
  12. static function onChangeActionUnidade($param)
  13. {
  14. try
  15. {
  16. TTransaction::open('teste'); //base de dados
  17. if ($param['organizacao_id'])//se existe parâmetro da primeira combo(nome da primeira combo)
  18. {
  19. $criteria = TCriteria::create( ['organizacao_id' => $param['organizacao_id'] ] );
  20. //organizacao_id = parametro chave estrangeira da tabela master
  21. // formname,field(nome do campo),database , nome da model,key,value,ordercolumn = NULL,criteria, startEmpty = FALSE
  22. TDBCombo::reloadFromModel('frm_grupo_usuario','unidade_id','teste','ViewOrganizacaoUnidade','id','{name}', 'name',$criteria,TRUE);
  23. }
  24. else
  25. {
  26. TCombo::clearField('frm_grupo_usuario', 'unidade_id'); //reload do formulario frm_grupo_usuario na segunda combo "unidade_id"
  27. }
  28. TTransaction::close();
  29. }
  30. catch (Exception $e)
  31. {
  32. new TMessage('error', $e->getMessage());
  33. }
  34. }
  35. ?>


Models

 
  1. <?php
  2. /**
  3. * ViewOrganizacaoJuridica Active Record
  4. * @author <your-name-here>
  5. */
  6. class ViewOrganizacaoJuridica extends TRecord
  7. {
  8. const TABLENAME = 'viewOrganizacaoJuridica';
  9. const PRIMARYKEY= 'id';
  10. const IDPOLICY = 'serial'; // {max, serial}
  11. /**
  12. * Constructor method
  13. */
  14. public function __construct($id = NULL, $callObjectLoad = TRUE)
  15. {
  16. parent::__construct($id, $callObjectLoad);
  17. parent::addAttribute('nome');
  18. parent::addAttribute('unidade_id');
  19. }
  20. }
  21. ?>


 
  1. <?php
  2. /**
  3. * ViewOrganizacaoUnidade Active Record
  4. * @author <your-name-here>
  5. */
  6. class ViewOrganizacaoUnidade extends TRecord
  7. {
  8. const TABLENAME = 'viewOrganizacaoUnidade';
  9. const PRIMARYKEY= 'id';
  10. const IDPOLICY = 'serial'; // {max, serial}
  11. /**
  12. * Constructor method
  13. */
  14. public function __construct($id = NULL, $callObjectLoad = TRUE)
  15. {
  16. parent::__construct($id, $callObjectLoad);
  17. parent::addAttribute('name');
  18. parent::addAttribute('organizacao_id');
  19. parent::addAttribute('ativo');
  20. }
  21. }
  22. ?>


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)


NR

Copiei seu código e funcionou sem problemas.

Confira o nome do formulário passado para a função reloadFromModel e também se o filtro executado está retornando dados do banco.
RB

Nataniel,

Sei lá o que acontece, observei ao depurar no navegador que os dados são retornados, porém o combo fica bloqueado para seleção.


 
  1. <?php
  2. $filter = new TCriteria;
  3. $filter->add(new TFilter('organization_id', '=',TSession::getValue('organizacion_id')));
  4. //combo 1(master)
  5. $organizacao_id = new TDBCombo('organizacao_id' ,'permission','SystemOrganization','id','name','id asc',$filter);
  6. $organizacao_id->setDefaultOption(false);
  7. $organizacao_id->setChangeAction( new TAction( array($this, 'onChangeActionFilial')) );
  8. $filter1 = new TCriteria;
  9. $filter1->add(new TFilter('id', '<','0'));
  10. //combo 2 (detail)
  11. $unidade_id = new TDBCombo('unidade_id','permission','SystemUnit','id','name','name asc',$filter1);
  12. $unidade_id->setDefaultOption(false);
  13. static function onChangeActionFilial($param)
  14. {
  15. try
  16. {
  17. if ($param['organizacao_id'])//se existe parâmetro da primeira combo(nome da primeira combo)
  18. {
  19. $criteria = TCriteria::create( ['organization_id' => $param['organizacao_id'] ] );
  20. TDBCombo::reloadFromModel('form_grupo_usuario','unidade_id','permission','SystemUnit','id','{name}', 'name',$criteria,TRUE);
  21. }
  22. else
  23. {
  24. TCombo::clearField('form_grupo_usuario', 'unidade_id'); //reload do formulario form_grupo_usuario na segunda combo "unidade_id"
  25. }
  26. }
  27. catch (Exception $e)
  28. {
  29. new TMessage('error', $e->getMessage());
  30. }
  31. }
  32. ?>


segue link imagem.

sgo.net.br/index.php?class=PublicView&PHPSESSID=3cd74a07131cbd67
RB

Nataniel,

Resovido, adicionei um id no formulário e funcionou

$this->form_grupo->id = 'form_grupo_usuario';