CA
Formulário BootstrapFormBuilder não retorna as informações
Olá amigos, preciso de uma ajuda.
Fiz uma pagina e nela inseri uma DIV que receberá dinamicamente algumas classes. Quando insiro a primeira classe o botão salvar captura normalmente as informações e grava corretamente, porém quando adiciono a segunda, funciona tudo normalmente apenas não retorna nenhuma informação e ai cria toda hora um registro novo. O mais estranho é que ao abrir no evento onEdit envio normalmente as informações ao formulário.
Cadastro de Formulários.
Formulário 1
Formulário 2
Fiz uma pagina e nela inseri uma DIV que receberá dinamicamente algumas classes. Quando insiro a primeira classe o botão salvar captura normalmente as informações e grava corretamente, porém quando adiciono a segunda, funciona tudo normalmente apenas não retorna nenhuma informação e ai cria toda hora um registro novo. O mais estranho é que ao abrir no evento onEdit envio normalmente as informações ao formulário.
Cadastro de Formulários.
class CadastroFormularios extends TPage
{
function __construct()
{
parent::__construct();
$this->form = new BootstrapFormBuilder('form_cadastro_atendimentos_formularios');
$this->form->setFormTitle('Formulários');
$this->form->setFieldSizes('100%');
$formulario = new TCombo('formulario');
$formulario->addItems(['1' => 'FORMULÁRIO 1', '2' => 'FORMULARIO 2']);
$formulario->setChangeAction(new TAction(array($this, 'onCarregarFormulario')));
$row = $this->form->addFields( [ new TLabel('Selecione o Formulário'), $formulario ] );
$row->layout = [ 'col-sm-10' ];
$formulario_area = new TElement('div');
$formulario_area->id = 'formulario_area';
$this->form->addContent( [$formulario_area] );
$labelformularios = new TLabel('Formulários preenchidos', '#000000', 12, 'BI');
$labelformularios->style='text-align:left;border-bottom:1px solid #c0c0c0;width:100%';
$this->form->addContent( [$labelformularios] );
$this->grid_formularios = new BootstrapDatagridWrapper(new TQuickGrid);
$this->grid_formularios->setHeight(180);
$this->grid_formularios->makeScrollable();
$this->grid_formularios->style = 'overflow-x:auto;width: 100%;border-style: solid;border-width: 1px;border-color: #D8D8D8;';
$this->grid_formularios->id = 'grid_formularios';
$this->grid_formularios->disableDefaultClick();
$this->grid_formularios->addQuickColumn('Código', 'id', 'left', '5%');
$this->grid_formularios->addQuickColumn('Formulário', 'descricao', 'left', '90%');
$action_edit = new TDataGridAction(array($this, 'onEditFormulario'));
$action_edit->setParameter('register_state', 'false');
$action_edit->setButtonClass('btn btn-default');
$action_edit->setLabel('Editar Formulário');
$action_edit->setImage('fa:pencil-square-o blue fa-lg');
$action_edit->setField('id');
$this->grid_formularios->addAction($action_edit);
$action_delete = new TDataGridAction(array($this, 'onDeleteFormulario'));
$action_delete->setParameter('register_state', 'false');
$action_delete->setButtonClass('btn btn-default');
$action_delete->setLabel('Deletar Formulário');
$action_delete->setImage('fa:trash-o red fa-lg');
$action_delete->setField('id');
$this->grid_formularios->addAction($action_delete);
$this->grid_formularios->createModel();
$this->form->addContent( [$this->grid_formularios] );
// wrap the page content using vertical box
$vbox = new TVBox;
$vbox->style = 'width:100%;height:500px';
$vbox->add($this->form);
parent::add($vbox);
}
/**
* Remover formularios
*/
public function onDeleteFormulario($param)
{
try
{
$key=$param['key'];
TTransaction::open('conexaodb');
$object = new formularios($key);
$object->delete();
// shows the success message
new TMessage('info', 'Registro deletado');
$this->onReload();
TTransaction::close();
}
catch (Exception $e) // in case of exception
{
// shows the exception error message
new TMessage('error', '<b>Error</b> ' . $e->getMessage());
TTransaction::rollback();
}
}
/**
* Editar formularios
*/
public static function onEditFormulario($param)
{
try
{
$key=$param['key'];
TTransaction::open('conexaodb');
$object = new formularios($key);
if ($object->tipo==1){
AdiantiCoreApplication::loadPage('Formulario1', 'onEdit', ['key' => $key, 'register_state' => 'false']);
}else if ($object->tipo==2){
AdiantiCoreApplication::loadPage('Formulario2', 'onEdit', ['key' => $key, 'register_state' => 'false']);
}
TTransaction::close();
}
catch (Exception $e) // in case of exception
{
// shows the exception error message
new TMessage('error', '<b>Error</b> ' . $e->getMessage());
TTransaction::rollback();
}
}
public static function onCarregarFormulario($param)
{
try
{
if (isset($param['formulario'])){
$formulario = $param['formulario'];
if ($formulario==1){
AdiantiCoreApplication::loadPage('Formulario1', 'onEdit', ['register_state' => 'false']);
}else if ($formulario==2){
AdiantiCoreApplication::loadPage('Formulario2', 'onEdit', ['register_state' => 'false']);
}
}
}
catch (Exception $e)
{
new TMessage('error', $e->getMessage());
}
}
/**
* onReload
*/
public function onReload($param)
{
(...)
}
}
Formulário 1
class Formulario1 extends TPage
{
function __construct()
{
parent::__construct();
$this->adianti_target_container = 'formulario_area';
$this->form = new BootstrapFormBuilder('form_formulario_1');
$this->form->setFormTitle('FORMULÁRIO 1');
$this->form->setFieldSizes('100%');
$id = new TEntry('id');
$dataemissao = new TDate('datainicio');
$campo1 = new TRadioGroup('campo1');
$campo2 = new TRadioGroup('campo2');
$id->setEditable(FALSE);
$dataemissao->setMask('dd/mm/yyyy');
$campo1->addItems(['1'=>'Sim', '0'=>'Não']);
$campo1->setLayout('horizontal');
$campo1->setValue(0);
$campo2->addItems(['1'=>'Sim', '0'=>'Não']);
$campo2->setLayout('horizontal');
$campo2->setValue(0);
$row = $this->form->addFields( [ new TLabel('Código'), $id ],
[ new TLabel('Data Emissão'), $dataemissao ] );
$row->layout = [ 'col-sm-1', 'col-sm-2' ];
$row = $this->form->addFields( [ new TLabel('Campo 1'), $campo1 ],
[ new TLabel('Campo 2'), $campo2 ]);
$row->layout = [ 'col-sm-2', 'col-sm-2' ];
$this->form->addAction('Gravar', new TAction(array($this, 'onSave')), 'fa:check-circle-o green');
$vbox = new TVBox;
$vbox->style = 'width: 100%';
$vbox->add($this->form);
parent::add($vbox);
}
public function onEdit($param)
{
try
{
if (isset($param['key'])){
$key = $param['key'];
TTransaction::open('conexaodb');
$object = new formularios($key);
if ($object->dataemissao) TDate::date2br($object->dataemissao);
$this->form->setData($object);
TTransaction::close();
}
}
catch (Exception $e)
{
new TMessage('error', $e->getMessage());
TTransaction::rollback();
}
}
public function onSave($param)
{
try
{
TTransaction::open('conexaodb');
$data = $this->form->getData('formularios');
if ($data->dataemissao) $data->dataemissao = TDate::date2us($data->dataemissao);
$data->tipo = 1;
$data->store();
TTransaction::close();
AdiantiCoreApplication::loadPage('CadastroFormularios', 'onEdit', [ 'register_state' => 'false' ]);
}
catch (Exception $e)
{
new TMessage('error', $e->getMessage());
TTransaction::rollback();
}
}
}
Formulário 2
class Formulario2 extends TPage
{
function __construct()
{
parent::__construct();
$this->adianti_target_container = 'formulario_area';
$this->form = new BootstrapFormBuilder('form_formulario_2');
$this->form->setFormTitle('FORMULÁRIO 2');
$this->form->setFieldSizes('100%');
$id = new TEntry('id');
$dataemissao = new TDate('datainicio');
$campo1 = new TRadioGroup('campo1');
$campo2 = new TRadioGroup('campo2');
$campo3 = new TRadioGroup('campo3');
$campo4 = new TRadioGroup('campo4');
$id->setEditable(FALSE);
$dataemissao->setMask('dd/mm/yyyy');
$campo1->addItems(['1'=>'Sim', '0'=>'Não']);
$campo1->setLayout('horizontal');
$campo1->setValue(0);
$campo2->addItems(['1'=>'Sim', '0'=>'Não']);
$campo2->setLayout('horizontal');
$campo2->setValue(0);
$campo3->addItems(['1'=>'Sim', '0'=>'Não']);
$campo3->setLayout('horizontal');
$campo3->setValue(0);
$campo4->addItems(['1'=>'Sim', '0'=>'Não']);
$campo4->setLayout('horizontal');
$campo4->setValue(0);
$row = $this->form->addFields( [ new TLabel('Código'), $id ],
[ new TLabel('Data Emissão'), $dataemissao ] );
$row->layout = [ 'col-sm-1', 'col-sm-2' ];
$row = $this->form->addFields( [ new TLabel('Campo 1'), $campo1 ],
[ new TLabel('Campo 2'), $campo2 ]);
$row->layout = [ 'col-sm-2', 'col-sm-2' ];
$row = $this->form->addFields( [ new TLabel('Campo 3'), $campo3 ],
[ new TLabel('Campo 4'), $campo4 ]);
$row->layout = [ 'col-sm-2', 'col-sm-2' ];
$this->form->addAction('Gravar', new TAction(array($this, 'onSave')), 'fa:check-circle-o green');
$vbox = new TVBox;
$vbox->style = 'width: 100%';
$vbox->add($this->form);
parent::add($vbox);
}
public function onEdit($param)
{
try
{
if (isset($param['key'])){
$key = $param['key'];
TTransaction::open('conexaodb');
$object = new formularios($key);
if ($object->dataemissao) TDate::date2br($object->dataemissao);
$this->form->setData($object);
TTransaction::close();
}
}
catch (Exception $e)
{
new TMessage('error', $e->getMessage());
TTransaction::rollback();
}
}
public function onSave($param)
{
try
{
TTransaction::open('conexaodb');
$data = $this->form->getData('formularios');
if ($data->dataemissao) $data->dataemissao = TDate::date2us($data->dataemissao);
$data->tipo = 2;
$data->store();
TTransaction::close();
AdiantiCoreApplication::loadPage('CadastroFormularios', 'onEdit', [ 'register_state' => 'false' ]);
}
catch (Exception $e)
{
new TMessage('error', $e->getMessage());
TTransaction::rollback();
}
}
}
Só mais um detalhe que eu esqueci. Parece ser um bug no framework, se no Formulário 2 for retirado o campo datainicio é que ocorre o erro. Deixando somente os TRadioGroup a variavel $param no evento onSave fica apenas com as informações do nome do formulário e o nome do evento os campos não são exibidos como se os campos não existissem no formulario.
Se não me engano, form dentro de form não é sintaxe válida do html(https://developer.mozilla.org/pt-BR/docs/Web/HTML/Element/form) . Pode ser algo relacionado a isso.