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.
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
Obrigado,
José Humberto Júnior
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.
- <?php
- $radio_enable = new TRadioGroup('testeum_id');
- $radio_enable->addItems(array('1'=>'Grupo 1', '2'=>'Grupo 2'));
- $radio_enable->setLayout('horizontal');
- $radio_enable->setValue(1);
- ?>
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
- <?php
- /**
- * TestedoisForm Form
- * @author <your name here>
- */
- class TestedoisForm extends TPage
- {
- protected $form; // form
- /**
- * Form constructor
- * @param $param Request
- */
- public function __construct( $param )
- {
- parent::__construct();
- // creates the form
- $this->form = new TQuickForm('form_Testedois');
- $this->form->class = 'tform'; // change CSS class
- $this->form = new BootstrapFormWrapper($this->form);
- $this->form->style = 'display: table;width:100%'; // change style
- // define the form title
- $this->form->setFormTitle('Testedois');
- // create the form fields
- $id = new TEntry('id');
- $campo1 = new TEntry('campo1');
- $campo2 = new TEntry('campo2');
- $campo3 = new TEntry('campo3');
- $campo4 = new TEntry('campo4');
- //$testeum_id = new TEntry('testeum_id');
- $radio_enable = new TRadioGroup('testeum_id');
- $radio_enable->addItems(array('1'=>'Grupo 1', '2'=>'Grupo 2'));
- $radio_enable->setLayout('horizontal');
- $radio_enable->setValue(1);
- // add the fields
- $this->form->addQuickField('Id', $id, '10%' );
- $this->form->addQuickField('', $radio_enable, 80);
- $this->form->addQuickField('Grupo 1', $campo1, '40%' );
- $this->form->addQuickField('', $campo2, '40%' );
- $this->form->addQuickField('Grupo 2', $campo3, '40%' );
- $this->form->addQuickField('', $campo4, '40%' );
- //$this->form->addQuickField('Testeum Id', $testeum_id, '50%' );
- $radio_enable->setChangeAction( new TAction( array($this, 'onChangeRadio')) );
- self::onChangeRadio( array('testeum_id'=>1) );
- if (!empty($id))
- {
- $id->setEditable(FALSE);
- }
- /** samples
- $this->form->addQuickFields('Date', array($date1, new TLabel('to'), $date2)); // side by side fields
- $fieldX->addValidation( 'Field X', new TRequiredValidator ); // add validation
- $fieldX->setSize( 100, 40 ); // set size
- **/
- // create the form actions
- $btn = $this->form->addQuickAction(_t('Save'), new TAction(array($this, 'onSave')), 'fa:floppy-o');
- $btn->class = 'btn btn-sm btn-primary';
- $this->form->addQuickAction(_t('New'), new TAction(array($this, 'onClear')), 'bs:plus-sign green');
- // vertical box container
- $container = new TVBox;
- $container->style = 'width: 90%';
- // $container->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
- $container->add(TPanelGroup::pack('Teste Habilita / Desabilita Campos', $this->form));
- parent::add($container);
- }
- /**
- * Save form data
- * @param $param Request
- */
- public function onSave( $param )
- {
- try
- {
- TTransaction::open('teste'); // open a transaction
- /**
- // Enable Debug logger for SQL operations inside the transaction
- TTransaction::setLogger(new TLoggerSTD); // standard output
- TTransaction::setLogger(new TLoggerTXT('log.txt')); // file
- **/
- $this->form->validate(); // validate form data
- $object = new Testedois; // create an empty object
- $data = $this->form->getData(); // get form data as array
- $object->fromArray( (array) $data); // load the object with data
- $object->store(); // save the object
- // get the generated id
- $data->id = $object->id;
- $this->form->setData($data); // fill form data
- TTransaction::close(); // close the transaction
- new TMessage('info', TAdiantiCoreTranslator::translate('Record saved'));
- }
- catch (Exception $e) // in case of exception
- {
- new TMessage('error', $e->getMessage()); // shows the exception error message
- $this->form->setData( $this->form->getData() ); // keep form data
- TTransaction::rollback(); // undo all pending operations
- }
- }
- /**
- * Clear form data
- * @param $param Request
- */
- public function onClear( $param )
- {
- $this->form->clear(TRUE);
- }
- /**
- * Load object to form data
- * @param $param Request
- */
- public function onEdit( $param )
- {
- try
- {
- if (isset($param['key']))
- {
- $key = $param['key']; // get the parameter $key
- TTransaction::open('teste'); // open a transaction
- $object = new Testedois($key); // instantiates the Active Record
- $this->form->setData($object); // fill the form
- TTransaction::close(); // close the transaction
- }
- else
- {
- $this->form->clear(TRUE);
- }
- }
- catch (Exception $e) // in case of exception
- {
- new TMessage('error', $e->getMessage()); // shows the exception error message
- TTransaction::rollback(); // undo all pending operations
- }
- }
- /**
- * on ChangeRadio change
- * @param $param Action parameters
- */
- public static function onChangeRadio($param)
- {
- if ($param['testeum_id'] == 1)
- {
- TEntry::enableField('form_Testedois', 'campo1');
- TEntry::enableField('form_Testedois', 'campo2');
- TEntry::disableField('form_Testedois', 'campo3');
- TEntry::disableField('form_Testedois', 'campo4');
- TEntry::clearField('form_Testedois', 'campo3');
- TEntry::clearField('form_Testedois', 'campo4');
- }
- else
- {
- TEntry::disableField('form_Testedois', 'campo1');
- TEntry::disableField('form_Testedois', 'campo2');
- TEntry::enableField('form_Testedois', 'campo3');
- TEntry::enableField('form_Testedois', 'campo4');
- TEntry::clearField('form_Testedois', 'campo1');
- TEntry::clearField('form_Testedois', 'campo2');
- }
- }
- }
- ?>
Obrigado,
José Humberto Júnior
Veja o exemplo abaixo:
adianti.com.br/framework_files/tutor/index.php?class=FormHierarchica
O segredo está na função sendData.
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?
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.
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
Ao invés de usar o sendData nesse caso, tente chamar a função diretamente:
Nataniel, desta forma que você indicou funcionou direitinho.
Mais uma vez muito obrigado.
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.