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 Dominando o Adianti Framework

O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado!


Dominando o Adianti Framework 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->quant, 2, ".", ".");
  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) > 1 || $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->quant, 2, ".", ".");
  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