RB
Dificuldade em carregar dados no TFieldList
Olá, pessoal
Estou utilizando TFieldList em um forma para carregar dados de um array, porém sem sucesso.
Alguém pode me ajudar ?
segue trecho de código
Estou utilizando TFieldList em um forma para carregar dados de um array, porém sem sucesso.
Alguém pode me ajudar ?
segue trecho de código
- <?php
- class JuridicaForm extends TPage
- {
- protected static $form;
- protected static $formName = 'form_juridica';
- protected static $obj_atividade;
- public function __construct($param)
- {
- $atividade_secundaria_code = new TEntry('atividade_secundaria_code[]');
- $atividade_secundaria_text = new TEntry('atividade_secundaria_text[]');
- $atividade_secundaria_code->setSize('100%');
- $atividade_secundaria_text->setSize('100%');
- self::$obj_atividade = new TFieldList;
- self::$obj_atividade->width = '100%';
- self::$obj_atividade->class .= ' dashed'; // important
- self::$obj_atividade->addField('<b>Código</b>', $atividade_secundaria_code,['width' => '10%']);
- self::$obj_atividade->addField('<b>Descrição</b>',$atividade_secundaria_text,['width' => '90%']);
- self::$form->addField($atividade_secundaria_code);
- self::$form->addField($atividade_secundaria_text);
- }
- public static function buscaCnpjWeb($param)
- {
- try
- {
- if (isset($param['cnpj']) and (!empty($param['cnpj'])))
- {
- $cnpj = preg_replace('/[^0-9]/','',$param['cnpj']);
- $retorno = @file_get_contents('https://www.receitaws.com.br/v1/cnpj/'.urlencode($cnpj));
- $objeto = json_decode($retorno);
- if (!empty($objeto))
- {
- $object = new stdClass();
- //.... outros campos
- if ($objeto->atividades_secundarias)
- {
- self::$obj_atividade->addHeader();
- foreach ($objeto->atividades_secundarias as $atividade)
- {
- $atividade_detail = new stdClass;
- $atividade_detail->atividade_secundaria_code = $atividade->code;
- $atividade_detail->atividade_secundaria_text = $atividade->text;
- self::$obj_atividade->addDetail($atividade_detail);
- }
- self::$obj_atividade->addCloneAction();
- }
- else
- {
- self::onClear($param);
- }
- }
- }
- }
- catch (Exception $e)
- {
- new TMessage('error', $e->getMessage());
- }
- }
- }
- ?>
adianti.com.br/framework_files/tutor/index.php?class=FormFieldListVi
Já li, e refiz varias vezes o exemplo, e não conseguiu obter sucesso.
Não consegui identificar onde estou falhando.
Então, alterei com base no exemplo, porém sem sucesso
veja :
Tentei desta outra forma, mas também não deu.
Help, Help...
As funções addHeader, addDetail e addCloneAction não devem ser usadas em funções estáticas. Você precisa trabalhar com a função TForm::sendData, passando um array nos campos do fieldlist, conforme consta no exemplo:
Novamente, eu aqui,
Na tentativa e erro, criei um método separado
Continuação,
Só que agora só preenche a primeiro linha
O atributo correspondente ao nome do campo precisa ser um array.
No seu foreach está atribuindo os valores a uma variável string comum, dessa forma somente o último item é considerado, pois substitui os valores anteriores. Use um array:
Nataniel Rabaioli,
muito obrigado mais uma vez, salvou meu dia.
$this->form->appendPage('Vacinas');
....
//notebook
$this->form->appendPage('Fabricantes');
// create detail fields
$fabricante_id = new TDBUniqueSearch('fabricante_id[]', 'cedipi', 'TbFabricantes', 'id', 'descricao');
$fabricante_id->setMinLength(1);
$fabricante_id->setSize('100%');
$fabricante_id->setMask('{descricao} ({id})');
$cod_barras = new TEntry('cod_barras');
$cod_barras->setSize('100%');
$registro_ans = new TEntry('registro_ans');
$registro_ans->setSize('100%');
$this->form->addField($fabricante_id) ;
$this->form->addField($cod_barras) ;
$this->form->addField($registro_ans);
// detail
$this->fabvacinas_list = new TFieldList;
$this->fabvacinas_list->addField( 'Fabricante', $fabricante_id, ['width' => '50%']);
$this->fabvacinas_list->addField( 'Cód. Barras', $cod_barras, ['width' => '25%']);
$this->fabvacinas_list->addField( 'Registro ANS', $registro_ans, ['width' => '25%']);
$this->fabvacinas_list-> width = '100%';
$this->fabvacinas_list->enableSorting();
$this->form->addFields( [new TFormSeparator('Itens') ] );
// $this->form->addAction( _t('Save'), new TAction( [$this, 'onSave'] ), 'fa:save green' ); onSalvarFab
$btn3 = $this->form->addAction( 'Salvar Fabricantes', new TAction( [$this, 'onSalvarFab']), 'fa:save green' );
$this->fabvacinas_list->addHeader();
$this->fabvacinas_list->addDetail( new stdClass);
$this->fabvacinas_list->addCloneAction();
$this->form->addContent( [$this->fabvacinas_list] );
public static function onSalvarFab( $param )
{
try
{
TTransaction::open('cedipi'); // open a transaction with database
$id = (int) $param['id'];
$object = new TbVacinas($id); // instantiates the Active Record
$fabri_items = TbVacFabricantes::where('vacinas_id', '=', $object->id)->delete();
if( !empty($param['fabricante_id']) AND is_array($param['fabricante_id']) )
{
foreach( $param['fabricante_id'] as $key => $value)
{
// new TMessage('info', 'barras: '.$param['fabricante_id'].' ans: '.$param['registro_ans']);
$data = new TbVacFabricantes;
$data->vacinas_id = $object->id;
$data->fabricantes_id = $param['fabricante_id'][$key];
$data->cod_barras = $param['cod_barras'];
$data->registro_ans = $param['registro_ans'];
$data->store();
}
}
TForm::sendData('form_TbVacinas', (object) ['id' => $object->id]);
TTransaction::close(); // close the transaction
new TMessage('info', AdiantiCoreTranslator::translate('Record saved')); // success message
}
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
}
}
ERRO: ao salvar na tabela, está ocorrendo a seguinte situação.
salva os códigos certinhos do fabricante, só que está repetindo o valor da última
linha incluída nos 2 registros incluídos na tabela (campos com valores repetidos
ultimo cód.barras e registro ans.)
id vacinas_id fabricantes_id registro_ans cod_barras ativo created_at
34 2 1 44444 3333 S 2021-05-06 17:38:16
35 2 2 44444 3333 S 2021-05-06 17:38:16
Alguém pode identificar o problema? Olhei os exemplo do tutor, li o livro,
pesquisei no Fórum e não consegui descobrir o erro. Help!