Tornando campos invisíveis com onChangeAction Olá, estou usando o recurso de tornar um campo invisível ou visível dependendo da ocasião. No meu caso, quando seleciono(TCombo) como pessoa Física, Escondo CNPJ e IE e quando seleciono Pessoa Jurídica, escondo CPF e Identidade. Tudo está funcionando perfeitamente até quando algum campo é validado. Ex: se o e-mail está invalido(TEmailValidator), quando isso acontece perco o controle e a...
AR
Tornando campos invisíveis com onChangeAction  
Olá, estou usando o recurso de tornar um campo invisível ou visível dependendo da ocasião. No meu caso, quando seleciono(TCombo) como pessoa Física, Escondo CNPJ e IE e quando seleciono Pessoa Jurídica, escondo CPF e Identidade. Tudo está funcionando perfeitamente até quando algum campo é validado. Ex: se o e-mail está invalido(TEmailValidator), quando isso acontece perco o controle e aparecem os quatros campos na tela e aí só carregando a tela novamente.

Alguém pode ajudar ?
Obrigado.

 
  1. <?php
  2. $tipo_pessoa->addItems( ['F' => 'Física', 'J' => 'Jurídica'] );
  3. $change_action_cpf_cnpj = new TAction(array($this, 'onChangeAction'));
  4. $tipo_pessoa->setChangeAction($change_action_cpf_cnpj);
  5. $this->form->addFields([new TLabel('Id:')],[$id]);
  6. $this->form->addFields([new TLabel('Nome:')],[$nome],[new TLabel('Tipo Pessoa:')],[$tipo_pessoa]);
  7. $this->form->addFields([new TLabel('CPF:','#2196F3')],[$cpf],[],[]);
  8. $this->form->addFields([new TLabel('Identidade:','#2196F3')],[$documento],[],[]);
  9. $this->form->addFields([new TLabel('CNPJ :','#19713E')],[$cnpj],[],[]);
  10. $this->form->addFields([new TLabel('IE:','#19713E')],[$ie],[],[]);
  11. public static function onChangeAction($param)
  12. {
  13. if ($param['tipo_pessoa'] == 'F')
  14. {
  15. TQuickForm::showField('form_Pessoa', 'cpf');
  16. TQuickForm::showField('form_Pessoa', 'documento');
  17. TQuickForm::hideField('form_Pessoa', 'cnpj');
  18. TQuickForm::hideField('form_Pessoa', 'ie');
  19. }
  20. else
  21. {
  22. TQuickForm::hideField('form_Pessoa', 'cpf');
  23. TQuickForm::hideField('form_Pessoa', 'documento');
  24. TQuickForm::showField('form_Pessoa', 'cnpj');
  25. TQuickForm::showField('form_Pessoa', 'ie');
  26. }
  27. }
  28. public function onSave($param = null)
  29. {
  30. try
  31. {
  32. TTransaction::open('dbaerp'); // abre transação
  33. $this->form->validate(); // valida dados <----Neste momento perco o controle.
  34. ?>

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


NR

Você pode transformar a função onSave em estática:
adianti.com.br/framework_files/tutor/index.php?class=FormStaticBuild

Ou chamar a função TForm::sendData para reexecutar a ação de alteração do campo:
 
  1. <?php
  2. $data = $this->form->getData();
  3. TForm::sendData('form_Pessoa',(object)['tipo_pessoa'=>$data->tipo_pessoa]);
  4. ?>
AR

Obrigado, Nataniel! Assim funcionou perfeitamente.

 
  1. <?php
  2. public function onSave($param = null)
  3. {
  4. try
  5. {
  6. TTransaction::open('dbaerp'); // abre transação
  7. $data = $this->form->getData(); // dados do form
  8. TForm::sendData('form_Pessoa',(object)['tipo_pessoa'=>$data->tipo_pessoa]);
  9. $this->form->validate(); // valida dados
  10. $object = new Pessoa(); // create an empty object
  11. ?>