Lançado Adianti Framework 7.6!
Clique aqui para saber mais
Problemas ao carregar um DataGrid Pessoal, mais uma vez preciso da ajuda de vocês. Tenho a seguinte classe no qual eu carrego um TCombo com os centros de custos do usuário logado. Ao selecionar um centro de custo (onChangeAction), eu consigo acionar o evento, mas o $this->datagrid não é reconhecido. Eu pensei que fosse o fato de estar num "static function", então eu criei um novo método, mas mesmo assim quando uso: $this...
MG
Problemas ao carregar um DataGrid  
Fechado
Pessoal, mais uma vez preciso da ajuda de vocês.
Tenho a seguinte classe no qual eu carrego um TCombo com os centros de custos do usuário logado.
Ao selecionar um centro de custo (onChangeAction), eu consigo acionar o evento, mas o $this->datagrid não é reconhecido.
Eu pensei que fosse o fato de estar num "static function", então eu criei um novo método, mas mesmo assim quando uso:
$this->datagrid->clear(); ou $this->datagrid->addItem(array) ele dá pau e não executa, se comento as linhas do datagrid, o métod funciona.

Alguém tem alguma luz?

Abraços
Marcelo

  1. <?php
  2. class FuncionarioHomeOffice extends TPage
  3. {
  4.     private $form;
  5.     private $datagrid;
  6.     private $panel;
  7.     
  8.     public function __construct()
  9.     {
  10.         parent::__construct();
  11.         $this->form = new TQuickForm('form_funcionario_homeoffice');
  12.         $this->form->class 'tform';
  13.         $this->form->setFormTitle('Colaboradores em Home Office');
  14.         
  15.         $this->datagrid = new TDataGrid;
  16.         $username      = new TEntry('username');
  17.         $matricula     = new TEntry('matricula');
  18.         $centrocustoid = new TCombo('centrocustoid');
  19.         
  20.         $matricula->setValue(TSession::getValue('login'));
  21.         $matricula->setEditable(false);
  22.         
  23.         $username->setValue(TSession::getValue('username'));
  24.         $username->setEditable(false);
  25.         
  26.         
  27.         // Carrega o combo dos centros de custos do coordenador
  28.         TTransaction::open('permission');
  29.         $repository = new TRepository('UsuarioCentroCusto');
  30.         $criteria = new TCriteria;
  31.         $criteria->add(new TFilter('login','=',$matricula->getValue()));
  32.         $cc $repository->load($criteria);
  33.         $itemsCombo = array();
  34.         foreach($cc as $dados):
  35.             $itemsCombo[$dados->centrocustoid] = $dados->centrocustoid;
  36.         endforeach;
  37.         $centrocustoid->addItems($itemsCombo);
  38.         TTransaction::close();
  39.         $matricula_colaborador = new TDataGridColumn('matricula','Matricula','center',80);
  40.         $nome_funcionario      = new TDataGridColumn('nome_funcionario','Nome do Funcionário','left',300);
  41.         
  42.         $this->datagrid->addColumn($matricula_colaborador);
  43.         $this->datagrid->addColumn($nome_funcionario);
  44.         
  45.         $this->datagrid->createModel();
  46.         
  47.         $change_action = new TAction(array($this'onChangeAction'));
  48.         $centrocustoid->setChangeAction($change_action);
  49.                                            
  50.         $this->form->addQuickField('Login',$matricula,200);
  51.         $this->form->addQuickField('Coordenador : ',$username,400);
  52.         $this->form->addQuickField('Centro de Custo',$centrocustoid,300);
  53.         
  54.         //$this->form->setFields(array($matricula,$centrocustoid));        
  55.         
  56.         parent::add($this->form);
  57.         parent::add($this->datagrid);
  58.         
  59.     }
  60.     
  61.     public static function onChangeAction($param)
  62.     {
  63.         try
  64.         {
  65.             $ccid $param['centrocustoid'];
  66.             TTransaction::open('permission');
  67.             
  68.             // limpa a grid
  69.             //self::$datagrid->clear();
  70.             // busca os dados para preencher a grid
  71.             $repository = new TRepository('HomeOffice');
  72.             $criteria   = new TCriteria;
  73.             $criteria->add(new TFilter('centro_custo','=',$ccid));
  74.             $registros $repository->count($criteria);
  75.             $dados $repository->load($criteria);
  76.             self::carregaDataGrid($dados);            
  77.             TTransaction::close();
  78.         }
  79.         catch (Exception $e)
  80.         {
  81.             $msg 'Erro : ' $e->getCode() .  ' - Mensagem : ' $e->getMessage(); 
  82.             new TMessage('error',$msg);
  83.         }
  84.     }
  85.     
  86.     function carregaDataGrid($param)
  87.     {
  88.         try
  89.         {
  90.             $this->datagrid->clear();
  91.             $items = new stdClass;
  92.             foreach($param as $dados):
  93.                 $items->matricula $dados->matricula;
  94.                 $items->nome_funcionario $dados->nome_funcionario;
  95.                 $this->datagrid->addItem($items);
  96.             endforeach;
  97.         }
  98.         catch (Exception $e)
  99.         {
  100.            new TMessage('error',$e->getCode());
  101.         }
  102.     }
  103. }
  104. ?>

Pacotão Dominando o Adianti Framework 7
O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado! Versão 7.4


Dominando o Adianti 7 Quero me inscrever agora!

Comentários (9)


FC

lá na declaração da variavel está private não seria protected ?

protected $datagrid;
MG

Olá Felipe

Não funcionou.......

Dentro da class carrega normalmente, mas quando dentro de um método estático, nada mesmo mudando de private para protected.

O que pode ser?

Cara, estou amarrado com isso......

Mesmo assim obrigado.

Abraços
FC

Da um print_r no $items para nós analisarmos
MG

Olá Felipe, segue:

  1. <?php
  2. HomeOffice Object( [colaborador_home:HomeOffice:private] => [data:protected] => Array ( [centro_custo] => 00001000010011126 [matricula] => 1178059 [nome_funcionario] => JULIANA ALVES DOS SANTOS [cpf] => [situacao] => Trabalho [inicio_trabalho] => 0000-00-00 [nome_coordenador] => ERIKA ULIANI RODRIGUES [email_coordenador] => [status] => [data_atualizacao] => 2014-10-01 ) [attributes:protected] => Array ( [0] => matricula [1] => nome_funcionario [2] => cpf [3] => situacao [4] => inicio_trabalho [5] => nome_coordenador [6] => email_coordenador [7] => status [8] => data_atualizacao ))
  3. ?>
FC

Os dados estão vindo então o problema é no
Array que vai para o data grid

Passei por isso uma vez comparei o array com o outro tive que alterar mais ou menos assim

$items->matrícula = stdClass;

Não tenho certeza que seu caso é esse.

Amanhã senão conseguir tento montar um exemplo para ver o erro.
PD

People,

Nem tudo pode ser realizado de maneira estática no evento de saída de um campo.
Podemos enviar valores para um campo, mas não podemos recarregar uma datagrid ainda.
Na verdade, nunca foi objetivo do evento de saída de campo fazer esse tipo de coisa.
Mas podemos atingir objetivo similar. Acredito que você tenha um formulário acima
de sua datagrid. Basta acionar o evento de postagem sempre que sair do campo:
Para tal, experimente usar o método TApplication::postData():

  1. <?php
  2. TApplication::postData($formName$class$method NULL$parameters NULL);
  3. ?>


Ex:
  1. <?php
  2. TApplication::postData('form_interaction''FormInteractionsView''onView');
  3. ?>


Esse método força a postagem de um formulário.
Como ele gera uma ação Javascript, ele pode ser usado dentro do changeAction.

Att,
Pablo
MG

Oi Pablo, estive analisando o TCombo, não poderia existir um método estático de reload no TDataGrid igual ao TCombo?
Acho que isso resolveria....
Eu tentei fazer a alteração, utilizando como exemplo o código TCombo:reload(), mas sem sucesso!
Abraços
marcelo
MG

Pablo
Fiz a alteração implementando

  1. <?php
  2. TApplication::postData('form_interaction''FormInteractionsView''onView');
  3. ?>


E funcionou..... um único detalhe. No carregamento da página, onde deveria aparecer "Carregando", está aparecendo "undefined".
Sabe dizer por que?

Mas a grid agora é carregada através de outro método chamado "onCarregarGrid" no qual passo no 3º parâmetro.

Como faço para deixar a mensagem como "Carregando"?

Obrigado novamente pela ajuda!

Abraços
Marcelo
PD

Marcelo,

Entendi, é estranho pois a função __adianti_block_ui() que faz o bloqueio usa uma variável Javascipt chamada Adianti.waitMessage, que geralmente é definida na ação de um botão qualquer. Como geralmente para entrar no sistema já precisamos clicar em um botão para login, essa mensagem sempre é definida. Mas para evitar problemas, coloquei isso no início do application.js:
Adianti.waitMessage = 'Carregando';


Abraço,
Pablo