Lançado Adianti Framework 8.1!
Clique aqui para saber mais
Problema com TMultiField Boa tarde, estou utilizando o TMultiField porém não estou conseguindo trazer os dados na hora de editar! Os mesmos são salvos normalmente no banco de dados, porém na hora de editar não estão sendo retornados. Vou enviar o print da tela de cadastro e da edição! E abaixo segue o código fonte da classe control e do model... Classe control: CategoriaFormView ...
RC
Problema com TMultiField  
Fechado
Boa tarde, estou utilizando o TMultiField porém não estou conseguindo trazer os dados na hora de editar! Os mesmos são salvos normalmente no banco de dados, porém na hora de editar não estão sendo retornados.

Vou enviar o print da tela de cadastro e da edição! E abaixo segue o código fonte da classe control e do model...

Classe control: CategoriaFormView
  1. <?php
  2. /**
  3.  * CategoriaFormView Control
  4.  * @author  <Ricelli M. Carvalho>
  5.  */
  6. class CategoriaFormView extends TPage {
  7.     protected $form
  8.     function __construct() {
  9.         parent::__construct();
  10.         $this->form = new TForm('form_Categoria');
  11.         $this->form->class 'tform';
  12.         
  13.         $table = new TTable;
  14.         $table->style 'width: 100%';
  15.         $table->addRowSet(new TLabel('Categorias'), '''''')->class 'tformtitle';
  16.       
  17.         $this->form->add($table);
  18.         $frame_programs = new TFrame(NULL280);
  19.         $frame_programs->setLegend('Subcategorias');
  20.         $frame_programs->style .= ';margin: 15px';
  21.         // create the form fields
  22.         1584 = new TEntry('id');
  23.         $categoria = new TEntry('categoria');
  24.         $multifield_programs = new TMultiField('programs');
  25.         $program_id = new  ">TDBSeekButton('program_id''permission''form_Categoria''Subcategoria''subcategoria''programs_id''programs_name');
  26.         $program_name = new TEntry('program_name');
  27.         $scroll = new TScroll;
  28.         $scroll->setSize(290230);
  29.         //$scroll->add( $groups );        
  30.         $frame_programs->add($multifield_programs);
  31.         // define the sizes
  32.         1584->setSize(100);
  33.         $categoria->setSize(200);
  34.         $multifield_programs->setHeight(140);
  35.         // outros
  36.         1584->setEditable(false);
  37.         $program_name->setEditable(false);
  38.         // validations
  39.         $categoria->addValidation('categoria', new TRequiredValidator);        
  40.         $program_id->setSize(50);
  41.         $program_name->setSize(300);
  42.         // configuracoes multifield
  43.         $multifield_programs->setClass('Subcategoria');
  44.         $multifield_programs->addField('id''ID'$program_id60);
  45.         $multifield_programs->addField('name''Subcategoria'$program_name380);
  46.         $multifield_programs->setOrientation('horizontal');
  47.         // add a row for the field id
  48.         $table->addRowSet(new TLabel('ID:'), 1584);
  49.         $table->addRowSet(new TLabel('Categoria' ': '), $categoria);
  50.         $row $table->addRow();
  51.         $cell $row->addCell($frame_programs);
  52.         $cell->colspan 2;
  53.         // create an action button (save)
  54.         $save_button = new TButton('save');
  55.         $save_button->setAction(new TAction(array($this'onSave')), _t('Save'));
  56.         $save_button->setImage('ico_save.png');
  57.         // create an new button (edit with no parameters)
  58.         $new_button = new TButton('new');
  59.         $new_button->setAction(new TAction(array($this'onEdit')), _t('New'));
  60.         $new_button->setImage('ico_new.png');
  61.         $list_button = new TButton('list');
  62.         $list_button->setAction(new TAction(array('CategoriaDataGrid''onReload')), _t('Back to the listing'));
  63.         $list_button->setImage('ico_datagrid.png');
  64.         // define the form fields
  65.         $this->form->setFields(array(1584$categoria$multifield_programs$save_button$new_button$list_button));
  66.         $buttons = new THBox;
  67.         $buttons->add($save_button);
  68.         $buttons->add($new_button);
  69.         $buttons->add($list_button);
  70.         $row $table->addRow();
  71.         $row->class 'tformaction';
  72.         $cell $row->addCell($buttons);
  73.         $cell->colspan 4;
  74.         $container = new TTable;
  75.         $container->style 'width: 80%';
  76.         $container->addRow()->addCell(new TXMLBreadCrumb('menu.xml''CategoriaFormView'));
  77.         $container->addRow()->addCell($this->form);
  78.         // add the form to the page
  79.         parent::add($container);
  80.     }
  81.     function onSave() {
  82.         try {            
  83.             TTransaction::open('permission');
  84.            
  85.             $object $this->form->getData('Categoria');
  86.             $this->form->validate();
  87.                                     
  88.             if ($object->id) {
  89.                 $object->respalteracao TSession::getValue('username');
  90.                 $object->dataalteracao date("Y-m-d");
  91.             } else {
  92.                 $object->datacadastro date("Y-m-d");
  93.                 $object->respcadastro TSession::getValue('username');
  94.                 $object->respalteracao TSession::getValue('username');
  95.                 $object->dataalteracao date("Y-m-d");
  96.             }
  97.             
  98.             if ($object->programs) {                
  99.                 foreach ($object->programs as $program) {
  100.                     //var_dump($program); die();
  101.                     $object->addEstoqueCategoriaSubcategoria($program);
  102.                 }
  103.             } else {
  104.                 var_dump("Não entrou!");
  105.                 die();
  106.             }
  107.             $object->store(); 
  108.             $this->form->setData($object);
  109.             TTransaction::close();
  110.             
  111.             new TMessage('info'TAdiantiCoreTranslator::translate('Record saved'));
  112.            
  113.         } catch (Exception $e) { 
  114.      
  115.             new TMessage('error''<b>Error</b> ' $e->getMessage());
  116.            
  117.             TTransaction::rollback();
  118.         }
  119.     }
  120.     function onEdit($param) {
  121.         try {
  122.             if (isset($param['key'])) {
  123.                 
  124.                 $key $param['key'];
  125.                 TTransaction::open('permission');
  126.           
  127.                 $object = new Categoria($key);
  128.                 $object->programs $object->getEstoqueCategoriaSubcategorias();
  129.                 
  130.                 $this->form->setData($object);
  131.                
  132.                 TTransaction::close();
  133.             } else {
  134.                 $this->form->clear();
  135.             }
  136.         } catch (Exception $e) { 
  137.            
  138.             new TMessage('error''<b>Error</b> ' $e->getMessage());
  139.           
  140.             TTransaction::rollback();
  141.         }
  142.     }
  143. }
  144. ?>


Model Categoria:
  1. <?php
  2. /**
  3.  * Categoria Active Record
  4.  * @author  <Ricelli Carvalho>
  5.  */
  6. class Categoria extends TRecord
  7. {
  8.     const TABLENAME 'estoque_categoria';
  9.     const PRIMARYKEY'id';
  10.     const IDPOLICY =  'max'// {max, serial}
  11.     
  12.     //private $subcategoria;
  13.     private $estoque_categoria_subcategorias = array();
  14.     //private $subcategorias = array();
  15.     
  16.     public function __construct(1584 NULL)
  17.     {
  18.         parent::__construct(1584);             
  19.         parent::addAttribute('respcadastro');
  20.         parent::addAttribute('datacadastro');
  21.         parent::addAttribute('respalteracao');
  22.         parent::addAttribute('dataalteracao');
  23.         parent::addAttribute('categoria');   
  24.        
  25.     }
  26.     
  27.     public function addEstoqueCategoriaSubcategoria(Subcategoria $object)
  28.     {
  29.         //var_dump($object);        die();
  30.         $this->estoque_categoria_subcategorias[] = $object;
  31.         //var_dump($this->estoque_categoria_subcategorias);     die();
  32.     }
  33.     
  34.     public function getEstoqueCategoriaSubcategorias()
  35.     {
  36.         return $this->estoque_categoria_subcategorias;
  37.     }
  38.     
  39.         /**
  40.      * Reset aggregates
  41.      */
  42.     public function clearParts()
  43.     {        
  44.         $this->estoque_categoria_subcategorias = array();
  45.     }
  46.     
  47.     
  48.     /**
  49.      * Load the object and its aggregates
  50.      * @param 1584 object ID
  51.      */
  52.     public function load(1584)
  53.     {
  54.         // load the related System_user_program objects
  55.         $repository = new TRepository('CategoriaSubcategoria');
  56.         $criteria = new TCriteria;
  57.         $criteria->add(new TFilter('estoque_categoria_id''='1584));
  58.         //$system_user_system_user_programs = $repository->load($criteria);
  59.         $estoque_categoria_estoque_categoria_subcategorias $repository->load($criteria);
  60.         if ($estoque_categoria_estoque_categoria_subcategorias)
  61.         {
  62.             foreach ($estoque_categoria_estoque_categoria_subcategorias as $estoque_categoria_estoque_categoria_subcategoria)
  63.             {
  64.                 $estoque_categoria_subcategoria = new Subcategoria$estoque_categoria_estoque_categoria_subcategoria->system_program_id );
  65.                 $this->addEstoqueCategoriaSubcategoria($estoque_categoria_subcategoria);
  66.             }
  67.         }
  68.     
  69.         // load the object itself
  70.         return parent::load(1584);
  71.     }
  72.     
  73.         /**
  74.      * Store the object and its aggregates
  75.      */
  76.     public function store()
  77.     {
  78.         // store the object itself
  79.         parent::store();
  80.         $criteria = new TCriteria;
  81.         $criteria->add(new TFilter('estoque_categoria_id''='$this->id));
  82.         $repository = new TRepository('CategoriaSubcategoria');
  83.         $repository->delete($criteria);
  84.         // store the related System_userSystem_user_program objects
  85.         if ($this->estoque_categoria_subcategorias)
  86.         {
  87.             foreach ($this->estoque_categoria_subcategorias as $estoque_categoria_subcategoria)
  88.             {
  89.                 $estoque_categoria_estoque_categoria_subcategoria = new CategoriaSubcategoria;
  90.                 $estoque_categoria_estoque_categoria_subcategoria->estoque_subcategoria_id $estoque_categoria_subcategoria->id;
  91.                 $estoque_categoria_estoque_categoria_subcategoria->estoque_categoria_id $this->id;
  92.                 $estoque_categoria_estoque_categoria_subcategoria->store();
  93.             }
  94.         }
  95.     }
  96.     
  97.         /**
  98.      * Delete the object and its aggregates
  99.      * @param 1584 object ID
  100.      */
  101.     public function delete(1584 NULL)
  102.     {
  103.         // delete the related System_userSystem_user_program objects
  104.         1584 = isset(1584) ? 1584 $this->id;
  105.         $repository = new TRepository('CategoriaSubcategoria');
  106.         $criteria = new TCriteria;
  107.         $criteria->add(new TFilter('estoque_categoria_id''='1584));
  108.         $repository->delete($criteria);
  109.         
  110.     
  111.         // delete the object itself
  112.         parent::delete(1584);
  113.     }
  114.     
  115.         /**
  116.      * Return the programs the user has permission to run
  117.      */
  118.     public function getPrograms()
  119.     {
  120.         $subcategorias = array();
  121.                       
  122.         foreach( $this->getEstoqueCategoriaSubcategorias() as $subc )
  123.         {
  124.             $subcategorias[$subc->subcategoria] = true;
  125.         }
  126.         
  127.         return $subcategorias;
  128.     }
  129. }
  130. ?>


Model CategoriaSubcategoria, que faz a relação entre a tabela Categoria e Subcategoria:
  1. <?php
  2. /**
  3.  * CategoriaSubcategoria Active Record
  4.  * @author  <Ricelli Carvalho>
  5.  */
  6. class CategoriaSubcategoria extends TRecord
  7. {
  8.     const TABLENAME 'estoque_categoria_subcategoria';
  9.     const PRIMARYKEY'id';
  10.     const IDPOLICY =  'max'// {max, serial}
  11.        
  12.     public function __construct(1584 NULL)
  13.     {
  14.         parent::__construct(1584);
  15.         parent::addAttribute('estoque_categoria_id');
  16.         parent::addAttribute('estoque_subcategoria_id');
  17.     }
  18. }
  19. ?>

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


FC

no onEdit de um var_dump($object->programs) abaixo dessa linha e veja se está vindo o resultado, senão vier os dados confira a função getEstoqueCategoriaSubcategorias o erro deve estar por ai.

$object->programs = $object->getEstoqueCategoriaSubcategorias();
RC

Testei com o var_dump mas só vem estas informações:
array (size=2) 0 => object(Subcategoria)[133] protected 'data' => null protected 'attributes' => array (size=5) 0 => string 'subcategoria' (length=12) 1 => string 'respcadastro' (length=12) 2 => string 'datacadastro' (length=12) 3 => string 'respalteracao' (length=13) 4 => string 'dataalteracao' (length=13) 1 => object(Subcategoria)[123] protected 'data' => null protected 'attributes' => array (size=5) 0 => string 'subcategoria' (length=12) 1 => string 'respcadastro' (length=12) 2 => string 'datacadastro' (length=12) 3 => string 'respalteracao' (length=13) 4 => string 'dataalteracao' (length=13)
PD

Os nomes dos campos da multifield (program_id, program_name) são diferentes no momento da criação dos objetos e no momento de adicionar eles na multifield. Além disso, não batem com os nomes dos atributos que vem do banco (subcategoria, respcadastro)...

Att,
RC

Olá Pablo, não consegui pegar bem sua idéia... De tanto bater aqui e não sair nada vou postar o meu projeto pra se puderem rodar o mesmo e tentar me ajudar a solucionar esse problema que já bato a 1 semana, rsrs...

Obs: estou usando o banco sqlite e o usuario: ricelli e a senha: ricelli

Link do projeto: https://drive.google.com/folderview?id=0B0fuS6eGJnDwb3VrbXpnclJPX1U&usp=sharing

RC

Socorro gente!!! Alguém me ajuda por favor resolver essa bronca! Ainda estou engatinhando no framework. Não estou conseguindo ver aonde está o erro. Já testei a função getEstoqueCategoriaSubcategorias mas ainda assim não carrega os dados!
FC

Oi Ricelli

Os nomes dos objetos estão diferente por isso está com erro.

Esses objetos estão retornando
0 => string 'subcategoria' (length=12)
1 => string 'respcadastro' (length=12)
2 => string 'datacadastro' (length=12)
3 => string 'respalteracao' (length=13)
4 => string 'dataalteracao' (length=13)

e vc tem os nomes dos campos do multifield diferentes
Ex:

$program_name = new TEntry('program_name');

Altere para
$program_name = new TEntry('respcadastro');


RC

Olá Felipe Cortez e Pablo, muito obrigado pelas informações que vocês passaram, pois consegui fazer com que os dados fossem carregados na datagrid do TMultiField na hora da edição!!!

Só que surgiu um outro probleminha que antes funcionava: Quando eu clico no TDBSeekButton pra trazer a subcategoria o mesmo só preenche o campo ID, o campo subcategoria não preenche...

Como seria a forma correta de utilização dele? Os parâmetros corretos.