Lançado Adianti Framework 8.1!
Clique aqui para saber mais
Erro ao chamar a função onReload estou com o seguinte problema: ao executar um setChangeAction onde eu carrego uma sessão com alguns produtos, tento chamar a função onReload, mas sempre recebo a seguinte mesagem de erro no log do apache: PHP Fatal error: Uncaught Error: Using $this when not in object context in /var/www/html/websistema/app/control/pedido/PedidoAlly.class.php:332nStack trace:n#0 [internal function]: Pedid...
HT
Erro ao chamar a função onReload  
estou com o seguinte problema: ao executar um setChangeAction onde eu carrego uma sessão com alguns produtos, tento chamar a função onReload, mas sempre recebo a seguinte mesagem de erro no log do apache:

PHP Fatal error: Uncaught Error: Using $this when not in object context in /var/www/html/websistema/app/control/pedido/PedidoAlly.class.php:332nStack trace:n#0 [internal function]: PedidoAlly::onChangeActionPolcom(Array)n#1 /var/www/html/websistema/lib/adianti/core/AdiantiCoreApplication.php(49): call_user_func(Array, Array)n#2 /var/www/html/websistema/engine.php(32): Adianti\Core\AdiantiCoreApplication::run(true)n#3 /var/www/html/websistema/engine.php(51): TApplication::run(true)n#4 {main}n thrown in /var/www/html/websistema/app/control/pedido/PedidoAlly.class.php on line 332, referer: ip/websistema/index.php?class=PedidoAlly

Alguém já se deparou com esse erro que possa me ajudar? obrigado.

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 (4)


WP

Poste seu codigo aqui para analizar

Mas pelo visto tu ta tentando usa objeto dinámico ($this) dentro de uma função estática (coisa que não é possível)
NR

Não é possível utilizar o $this dentro de uma função static. Use a função loadPage:
  1. <?php
  2. TApplication::loadPage(__CLASS__,'onReload');
  3. ?>
HT

Nataniel Rabaioli, tentei esse código, mas não carrega o datagrid ao chamar o onReload.

Código:

  1. <?php
  2. /**
  3.  * 
  4.  * @author  herbety Thiago Maciel
  5.  */
  6. class PedidoAlly extends TPage
  7. {
  8.     protected $form// form
  9.     private   $formFields;
  10.     private   $datagrid;
  11.     private   $loaded;
  12.     private   $label_total_valor;
  13.     private   $label_ponto_valor;
  14.             
  15.     /**
  16.      * Class constructor
  17.      * Creates the page and the registration form
  18.      */
  19.     function __construct()
  20.     {
  21.         parent::__construct();
  22.         
  23.         TScript::create('$("input, select, text").keypress(function (e) {var code = null;
  24.         code = (e.keyCode ? e.keyCode : e.which);                
  25.         return (code == 13) ? false : true;
  26.         });');
  27.    
  28.                     
  29.         // criacao de formulário
  30.         $this->form   = new TForm('form_pedido');
  31.         $panel_master = new TPanelGroup'Pedido Online' );
  32.         $vbox = new TVBox;
  33.         $vbox->style 'width: 100%';
  34.         $this->form->add($panel_master);
  35.         $panel_master->add($vbox);
  36.         
  37.         $frame_general = new TFrame;
  38.         //$frame_general->class = 'tframe tframe-custom';
  39.         //$frame_general->setLegend('Dados da venda');
  40.         //$frame_general->style = 'background:whiteSmoke';
  41.         $table_general = new TTable;
  42.         //$table_general->width = '100%';
  43.         $frame_general->add($table_general);
  44.         
  45.         $frame_general_total = new TFrame;
  46.         $table_general_total = new TTable;
  47.         $frame_general_total->add($table_general_total);
  48.         $table_general_total->width '100%';
  49.         $frame_general->add($frame_general_total);
  50.         
  51.         //$this->label_ponto = new TLabel('');
  52.         //$this->label_total = new TLabel('');
  53.         
  54.         $table_general_total->addRowSet($label_ponto = new TLabel('Pontos:'), array( 
  55.                                                                       $this->label_ponto_valor = new TLabel(''), 
  56.                                                                       $label_total = new TLabel('Total Venda RS:'), 
  57.                                                                       $this->label_total_valor = new TLabel('')) );
  58.          $label_ponto->setFontStyle('b');
  59.          $label_total->setFontStyle('b');
  60.          //$label_ponto->setFontColor('#FF0000');                                                             
  61.                                                                       
  62.                 
  63.         // produtos
  64.         $frame_produto = new TFrame;
  65.         //$frame_produto->class = 'tframe tframe-custom';
  66.         //$frame_produto->setLegend('Lista de Produtos');
  67.         $table_produto = new TTable;
  68.         $frame_produto->add($table_produto);
  69.         
  70.         $vbox->add$frame_general );
  71.         $vbox->add$frame_produto );
  72.         
  73.         // campo detalhe cliente
  74.         $cli_seek    = new  ">TDBSeekButton('cli_seek''teste'$this->form->getName(), 'CLIEN''Razao_Social''cli_codigo''cli_razao');
  75.         $cli_codigo  = new TEntry('cli_codigo');
  76.         $cli_razao   = new TEntry('cli_razao');
  77.         
  78.         $obj = new SeekButtonCliente;
  79.         $action = new TAction(array($obj'onReload'));
  80.         $cli_seek->setAction($action);
  81.         $cli_codigo->setSize(80);
  82.         $cli_seek->setSize(80);
  83.         $cli_codigo->setEditable(false);
  84.         $cli_razao->setEditable(false);
  85.         $cli_razao->setSize(400);
  86.         $cli_seek->addValidation('Cliente', new TRequiredValidator);
  87.                 
  88.         $table_general->addRowSet( new TLabel('Código'), $cli_codigo );
  89.         $table_general->addRowSet$label_cliente = new TLabel('Cliente (*)'), array( $cli_seek$cli_razao ) );
  90.         //$label_cliente->setFontColor('#FF0000');
  91.         
  92.         // campo politica
  93.         
  94.         $criteria1 = new TCriteria
  95.         $criteria1->add(new TFilter('Dat_Termino''>'DATE('Y-m-d')));
  96.        
  97.         $criteria2 = new TCriteria
  98.         $criteria2->add(new TFilter('Dat_Termino',  '='NULL)); 
  99.         $criteria = new TCriteria;     
  100.         $criteria->add($criteria1TExpression::OR_OPERATOR); 
  101.         $criteria->add($criteria2TExpression::OR_OPERATOR);
  102.         
  103.         $polCom = new TDBCombo('polcom''sqlserver''POCOM''Id_PolCom''{Id_PolCom} - {Cod_PolCom}','Id_PolCom'$criteria);
  104.         $table_general->addRowSet$label_polCom = new TLabel('Política Comerc (*)'), $polCom );
  105.         
  106.         // Ação para saída do campo ponto
  107.         $polCom->setChangeAction(new TAction(array($this,'onChangeActionPolcom')));
  108.                         
  109.         // Campo detalhe pontos
  110.         
  111.         $ponto = new TDBCombo('ponto''mysql''PedidoPonto''id''{tipo} - {descricao} - ({valor} %)');
  112.         $table_general->addRowSet$label_ponto = new TLabel('Ponto (*)'), $ponto );
  113.         //$label_ponto->setFontColor('#FF0000');
  114.         
  115.         // Ação para saída do campo ponto
  116.         //$ponto->setChangeAction(new TAction(array($this,'onChangeActionPonto')));
  117.      
  118.         // Campo detalhe agregação
  119.         $agregacao = new TEntry('agregacao');
  120.         $table_general->addRowSet$label_agregacao = new TLabel('Agregação: %'), $agregacao );
  121.         $agregacao->setTransformer(array($this'onDecimal'));  
  122.         $agregacao->setNumericMask(2'.'',');
  123.                   
  124.         // Ação de saída agregação
  125.         //$agregacao->setExitAction(new TAction(array($this,'onExitActionAgregacao')));          
  126.         
  127.         // Seleção de produto
  128.         $prd_codigo     = new  ">TDBSeekButton('prd_codigo''teste'$this->form->getName(), 'PRODU''Descricao''prd_codigo''prd_descricao');
  129.         $prd_descricao  = new TEntry('prd_descricao');
  130.         $prd_vlr_ultEnt = new TEntry('prd_vlr_ultEnt');
  131.         $prd_vlr_und    = new TEntry('prd_vlr_und');
  132.         $prd_quantidade = new TEntry('prd_quantidade');
  133.         $prd_desconto   = new TEntry('prd_desconto');
  134.                
  135.         $prd_desconto->setNumericMask(2'.'',');
  136.         $prd_vlr_und->setNumericMask(2'.'',');
  137.         $obj = new SeekButtonProduto;
  138.         $action = new TAction(array($obj'onReload'));
  139.         $prd_codigo->setAction($action);
  140.         
  141.         $prd_codigo->setSize(80);
  142.         $prd_vlr_ultEnt->setEditable(false);
  143.         $prd_descricao->setSize(400);
  144.         $prd_descricao->setEditable(false);
  145.                
  146.         $add_produto = new TButton('add_produto');
  147.         $action_produto = new TAction(array($this'onProdutoAdd'));
  148.         $add_produto->setAction($action_produto'Adicionar');
  149.         $add_produto->setImage('fa:save');
  150.         
  151.         $table_produto->addRowSet$label_produto    = new TLabel('Produto:'), array($prd_codigo,$prd_descricao) );
  152.         $table_produto->addRowSet$label_vlr_UltEnt = new TLabel('Valor Unit. R$:'), $prd_vlr_ultEnt );
  153.         $table_produto->addRowSet$label_vlr_und    = new TLabel('Valor Fixo. R$:'), $prd_vlr_und );
  154.         $table_produto->addRowSet$label_quantidade = new TLabel('Quantidade:'), $prd_quantidade );
  155.         $table_produto->addRowSet( new TLabel('Desc. Fixo: %'), $prd_desconto );
  156.         $table_produto->addRowSet$add_produto );
  157.         
  158.         $label_produto->setFontColor('#FF0000');
  159.         $label_quantidade->setFontColor('#FF0000');
  160.         
  161.         //datagrid dos produtos inseridos
  162.         $this->datagrid = new TDataGrid;
  163.         $this->datagrid = new BootstrapDatagridWrapper($this->datagrid);
  164.         $this->datagrid->style "margin-bottom: 10px; width:100%";
  165.         $this->datagrid->disableDefaultClick();
  166.                
  167.         $codigo     = new TDataGridColumn('prd_codigo''Código''center'80);
  168.         $descricao  = new TDataGridColumn('prd_descricao''Descrição''left'300);
  169.         $fabricante = new TDataGridColumn('prd_fabricante''Fabricante''left'200);
  170.         $qtd_cx     = new TDataGridColumn('prd_cx''Qtd. Caixa''left'100);
  171.         $quantidade = new TDataGridColumn('prd_quantidade''Quantidade''right'30);
  172.         $valor      = new TDataGridColumn('prd_valor','Valor''right'100);
  173.         $desconto   = new TDataGridColumn('prd_desconto','Desc. %''right'80);
  174.         $subTotal   = new TDataGridColumn('subTotal',    'SubTotal',    'right'100);
  175.         
  176.         $this->datagrid->addColumn($codigo);
  177.         $this->datagrid->addColumn($descricao);
  178.         $this->datagrid->addColumn($fabricante);
  179.         $this->datagrid->addColumn($quantidade);
  180.         $this->datagrid->addColumn($valor);
  181.         $this->datagrid->addColumn($desconto);
  182.         $this->datagrid->addColumn($subTotal);
  183.         
  184.         // create EDIT action
  185.         $action_edit = new TDataGridAction(array($this'onEdit'));
  186.         $action_edit->setUseButton(TRUE);
  187.         $action_edit->setButtonClass('btn btn-default');
  188.         //$action_edit->setLabel(_t('Edit'));
  189.         $action_edit->setImage('fa:pencil-square-o blue fa-lg');
  190.         $action_edit->setField('prd_codigo');
  191.         //$this->datagrid->addAction($action_edit);
  192.         
  193.         // create DELETE action
  194.         $action_del = new TDataGridAction(array($this'onEdit'));
  195.         $action_del->setUseButton(TRUE);
  196.         $action_del->setButtonClass('btn btn-default');
  197.         //$action_del->setLabel(_t('Delete'));
  198.         $action_del->setImage('fa:trash-o red fa-lg');
  199.         $action_del->setField('prd_codigo');
  200.         //$this->datagrid->addAction($action_del);
  201.         
  202.         $this->datagrid->createModel();
  203.         
  204.         $vbox->add$this->datagrid );
  205.         
  206.         //formatação dos números
  207.         $format_value = function($value) {
  208.             if (is_numeric($value)) {
  209.                 return number_format($value2',''.');
  210.             }
  211.             return $value;
  212.         };
  213.         
  214.         //formatação decimal
  215.         $desconto->setTransformer$format_value );
  216.         $valor->setTransformer$format_value );
  217.         $subTotal->setTransformer$format_value );
  218.         
  219.         //Função formatação decimal datagrid
  220.        $subTotal->setTotalFunction( function($values) {
  221.             return array_sum((array) $values);
  222.         });
  223.                 
  224.         //botões
  225.         $save_button TButton::create('save', array($this'onSave'),  'Fechar Pedido',  'fa:save green');
  226.         $new_button  TButton::create('new',  array($this'onClear'), 'Zerar Pedido''fa:eraser red');
  227.         
  228.         // adiciona os campos no formulário
  229.         $this->formFields = array($cli_seek$cli_codigo$cli_razao$polCom$ponto$agregacao$prd_codigo$prd_descricao$prd_vlr_ultEnt$prd_vlr_und$prd_quantidade$prd_desconto$add_produto$save_button$new_button);
  230.         $this->form->setFields$this->formFields );
  231.         
  232.         //verifica se existe sessão cliente
  233.         if(!empty(TSession::getValue('cliente')))
  234.         {
  235.             $cliente TSession::getValue('cliente');
  236.             $cli_codigo->setValue($cliente->cli_codigo);
  237.             $cli_razao->setValue($cliente->cli_razao);
  238.         }
  239.         
  240.         //verifica se existe sessão politica
  241.         if(!empty(TSession::getValue('polcom')))
  242.         {
  243.             $sessao TSession::getValue('polcom');
  244.             $polCom->setValue($sessao->polcom);
  245.             $ponto->setValue($sessao->ponto);
  246.             $agregacao->setValue($sessao->agregacao);
  247.             
  248.         }else{
  249.              
  250.              $ponto->setEditable(false);
  251.              $agregacao->setEditable(false);
  252.              $prd_codigo->setEditable(false);
  253.              $prd_vlr_und->setEditable(false);
  254.              $prd_quantidade->setEditable(false);
  255.              $prd_desconto->setEditable(false);
  256.             
  257.             //TDBCombo::disableField('form_pedido', 'ponto');
  258.             //TEntry::disableField('form_pedido', 'agregacao');
  259.         }
  260.         
  261.         $panel_master->addFooterTHBox::pack($save_button$new_button) );
  262.         
  263.         // cria o container das páginas
  264.         $container = new TVBox;
  265.         $container->add(new TXMLBreadCrumb('menu.xml'__CLASS__));
  266.         $container->add($this->form);
  267.         parent::add($container);
  268.         
  269.     }
  270.     
  271.     /**
  272.      * Ação de saída do cliente
  273.      */
  274.     public static function onChangeActionPolcom($param)
  275.     {
  276.          TTransaction::open('mysql');
  277.          $parametro = new ParametroPedido(1);
  278.          $agregacao $parametro->agregacao_min;
  279.          $polcom = new StdClass;
  280.          $polcom->polcom    $param['polcom']; 
  281.          $polcom->ponto     2
  282.          $polcom->agregacao $agregacao;
  283.          TTransaction::close();
  284.                   
  285.          /**
  286.          if($param['ponto'] == 0)
  287.             TEntry::disableField('form_pedido', 'prd_vlr_und');
  288.             TEntry::disableField('form_pedido', 'prd_desconto');
  289.          if($param['ponto'] != 0)
  290.             TEntry::enableField('form_pedido', 'prd_vlr_und');
  291.             TEntry::enableField('form_pedido', 'prd_desconto');
  292.          */
  293.          TTransaction::open('teste');
  294.          
  295.          $criteria = new TCriteria;
  296.          $p['order'] = 'Cod_Produt';
  297.          $p['direction'] = 'asc';
  298.          $criteria->setProperties($p);  
  299.          $criteria->add(new TFilter('Id_PolCom','=',$polcom->polcom));
  300.          $repository = new TRepository('PCXPR');
  301.          $produtos $repository->load($criteria);
  302.            
  303.           if(!empty($produtos))
  304.           {                
  305.             foreach($produtos as $produto)
  306.             {
  307.                  $produ = new PRODU($produto->Cod_Produt);
  308.                  
  309.                  $itens[$produ->Codigo ] = array('prd_codigo'    => $produ->Codigo,
  310.                                                    'prd_descricao'  => $produ->Descricao,
  311.                                                    'prd_fabricante' => $produ->fabricante->Fantasia,
  312.                                                    'prd_quantidade' => $produto->Qtd_Minimo,
  313.                                                    'prd_vlr_und'    => '',
  314.                                                    'prd_valor'      => $produ->Prc_Fabric,
  315.                                                    'prd_desconto'   => $produto->Per_Descon);
  316.               
  317.             TSession::setValue('itens'$itens); 
  318.             
  319.             }
  320.            
  321.             TSession::setValue('polcom',$polcom);
  322.             
  323.             
  324.          }else{
  325.              new TMessage('info','Sem produtos cadastrado nesta política!');
  326.          }
  327.            TTransaction::close();
  328.            
  329.     }
  330.     
  331.    
  332.      * Clear form
  333.      * @param $param URL parameters
  334.      */
  335.     function onClear($param)
  336.     {
  337.         $this->form->clear();
  338.         TSession::setValue('itens', array());
  339.         TSession::setValue('cliente', array());
  340.         TSession::setValue('polcom', array());
  341.         $this->onReload$param );
  342.     }
  343.     
  344.      * Reload the item list
  345.      * @param $param URL parameters
  346.      */
  347.     public function onReload($param)
  348.     {
  349.         $itens TSession::getValue('itens');
  350.         //$cliente = TSession::getValue('cliente');
  351.         $total 0;
  352.         
  353.         $this->datagrid->clear(); 
  354.         $data $this->form->getData();
  355.         
  356.         
  357.         if (!empty($itens))
  358.         {
  359.             
  360.             foreach ($itens as $prd_codigo => $list_produto)
  361.             {
  362.                 
  363.                 $item = new StdClass;
  364.                 $item->prd_codigo     $list_produto['prd_codigo'];
  365.                 $item->prd_descricao  $list_produto['prd_descricao'];
  366.                 $item->prd_fabricante $list_produto['prd_fabricante'];
  367.                 $item->prd_quantidade $list_produto['prd_quantidade'];
  368.                 $item->prd_quantidade = new TEntry($list_produto['prd_codigo']);
  369.                 $item->prd_quantidade->setSize(50);
  370.                 $item->prd_quantidade->setExitAction(new TAction(array($this,'onExitActionQuantidade'))); 
  371.                 $item->prd_quantidade->setValue($list_produto['prd_quantidade']);
  372.                 $item->prd_valor      $list_produto['prd_valor'];
  373.                 $item->prd_desconto   $list_produto['prd_desconto'];
  374.                 $item->subTotal       $item->prd_valor * (1-($item->prd_desconto)/100) * $item->prd_quantidade;
  375.                 $total += $item->subTotal;               
  376.                 $row $this->datagrid->addItem$item );
  377.                 $this->form->addField($item->prd_quantidade);
  378.                 $row->onmouseover '';
  379.                 $row->onmouseout  '';
  380.             }
  381.             $this->label_total_valor->setValue(number_format($total2',''.'));
  382.         }
  383.         
  384.         $this->loaded TRUE;
  385.     }
  386.      * Show the page
  387.      */
  388.     public function show()
  389.     {
  390.         
  391.         //checa se o datagrid existe e se esta preenchido
  392.         if (!$this->loaded AND (!isset($_GET['method']) OR $_GET['method'] !== 'onReload') )
  393.         {
  394.             $this->onReloadfunc_get_arg(0) );
  395.         }
  396.         parent::show();
  397.     }
  398. }
  399. ?>
HT

Pessoal, obrigado pela ajuda. Consegui resolver através deste link: www.adianti.com.br/forum/pt/view_1123?problemas-ao-carregar-um-datag