Lançado Adianti Framework 7.6!
Clique aqui para saber mais
Carregar Datagrid com dados gravados no TSession Boa tarde, Estou montando uma datagrid com o resultado de um select no banco. Inicialmente eu pego os dados através de um método static e estava enviado os resultado do select através do postData para a função onReload() e assim poder preencher o datagrid com os dados. Até o momento estava funcionando tudo normalmente, mas a quantidade de dados começou a ficar muito grande e não era mai...
JP
Carregar Datagrid com dados gravados no TSession  
Boa tarde,

Estou montando uma datagrid com o resultado de um select no banco. Inicialmente eu pego os dados através de um método static e estava enviado os resultado do select através do postData para a função onReload() e assim poder preencher o datagrid com os dados. Até o momento estava funcionando tudo normalmente, mas a quantidade de dados começou a ficar muito grande e não era mais possível passar esses dados através do postData.

Vi então que era possível salvar os dados no TSession utilizando o setData e depois pegar através do getData. Isso ajudou e muito porém agora pegando os dados da TSession a Datagrid não é mais gerada.

Alguém poderia me dar uma luz?

Um trecho do código, se precisa de mais alguma coisa eu posso fornecer.

  1. <?php 
  2. public static function($param){
  3. //...resto do código
  4. TSession::setValue('dados_producao_refugo'$dadosExtracao);
  5. }
  6. public function onReload($param){
  7. //...resto do código
  8. $dadosProducaoRefugo TSession::getValue('dados_producao_refugo');
  9. //...após isso faço a função que preenche a datagrid
  10. }
  11. ?>

Curso completo Meu Negócio Pronto
Use para si, ou transforme em um negócio: Inclui aulas e códigos-fontes
Gestor de conteúdo (SITE) + Loja Virtual (E-Commerce) + Emissor de Notas para infoprodutos


Meu negócio pronto Quero me inscrever agora!

Comentários (8)


NR

A função que adiciona um item à grid é a addItem e ela precisa receber um objeto como parâmetro.

Qual o conteúdo da variável $dadosProducaoRefugo?
JP

Boa tarde, Nataniel!

O conteúdo da variável é um array, quando faço o var_dump() dela eu consigo ver o resultado. Estou inserindo os dados na datagrid dessa forma:

  1. <?php
  2. foreach ($dadosProducaoRefugo as $valueDadosProducaoRefugo) {
  3.    if (array_key_exists("quant"$valueDadosProducaoRefugo) == false) {
  4.       $valueDadosProducaoRefugo['quant'] = '0.00';
  5.    }
  6.    $item = (object) $valueDadosProducaoRefugo;
  7.    $item->dataHora date_format(date_create($item->dataHora), 'd/m/Y H:i:s');
  8.    $item->quant number_format($item->quant2"."".");
  9.    $this->datagrid_dados_extracao->addItem($item);
  10. }
  11. ?>


Já fiz o mesmo foreach em outras páginas, mas em todas funcionam. Nessa onde pego os dados do TSession ele não preenche a datagrid.
NR

Roda aí e posta o resultado:
  1. <?php
  2. $item = (object) $valueDadosProducaoRefugo;
  3. var_dump($item);
  4. ?>
JP

Resultado do var_dump($item);

object(stdClass)#34 (6) {
["cdOperacao"]=>
string(4) "30.1"
["0"]=>
string(4) "30.1"
["dataHora"]=>
string(19) "2020-03-20 06:00:00"
["1"]=>
string(19) "2020-03-20 06:00:00"
["quant"]=>
string(6) "124.00"
["2"]=>
string(6) "124.00"
}
...
...
...
NR

Aparentemente tudo certo. Consegue postar o código de toda classe?
JP

Segue abaixo código da classe, talvez uma coisinha ou outra esteja um pouquinho diferente do que mostrei ali em cima porque estava mexendo nela.

  1. <?php
  2. class OperacaoProducaoIndicadores extends TPage
  3. {
  4.     protected $form;
  5.     private $database 'ibmf_oficial';
  6.     private static $formName 'form_OperacaoProducaoIndicadores';
  7.     private $datagrid_dados_extracao;
  8.     private $nrOrdem null;
  9.     public function __construct($param)
  10.     {
  11.         parent::__construct();
  12.         if ($this->database != TSession::getValue('unit_database')) {
  13.             $this->database TSession::getValue('unit_database');
  14.         }
  15.         TSession::setValue(__CLASS__ '_unit_database'$this->database);
  16.         parent::setTargetContainer('adianti_right_panel');
  17.         $this->form = new BootstrapFormBuilder(self::$formName);
  18.         $this->form->setFormTitle('Indicadores');
  19.         $this->form->setProperty('style''margin-bottom:0;box-shadow:none;');
  20.         $this->form->setClientValidation(true);
  21.         $this->nrOrdem $param['nrOrdem'];
  22.         // *INÍCIO* CRIAÇÃO DOS COMPONENTES
  23.         $cdTurno = new TDBSelect('cdTurno'$this->database'TbTurno''cdTurno''{descTurno} | {periodoInicial} às {periodoFinal}''cdTurno');
  24.         $cdTurno->disableTitles();
  25.         $cdTurno->addValidation('Turno', new TRequiredValidator);
  26.         $data_consulta  = new TDate('datetime');
  27.         $data_consulta->setSize('100%');
  28.         $data_consulta->addValidation('Data', new TRequiredValidator);
  29.         $btn_enviar_consulta = new TButton('btn_enviar_consulta');
  30.         $btn_enviar_consulta->name 'btn_enviar_consulta';
  31.         $btn_enviar_consulta->style $btn_enviar_consulta->style ';margin-top:17px;';
  32.         $btn_enviar_consulta->addStyleClass('btn btn-info btn-sm');
  33.         $btn_enviar_consulta->setAction(
  34.             new TAction([$this'consultarDadosProducaoRefugo'], ['nrOrdem' => $this->nrOrdem]),
  35.             '<i class="fa fa-paper-plane"></i>&nbsp;&nbsp;Enviar'
  36.         );
  37.         $row0 $this->form->addFields([$cdTurno], [$data_consulta$btn_enviar_consulta]);
  38.         $row0->layout = [' col-sm-6'' col-sm-6'];
  39.         // *INÍCIO* SUBFORM INDICADORES
  40.         $subform = new BootstrapFormBuilder;
  41.         $subform->setFieldSizes('100%');
  42.         $subform->setProperty('style''border:none');
  43.         //PRODUÇÃO
  44.         $subform->appendPage('Produção');
  45.         $this->datagrid_dados_extracao = new BootstrapDatagridWrapper(new TDataGrid);
  46.         $this->datagrid_dados_extracao->id 'datagrid_dados_extracao';
  47.         $this->datagrid_dados_extracao->style "width: 100%";
  48.         $cdOperacao = new TDataGridColumn('cdOperacao''Operação''left');
  49.         $dataHora = new TDataGridColumn('dataHora''Horário''center');
  50.         $quant = new TDataGridColumn('quant''Quantidade''right');
  51.         $this->datagrid_dados_extracao->addColumn($cdOperacao);
  52.         $this->datagrid_dados_extracao->addColumn($dataHora);
  53.         $this->datagrid_dados_extracao->addColumn($quant);
  54.         $this->datagrid_dados_extracao->createModel();
  55.         $row $subform->addFields([$this->datagrid_dados_extracao]);
  56.         $row->layout = [' col-sm-12'];
  57.         // *FIM* SUBFORM INDICADORES
  58.         $this->form->addContent([$subform]);
  59.         $this->form->addHeaderActionLink(_t('Close'), new TAction(array($this'onClose')), 'fa:times red');
  60.         parent::add($this->form);
  61.         // *FIM* CRIAÇÃO DOS COMPONENTES
  62.         //INCLUDES
  63.         $this->include_css('app/lib/include/ibmf_v2/producao/css/OperacaoProducaoIndicadores.css');
  64.     }
  65.     public static function consultarDadosProducaoRefugo($param)
  66.     {
  67.         try {
  68.             // *INÍCIO* COLETA DE DADOS
  69.             $dadosOrdemSelecionda OperacaoProducao::getOrdemSelecionada(['nrOrdem' => $param['nrOrdem']]);
  70.             $cdOperacao $dadosOrdemSelecionda[0]['cdOperacao'];
  71.             $parametrosApontTempoReal json_decode($dadosOrdemSelecionda[0]['parametrosApontTempoReal'], TRUE);
  72.             $roboProd $parametrosApontTempoReal['parametroInterfaceColetaProd']['robo'];
  73.             $parametroProd $parametrosApontTempoReal['parametroInterfaceColetaProd']['parametroProd'];
  74.             $data $param['date'];
  75.             $turno $param['cdTurno'];
  76.             TTransaction::open(TSession::getValue('unit_database'));
  77.             $conn TTransaction::get();
  78.             $stmtDadosTurno $conn->prepare("SELECT periodoInicial, periodoFinal FROM tb_turno WHERE cdTurno IN (?,?)");
  79.             $stmtDadosTurno->execute([$turno[0], end($turno)]);
  80.             $dadosTurno $stmtDadosTurno->fetchAll();
  81.             $periodoInicial $dadosTurno[0]['periodoInicial'];
  82.             $periodoFinal end($dadosTurno)['periodoFinal'];
  83.             $dtPeriodoInicial $data ' ' $periodoInicial;
  84.             if (count($turno) > || $turno[0] == '002') {
  85.                 $data DateTime::createFromFormat('Y-m-d'$data);
  86.                 $data->add(new DateInterval('P1D'));
  87.                 $data $data->format('Y-m-d');
  88.                 $dtPeriodoFinal $data ' ' $periodoFinal;
  89.             } else {
  90.                 $dtPeriodoFinal $data ' ' $periodoFinal;
  91.             }
  92.             // *FIM* COLETA DE DADOS
  93.             // *INÍCIO* TABELA DADOS PRODUÇÃO
  94.             $stmtDadosPrdExtracao $conn->prepare("CALL sp_ConsultaApontHoraHoraTempoReal(?,?,?,?,?)");
  95.             $stmtDadosPrdExtracao->execute([$cdOperacao$parametroProd$roboProd$dtPeriodoInicial$dtPeriodoFinal]);
  96.             $listaDadosPrdExtracao $stmtDadosPrdExtracao->fetchAll();
  97.             TTransaction::close();
  98.             // *FIM* TABELA DADOS PRODUÇÃO
  99.             // SALVAR DADOS NO ARRAY
  100.             $dadosExtracao $listaDadosPrdExtracao;
  101.             TSession::setValue('dados_producao_refugo'$dadosExtracao);
  102.             TApplication::postData(self::$formName'OperacaoProducaoIndicadores''onReload'$param);
  103.         } catch (Exception $e) {
  104.             new TMessage('error'$e->getMessage());
  105.             TTransaction::rollback();
  106.         }
  107.     }
  108.     function onReload($param)
  109.     {
  110.         try {
  111.             $this->form->setData($this->form->getData());
  112.             $this->nrOrdem $param['nrOrdem'];
  113.             $this->datagrid_dados_extracao->clear();
  114.             $dadosProducaoRefugo TSession::getValue('dados_producao_refugo');
  115.             // *INÍCIO* CARREGANDO TABELA PRODUÇÃO
  116.             if (!empty($dadosProducaoRefugo)) {
  117.                 foreach ($dadosProducaoRefugo as $valueDadosProducaoRefugo) {
  118.                                         if (array_key_exists("quant"$valueDadosProducaoRefugo) == false) {
  119.                                                 $valueDadosProducaoRefugo['quant'] = '0.00';
  120.                                         }
  121.                                        $item = (object) $valueDadosProducaoRefugo;
  122.                                        $item->dataHora date_format(date_create($item->dataHora), 'd/m/Y H:i:s');
  123.                                        $item->quant number_format($item->quant2"."".");
  124.                                        $this->datagrid_dados_extracao->addItem($item);
  125.                                 }
  126.             } else {
  127.                                new TMessage('Erro''Não foram encontrado dados de apontamento!');
  128.                         }
  129.             // *FIM* CARREGANDO TABELA PRODUÇÃO
  130.         } catch (Exception $e) {
  131.             new TMessage('error'$e->getMessage());
  132.             TTransaction::rollback();
  133.         }
  134.     }
  135.     public static function onClose($param)
  136.     {
  137.         TScript::create("Template.closeRightPanel()");
  138.     }
  139.     public function onShow($param)
  140.     {
  141.         try {
  142.         } catch (Exception $e) {
  143.             new TMessage('error'$e->getMessage());
  144.         }
  145.     }
  146. }
  147. ?>
NR

Ao passar a variável $param para a função onReload acaba herdando a propriedade "static", o que faz com que a tela não seja recarregada. Faça o unset e teste novamente:
  1. <?php
  2. unset($param['static']);
  3. TApplication::postData(self::$formName'OperacaoProducaoIndicadores''onReload'$param);
  4. ?>
JP

Fiz o que comentou e funcionou!!! Muito obrigado pela ajuda. :^D