Lançado Adianti Framework 7.6!
Clique aqui para saber mais
Problema com onChangeRadio no classe habilita / desabilita campo Olá pessoal. Estou testando algumas funcionalidades para usar no meu projeto. Abaixo estou usando o tutor de habilitar/desabilitar campos (http://www.adianti.com.br/framework_files/tutor/index.php?class=FormEnableDisableView). No exemplo do tutor, no array do RadioGrupo, é setado a posição 1 como padrão. No onSave tanto a opção '1'=>'Grupo 1' quando opção '2'=>'Grupo ...
HB
Problema com onChangeRadio no classe habilita / desabilita campo  
Olá pessoal.
Estou testando algumas funcionalidades para usar no meu projeto. Abaixo estou usando o tutor de habilitar/desabilitar campos (www.adianti.com.br/framework_files/tutor/index.php?class=FormEnableD).

No exemplo do tutor, no array do RadioGrupo, é setado a posição 1 como padrão. No onSave tanto a opção '1'=>'Grupo 1' quando opção '2'=>'Grupo 2' gravam normalmente, como vocês podem ver na imagem, o problema está no onEdit.
  1. <?php
  2. $radio_enable = new TRadioGroup('testeum_id');
  3. $radio_enable->addItems(array('1'=>'Grupo 1''2'=>'Grupo 2'));
  4. $radio_enable->setLayout('horizontal');
  5. $radio_enable->setValue(1);
  6. ?>

Ao recuperar o registro (onEdit), o registro que foi gravado com a opção '2'=>'Grupo 2', não é recuperado corretamente (veja também na imagem). O RadioGrupo vem marcado direitinho, só que os campos do Grupo 2 ficam desabilitados e obviamente não exibe o conteúdo gravado.

Alguém pode me ajudar a resolver essa questão?

Código Completo
  1. <?php
  2. /**
  3.  * TestedoisForm Form
  4.  * @author  <your name here>
  5.  */
  6. class TestedoisForm extends TPage
  7. {
  8.     protected $form// form
  9.     
  10.     /**
  11.      * Form constructor
  12.      * @param $param Request
  13.      */
  14.     public function __construct$param )
  15.     {
  16.         parent::__construct();
  17.         
  18.         // creates the form
  19.         $this->form = new TQuickForm('form_Testedois');
  20.         $this->form->class 'tform'// change CSS class
  21.         $this->form = new BootstrapFormWrapper($this->form);
  22.         $this->form->style 'display: table;width:100%'// change style
  23.         
  24.         // define the form title
  25.         $this->form->setFormTitle('Testedois');
  26.         
  27.         // create the form fields
  28.         $id     = new TEntry('id');
  29.         $campo1 = new TEntry('campo1');
  30.         $campo2 = new TEntry('campo2');
  31.         $campo3 = new TEntry('campo3');
  32.         $campo4 = new TEntry('campo4');
  33.         //$testeum_id = new TEntry('testeum_id');
  34.         
  35.         $radio_enable = new TRadioGroup('testeum_id');
  36.         $radio_enable->addItems(array('1'=>'Grupo 1''2'=>'Grupo 2'));
  37.         $radio_enable->setLayout('horizontal');
  38.         $radio_enable->setValue(1);
  39.         // add the fields
  40.         $this->form->addQuickField('Id',      $id,  '10%' );
  41.         $this->form->addQuickField('',        $radio_enable80);
  42.         $this->form->addQuickField('Grupo 1'$campo1,  '40%' );
  43.         $this->form->addQuickField('',        $campo2,  '40%' );
  44.         $this->form->addQuickField('Grupo 2'$campo3,  '40%' );
  45.         $this->form->addQuickField('',        $campo4,  '40%' );
  46.         //$this->form->addQuickField('Testeum Id', $testeum_id,  '50%' );
  47.         
  48.         
  49.         $radio_enable->setChangeAction( new TAction( array($this'onChangeRadio')) );
  50.         self::onChangeRadio( array('testeum_id'=>1) );
  51.         if (!empty($id))
  52.         {
  53.             $id->setEditable(FALSE);
  54.         }
  55.         
  56.         /** samples
  57.          $this->form->addQuickFields('Date', array($date1, new TLabel('to'), $date2)); // side by side fields
  58.          $fieldX->addValidation( 'Field X', new TRequiredValidator ); // add validation
  59.          $fieldX->setSize( 100, 40 ); // set size
  60.          **/
  61.          
  62.         // create the form actions
  63.         $btn $this->form->addQuickAction(_t('Save'), new TAction(array($this'onSave')), 'fa:floppy-o');
  64.         $btn->class 'btn btn-sm btn-primary';
  65.         $this->form->addQuickAction(_t('New'),  new TAction(array($this'onClear')), 'bs:plus-sign green');
  66.         
  67.         // vertical box container
  68.         $container = new TVBox;
  69.         $container->style 'width: 90%';
  70.         // $container->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
  71.         $container->add(TPanelGroup::pack('Teste Habilita / Desabilita Campos'$this->form));
  72.         
  73.         parent::add($container);
  74.     }
  75.     /**
  76.      * Save form data
  77.      * @param $param Request
  78.      */
  79.     public function onSave$param )
  80.     {
  81.         try
  82.         {
  83.             TTransaction::open('teste'); // open a transaction
  84.             
  85.             /**
  86.             // Enable Debug logger for SQL operations inside the transaction
  87.             TTransaction::setLogger(new TLoggerSTD); // standard output
  88.             TTransaction::setLogger(new TLoggerTXT('log.txt')); // file
  89.             **/
  90.             
  91.             $this->form->validate(); // validate form data
  92.             
  93.             $object = new Testedois;  // create an empty object
  94.             $data $this->form->getData(); // get form data as array
  95.             $object->fromArray( (array) $data); // load the object with data
  96.             $object->store(); // save the object
  97.             
  98.             // get the generated id
  99.             $data->id $object->id;
  100.             
  101.             $this->form->setData($data); // fill form data
  102.             TTransaction::close(); // close the transaction
  103.             
  104.             new TMessage('info'TAdiantiCoreTranslator::translate('Record saved'));
  105.         }
  106.         catch (Exception $e// in case of exception
  107.         {
  108.             new TMessage('error'$e->getMessage()); // shows the exception error message
  109.             $this->form->setData$this->form->getData() ); // keep form data
  110.             TTransaction::rollback(); // undo all pending operations
  111.         }
  112.     }
  113.     
  114.     /**
  115.      * Clear form data
  116.      * @param $param Request
  117.      */
  118.     public function onClear$param )
  119.     {
  120.         $this->form->clear(TRUE);
  121.     }
  122.     
  123.     /**
  124.      * Load object to form data
  125.      * @param $param Request
  126.      */
  127.     public function onEdit$param )
  128.     {
  129.         try
  130.         {
  131.             if (isset($param['key']))
  132.             {
  133.                 $key $param['key'];  // get the parameter $key
  134.                 TTransaction::open('teste'); // open a transaction
  135.                 $object = new Testedois($key); // instantiates the Active Record
  136.                 
  137.                 $this->form->setData($object); // fill the form
  138.                 TTransaction::close(); // close the transaction
  139.             }
  140.             else
  141.             {
  142.                 $this->form->clear(TRUE);
  143.             }
  144.         }
  145.         catch (Exception $e// in case of exception
  146.         {
  147.             new TMessage('error'$e->getMessage()); // shows the exception error message
  148.             TTransaction::rollback(); // undo all pending operations
  149.         }
  150.     }
  151.     
  152.     
  153.     /**
  154.      * on ChangeRadio change
  155.      * @param $param Action parameters
  156.      */
  157.     public static function onChangeRadio($param)
  158.     {
  159.         if ($param['testeum_id'] == 1)
  160.         {
  161.             TEntry::enableField('form_Testedois''campo1');
  162.             TEntry::enableField('form_Testedois''campo2');
  163.             
  164.             TEntry::disableField('form_Testedois''campo3');
  165.             TEntry::disableField('form_Testedois''campo4');
  166.             
  167.             TEntry::clearField('form_Testedois''campo3');
  168.             TEntry::clearField('form_Testedois''campo4');
  169.         }
  170.         else
  171.         {
  172.             TEntry::disableField('form_Testedois''campo1');
  173.             TEntry::disableField('form_Testedois''campo2');
  174.             
  175.             TEntry::enableField('form_Testedois''campo3');
  176.             TEntry::enableField('form_Testedois''campo4');
  177.             
  178.             TEntry::clearField('form_Testedois''campo1');
  179.             TEntry::clearField('form_Testedois''campo2');
  180.         }
  181.     }
  182.         
  183. }
  184. ?>


Obrigado,
José Humberto Júnior

Pacotão Dominando o Adianti Framework 7
O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado! Versão 7.4


Dominando o Adianti 7 Quero me inscrever agora!

Comentários (7)


NR

Veja o exemplo abaixo:
adianti.com.br/framework_files/tutor/index.php?class=FormHierarchica

O segredo está na função sendData.
HB

Nataniel obrigado pelo retorno.

Fiz a implementação do meu onEdit conforme o código abaixo, mais não sei se era assim mesmo. Fazendo assim, funcionou em partes e aí eu tenho duas questões:
1) agora está recuperando o conteúdo dos campos corretamente, mais está exibindo os campos do Grupo 2 desabilitado sendo que no momento da gravação estes campos estavam habilitados para digitação. Como resolver isso?

2) o que eu não entendo é que quando o registro é gravado com a opção do array 1('1'=>'Grupo 1') funciona direitinho, mais quando o array é com o 2('2'=>'Grupo 2') não funciona, ou seja, na opção 1 os campos envolvidos ficam desabilitados e eu consigo editar cada campo; na opção 2 agora eu visualizo o conteúdo dos campos, mais não consigo editar. Pode me explicar por que isso acontece?

  1. <?php
  2. /**
  3.      * Load object to form data
  4.      * @param $param Request
  5.      */
  6.     public function onEdit$param )
  7.     {
  8.         try
  9.         {
  10.             if (isset($param['key']))
  11.             {
  12.                 $key $param['key'];  // get the parameter $key
  13.                 TTransaction::open('teste'); // open a transaction
  14.                 $object = new Testedois($key); // instantiates the Active Record
  15.                 
  16.                 $this->form->setData($object); // fill the form
  17.                 TTransaction::close(); // close the transaction
  18.                 
  19.                 $obj = new stdClass;
  20.                 $obj->campo1     $object->campo1;
  21.                 $obj->campo2     $object->campo2;
  22.                 $obj->campo3     $object->campo3;
  23.                 $obj->campo4     $object->campo4;
  24.                 $obj->testeum_id $object->testeum_id;
  25.                 TForm::sendData('form_Testedois'$obj);
  26.                 
  27.             }
  28.             else
  29.             {
  30.                 $this->form->clear(TRUE);
  31.             }
  32.         }
  33.         catch (Exception $e// in case of exception
  34.         {
  35.             new TMessage('error'$e->getMessage()); // shows the exception error message
  36.             TTransaction::rollback(); // undo all pending operations
  37.         }
  38.     } 
  39. ?>
NR

Você precisa usar o sendData também na função onSave. Se ainda assim não resolver 100%, tente debugar a função onChangeRadio, para ver quando ela está sendo chamada e os valores que está recebendo.
HB

Olá Nataniel.

Implementei sendData no onSave. Ao meu ver, está rodando corretamente, mais como eu disse anteriormente, o problema está quando eu recupero o registro, e o problema é só quando seleciono o grupo 2 (array ('2'=>'Grupo 2') ). É como eu mencionei na minha dúvida número 2 acima, o campo fica desabilitado no onEdit, isso só acontece quando o registro é gravado como grupo 2 (array ('2'=>'Grupo 2') ).

Quanto ao F12 que eu fiz, a aplicação executa onChangeRadio, duas vezes. A primeira quando eu clico no rádio 2. Em seguida, executa o onSave, e logo depois do onSave executa novamente o onChangeRadio. Mais não sei porque no grupo 2 os campos continuam desabilitados no onEdit.

No F12 do onEdit, o onChangeRadio não é executado nenhuma vez. É aqui o problema?

Query String Parameters
class:TestedoisForm
method:onChangeRadio
static:1

Form Data
id:
testeum_id:2
campo1:
campo2:
campo3:
campo4:
_field_value:2
_field_id:
_field_name:testeum_id
_form_name:form_Testedois
_field_data:
key:2
ajax_lookup:1

Query String Parameters
class:TestedoisForm
method:onSave

Form Data
id:
testeum_id:2
campo1:
campo2:
campo3:campo 3 do grupo 2
campo4:campo 4 do grupo 2

Query String Parameters
class:TestedoisForm
method:onChangeRadio
static:1

Form Data
id:3
testeum_id:2
campo1:
campo2:
campo3:campo 3 do grupo 2
campo4:campo 4 do grupo 2
_field_value:2
_field_id:
_field_name:testeum_id
_form_name:form_Testedois
_field_data:
key:2
ajax_lookup:1

NR

Ao invés de usar o sendData nesse caso, tente chamar a função diretamente:
  1. <?php
  2. //onEdit
  3. self::onChangeRadio(['testeum_id'=>$object->testeum_id]);
  4. ?>
HB

Nataniel, desta forma que você indicou funcionou direitinho.

Mais uma vez muito obrigado.
PC

Gostaria de tirar uma dúvida, se no banco de dados crio somente um atributo exemplo cpfCnpj.
Ou crio dosi atributos cpf e cnpj separdos.