Lançado Adianti Framework 7.6!
Clique aqui para saber mais
Valores default em TDBCombo e TDBSeekButton Olá amigos, Estou começando agora com o Adianti e me deparei com dois pequenos probleminhas que não consegui descobrir como consertar. Tenho em meu form um TDBCombo que ao entrar no mode edição não vem com o valor salvo pré-selecionado. Em relação TDBSeekButton, ao entrar no modo edição, apenas o campo com o código vem preenchido, mas o nome não vem. Para ficar mais claro, seg...
FM
Valores default em TDBCombo e TDBSeekButton  
Fechado
Olá amigos,

Estou começando agora com o Adianti e me deparei com dois pequenos probleminhas que não consegui descobrir como consertar.
Tenho em meu form um TDBCombo que ao entrar no mode edição não vem com o valor salvo pré-selecionado.
Em relação TDBSeekButton, ao entrar no modo edição, apenas o campo com o código vem preenchido, mas o nome não vem.

Para ficar mais claro, segue abaixo o código do formulário:

  1. <?php
  2. /**
  3.  * SipeDocumentosForm Form
  4.  * @author  <your name here>
  5.  */
  6. class SipeDocumentosForm extends TPage
  7. {
  8.     protected $form// form
  9.     
  10.     /**
  11.      * Form constructor
  12.      * @param $param Request
  13.      */
  14.     public function __construct$param )
  15.     {
  16.         parent::__construct();
  17.         
  18.         // creates the form
  19.         $this->form = new TQuickForm('form_SipeDocumentos');
  20.         $this->form->class 'tform'// change CSS class
  21.         $this->form = new BootstrapFormWrapper($this->form);
  22.         $this->form->style 'display: table;width:100%'// change style
  23.         
  24.         // define the form title
  25.         $this->form->setFormTitle('SipeDocumentos');
  26.         
  27.         $criteria = new TCriteria;
  28.         $criteria->add(new TFilter('secdep_cliente''='TSession::getValue('client')));
  29.         // create the form fields
  30.         $doc_id = new TEntry('doc_id');
  31.         $doc_tipo_documento = new TCombo('doc_tipo_documento');
  32.         $doc_numero = new TEntry('doc_numero');
  33.         $doc_orgao_emissor = new TEntry('doc_orgao_emissor');
  34.         $doc_datareceb = new TDate('doc_datareceb');
  35.         $doc_recebido_por = new TEntry('doc_recebido_por');
  36.         $doc_encaminhado_para = new TEntry('doc_encaminhado_para');
  37.         $doc_recebido = new TCombo('doc_recebido');
  38.         //este combo abaixo, ao editar os dados do formulário aparece em branco e não com o valor salvo no banco já por default.
  39.         $doc_destino = new TDBCombo('doc_destino_id','sipe','SipeSecDepto','secdep_id','secdep_secretaria','secdep_secretaria',$criteria);
  40.         $doc_entregue_por = new  ">TDBSeekButton('doc_entregue_por''sipe''form_SipeDocumentos''SipeFuncionarios''func_NOME''doc_entregue_por''doc_entregue_por_name');
  41.        
  42.         //neste campo abaixo deveria aparacer o nome do funcionário quando entra no form para editar os dados.  
  43.         $doc_entregue_por_name  = new TEntry('doc_entregue_por_name');
  44.         $doc_historico = new TText('doc_historico');
  45.         $tp_doc = array('Oficio'=>'Oficio',
  46.                 'Requerimento'=>'Requerimento',
  47.                 'Comunicacao Interna'=>'Comunicacao Interna',
  48.                 'Declaracao'=>'Declaracao',
  49.                 'Outros'=>'Outros');
  50.         $doc_tipo_documento->additems($tp_doc);
  51.         
  52.         $doc_recebido->additems(array('1'=>'Sim','0'=>'Não'));
  53.                 
  54.         $doc_entregue_por_name->setEditable(false); 
  55.         $doc_entregue_por_name->setSize(400);       
  56.         
  57.          $doc_datareceb->setMask('dd/mm/yyyy'); 
  58.                  
  59.         // add the fields
  60.         $this->form->addQuickField('ID'$doc_id,  100 );
  61.         $this->form->addQuickField('Tipo Documento'$doc_tipo_documento,  200 , new TRequiredValidator);
  62.         $this->form->addQuickField('Número'$doc_numero,  200 , new TRequiredValidator);
  63.         $this->form->addQuickField('Orgão Emissor'$doc_orgao_emissor,  400 , new TRequiredValidator);
  64.         $this->form->addQuickField('Data Receb.'$doc_datareceb,  100 , new TRequiredValidator);
  65.         $this->form->addQuickField('Recebido Por'$doc_recebido_por,  400 , new TRequiredValidator);
  66.         $this->form->addQuickField('Encaminhado Para'$doc_encaminhado_para,  400 , new TRequiredValidator);
  67.         $this->form->addQuickField('Recebido'$doc_recebido,  100 , new TRequiredValidator);
  68.         $this->form->addQuickField('Destino'$doc_destino,  400 , new TRequiredValidator);
  69.         $this->form->addQuickField('Entregue Por'$doc_entregue_por,  100 , new TRequiredValidator);
  70.         $this->form->addQuickField('Nome Entregue Por'$doc_entregue_por_name,  400);
  71.         $this->form->addQuickField('Histórico'$doc_historico,  400 , new TRequiredValidator);
  72.         $doc_recebido->setValue(0);
  73.         $doc_historico->setSize(400,200);
  74.         if (!empty($doc_id))
  75.         {
  76.             $doc_id->setEditable(FALSE);
  77.         }
  78.         
  79.         /** samples
  80.          $this->form->addQuickFields('Date', array($date1, new TLabel('to'), $date2)); // side by side fields
  81.          $fieldX->addValidation( 'Field X', new TRequiredValidator ); // add validation
  82.          $fieldX->setSize( 100, 40 ); // set size
  83.          **/
  84.          
  85.         // create the form actions
  86.         $this->form->addQuickAction(_t('Save'), new TAction(array($this'onSave')), 'fa:floppy-o');
  87.         $this->form->addQuickAction(_t('New'),  new TAction(array($this'onClear')), 'bs:plus-sign green');
  88.         $this->form->addQuickAction(_t('Back to the listing'),  new TAction(array('SipeDocumentosList''onReload')), 'fa:angle-left blue');
  89.         
  90.         
  91.         // vertical box container
  92.         $container = new TVBox;
  93.         $container->style 'width: 90%';
  94.         // $container->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
  95.         $container->add(TPanelGroup::pack('Title'$this->form));
  96.         
  97.         parent::add($container);
  98.     }
  99.     /**
  100.      * Save form data
  101.      * @param $param Request
  102.      */
  103.     public function onSave$param )
  104.     {
  105.         try
  106.         {
  107.             TTransaction::open('sipe'); // open a transaction
  108.             
  109.             /**
  110.             // Enable Debug logger for SQL operations inside the transaction
  111.             TTransaction::setLogger(new TLoggerSTD); // standard output
  112.             TTransaction::setLogger(new TLoggerTXT('log.txt')); // file
  113.             **/
  114.             
  115.             $this->form->validate(); // validate form data
  116.             
  117.             $object = new SipeDocumentos;  // create an empty object
  118.             $data $this->form->getData(); // get form data as array
  119.             $object->fromArray( (array) $data); // load the object with data
  120.             
  121.             
  122.             $object->doc_datareceb TDate::date2us($object->doc_datareceb);
  123.             
  124.             $object->store(); // save the object
  125.             
  126.             // get the generated doc_id
  127.             $data->doc_id $object->doc_id;
  128.             
  129.             $this->form->setData($data); // fill form data
  130.             TTransaction::close(); // close the transaction
  131.             
  132.             new TMessage('info'TAdiantiCoreTranslator::translate('Record saved'));
  133.         }
  134.         catch (Exception $e// in case of exception
  135.         {
  136.             new TMessage('error'$e->getMessage()); // shows the exception error message
  137.             $this->form->setData$this->form->getData() ); // keep form data
  138.             TTransaction::rollback(); // undo all pending operations
  139.         }
  140.     }
  141.     
  142.     /**
  143.      * Clear form data
  144.      * @param $param Request
  145.      */
  146.     public function onClear$param )
  147.     {
  148.         $this->form->clear();
  149.     }
  150.     
  151.     /**
  152.      * Load object to form data
  153.      * @param $param Request
  154.      */
  155.     public function onEdit$param )
  156.     {
  157.         try
  158.         {
  159.             if (isset($param['key']))
  160.             {
  161.                 $key $param['key'];  // get the parameter $key
  162.                 TTransaction::open('sipe'); // open a transaction
  163.                 $object = new SipeDocumentos($key); // instantiates the Active Record
  164.                 
  165.                 $object->doc_datareceb TDate::date2br($object->doc_datareceb); 
  166.                 
  167.                 $this->form->setData($object); // fill the form
  168.                 TTransaction::close(); // close the transaction
  169.             }
  170.             else
  171.             {
  172.                 $this->form->clear();
  173.             }
  174.         }
  175.         catch (Exception $e// in case of exception
  176.         {
  177.             new TMessage('error'$e->getMessage()); // shows the exception error message
  178.             TTransaction::rollback(); // undo all pending operations
  179.         }
  180.     }
  181. }
  182. ?>


desde já agradeço a quem puder dar uma luz.

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


RC

Olá Fabiano.

Vou te dar uma luz quanto a questão do TDBSeekButton!

Para que o campo nome seja carregado com o seu devido nome você vai ter que criar no seu model um método com o nome get_algumacoisaporexemplo.

Abaixo segue um exemplo que fiz para carregar o nome do fornecedor em um TDBSeekButton!
  1. <?php
  2. class Entrada extends TRecord
  3. {
  4.     const TABLENAME 'estoque_entradas';
  5.     const PRIMARYKEY'id';
  6.     const IDPOLICY =  'max'// {max, serial}
  7.     
  8.        
  9.     private $fornecedor;
  10.    
  11.     
  12.     /**
  13.      * metódo Construtor
  14.      */
  15.     public function __construct($id NULL)
  16.     {
  17.         parent::__construct($id);                
  18.         parent::addAttribute('respcadastro');
  19.         parent::addAttribute('datacadastro');
  20.         parent::addAttribute('respalteracao');
  21.         parent::addAttribute('dataalteracao');
  22.         parent::addAttribute('dataentrada');
  23.         parent::addAttribute('fornecedor_id');
  24.         parent::addAttribute('numeronotafiscal');
  25.         parent::addAttribute('datanotafiscal');
  26.         parent::addAttribute('identificador');
  27.         parent::addAttribute('observacoes');
  28.     }
  29.     
  30.       /**
  31.      * Retorna o nome do fornecedor     
  32.      */
  33.     public function get_fornecedor_name()
  34.     {
  35.         if (empty($this->fornecedor))
  36.         {
  37.             //$this->fornecedor_id se refere a  parent::addAttribute('fornecedor_id');
  38.             $this->fornecedor = new Fornecedor($this->fornecedor_id); 
  39.         }
  40.         
  41.         return $this->fornecedor->nomerazaosocial;
  42.     }
  43.        
  44. }
  45. ?>


Depois de ter criado este método você deve alterar esta linha:
  1. <?php
  2. $doc_entregue_por_name  = new TEntry('doc_entregue_por_name');
  3. ?>

Por esta:
  1. <?php
  2. $doc_entregue_por_name  = new TEntry('algumacoisaporexemplo');
  3. ?>


Repare que, algumacoisaporexemplo se refere ao nome que você atribui depois do get_ lá no seu model!

Espero ter lhe ajudado!
FM

Muito obrigado pela ajuda Ricelli.
Segui as suas dicas e funcionou perfeitamente. Valeu!!!!!
RC

Ok Fabiano.

Agora é tentar achar uma solução para o TDBCombo mão é mesmo!
FM

Consegui resolver a questão do TDBCombo. na verdade foi erro meu. Eu mudei o nome do campo na tabela e esqueci de atualizar no Control, rsrsrs
Agora está td perfeito.