Lançado Adianti Framework 7.6!
Clique aqui para saber mais
Manipular elementos de um formulário feito pelo Form Designer Pessoal, quando fazemos um formulário através do "Novo formulário de cadastro" fica claro a manipulação dos campos como data, por exemplo quando se quer dar um explode, ou CPF quando se quer usar um validador no controle. Porém quando se usa um Form Designer pra gerar o formulário, como se faz para manipular os elementos (campos dos formulário) se tudo esta vinculado ao XML ? Alguém ...
FA
Manipular elementos de um formulário feito pelo Form Designer  
Fechado
Pessoal, quando fazemos um formulário através do "Novo formulário de cadastro" fica claro a manipulação dos campos como data, por exemplo quando se quer dar um explode, ou CPF quando se quer usar um validador no controle. Porém quando se usa um Form Designer pra gerar o formulário, como se faz para manipular os elementos (campos dos formulário) se tudo esta vinculado ao XML ?

Alguém pode me esclarecer essa dúvida?

Curso completo Meu Negócio Pronto
Use para si, ou transforme em um negócio: Inclui aulas e códigos-fontes
Gestor de conteúdo (SITE) + Loja Virtual (E-Commerce) + Emissor de Notas para infoprodutos


Meu negócio pronto Quero me inscrever agora!

Comentários (7)


FP

Fica vinculado ao XML apenas o posicionamento dos campos pelo que entendi, o resto e da mesma forma dos demais Forms
FA

Fernando percebi que para manipular você tem que atribuir ao método $ui->getWidget, estou fazendo dessa maneira abaixo:

  1. <?php
  2. $limite $ui->getWidget('limite');
  3. $limite->setEditable(FALSE);
  4. ?>


Mas não esta funcionando, estou me referenciando pelo livro, seguindo a risca e não entendo pq não esta funcionando, aparentemente uma coisa muito simples.
Pois pelo que entendi, todos os objetos são chamados a partir do parseFile pelo getWidget, mas na prática não é o que esta ocorrendo.

Poderia me ajudar nesse quesito?
FV

Olá Fred, segue uma classe que uso na minha aplicação utilizando o Form Designer, ela ta bagunçada, mas espero que ajude.

  1. <?php
  2. class TabletsFormModal extends TWindow
  3. {
  4.     private $form;
  5.     private $datagrid;
  6.     private $pageNavigation;
  7.     private $loaded;
  8.     private $idEmpresa;
  9.     private $empresaDescricao;
  10.     
  11.     function __construct(){
  12.         parent::__construct();
  13.         parent::setSize(870382);
  14.         parent::setTitle('Formulário de Tablets');
  15.         $this->form = new TForm('tablets_form');
  16.         
  17.         try{
  18.             $ui = new TUIBuilder(700,700);
  19.             $ui->setController($this);
  20.             $ui->setForm($this->form);
  21.             
  22.             $ui->parseFile('app/forms/TabletsForm.form.xml');
  23.             $this->idEmpresa=$ui->getWidget('id_empresa');
  24.             $this->empresaDescricao=$ui->getWidget('empresaDesc');
  25.             $obj = new EmpresasModalDataGridTablet;
  26.             $action = new TAction(array($obj'onReload'));
  27.             $this->idEmpresa->setAction($action);
  28.             $this->idEmpresa->setMask('9!');
  29.             $this->idEmpresa->setMaxLength(5);
  30.             $fields $ui->getWidgets();
  31.             $id $fields['id'];
  32.             $id->style 'visibility: hidden;';
  33.             $tabletId $fields['tablet_id'];
  34.             $tabletId->id 'tablet';
  35.             $tabletId->style 'text-transform: uppercase';
  36.             $tabletId->setMaxLength(100);
  37.             $codigoVendedor $fields['codigo_vendedor'];
  38.             $codigoVendedor->setMask('9!');
  39.             $codigoVendedor->setMaxLength(11);
  40.             $nomeVendedor $fields['nome_vendedor'];
  41.             $nomeVendedor->style 'text-transform: uppercase';
  42.             $nomeVendedor->setMaxLength(60);
  43.             $autorizado $fields['autorizado'];
  44.             $ultimoPedido $fields['ultima_venda'];
  45.             $ultimoPedido->setMask('9!');
  46.             $ultimoPedido->setMaxLength(11);
  47.             $ultimaVisita $fields['ultima_visita'];
  48.             $ultimaVisita->setMask('9!');
  49.             $ultimaVisita->setMaxLength(11);
  50.             foreach ($fields as $name => $field){
  51.                 if ($field instanceof TDataGrid){
  52.                     $this->datagrid $field;
  53.                     $this->pageNavigation $this->datagrid->getPageNavigation();
  54.                 }
  55.             }
  56.             
  57.             $this->form->add($ui);
  58.             $this->form->setFields($ui->getFields());
  59.             }
  60.             catch (Exception $e){
  61.                 new TMessage('error'$e->getMessage());
  62.             }
  63.             parent::add($this->form);
  64.             TScript::create('$("#tablet").focus();
  65.                             $("input, select, text").keypress(function (e) {var code = null;
  66.                             code = (e.keyCode ? e.keyCode : e.which);                
  67.                             return (code == 13) ? false : true;
  68.                             });');
  69.             /*TScript::create('$(document).keypress(function (e) {
  70.                 if (e.which == 13) {
  71.                     $("#div_modal").modal("show");
  72.                 }
  73.             });');*/
  74.     }
  75.     public function carregarPagina($param){
  76.         TApplication::loadPage('TabletsFormModal');
  77.     }
  78.    
  79.     function onEdit($param)
  80.     {
  81.         try{
  82.             if (isset($param['key'])){
  83.                 $key=$param['key'];
  84.                 
  85.                 TTransaction::open('db_monitor');   
  86.                 $objeto = new TabletsRecord($key);
  87.                 $this->idEmpresa->setEditable(FALSE);
  88.                 $empresa $objeto->getEmpresa();
  89.                 $this->empresaDescricao->setValue($empresa->razao_social);
  90.                 
  91.                 $this->form->setData($objeto);
  92.                 TTransaction::close();          
  93.             } else {
  94.                 $this->form->clear();
  95.             }
  96.         }
  97.         catch (Exception $e){
  98.             new TMessage('error''<b>Error</b> ' $e->getMessage());
  99.             TTransaction::rollback();
  100.         }
  101.     }
  102.     function onSave() {
  103.         
  104.         TTransaction::open('db_monitor');
  105.         $objeto $this->form->getData('TabletsRecord');
  106.         $dados $objeto->toArray();
  107.         $obj implode(" , ",$dados); 
  108.         
  109.         $msg '';
  110.         $icone 'error';
  111.         if (empty ($dados['id_empresa'])){
  112.            $msg .= 'Informe o código da empresa.</br>';
  113.         }
  114.         if ((empty ($dados['tablet_id'])) || strlen(str_replace(' '''$dados['tablet_id'])) == 0){
  115.            $msg .= 'Informe o tablet.</br>';
  116.         }
  117.         if ((empty ($dados['nome_vendedor'])) || strlen(str_replace(' '''$dados['nome_vendedor'])) == 0){
  118.            $msg .= 'Informe o nome do vendedor.</br>';
  119.         }
  120.         if (empty ($dados['codigo_vendedor'])){
  121.            $msg .= 'Informe o Código do Vendedor.</br>';
  122.         }
  123.         try {
  124.             if ($msg == '') {
  125.                 $objeto->tablet_id strtoupper($objeto->tablet_id);
  126.                 $objeto->nome_vendedor strtoupper($objeto->nome_vendedor);
  127.                 //die(var_dump($objeto));
  128.                         
  129.                 if($objeto->id_empresa == null){
  130.                 $objeto->id_empresa TSession::getValue('id_empresa');
  131.                 }    
  132.             $objeto->store();
  133.             $this->form->setData($objeto);
  134.             TTransaction::close();
  135.             TApplication::gotoPage('EmpresasList''onReload');
  136.             } else {
  137.                 new TMessage($icone$msg);
  138.                 $this->form->setData($objeto); 
  139.             }
  140.         } catch (Exception $e) { 
  141.             new TMessage('error'$e->getMessage());
  142.             TTransaction::rollback();
  143.             $this->form->setData($objeto);   
  144.         }
  145.     }
  146.     function onBack(){
  147.         TApplication::gotoPage('EmpresasList');
  148.     }
  149. }
  150. ?>

PD

Fred,

O getWidget() se baseia no nome do objeto.
Você precisa ter definido esse nome na aba de propriedades.

Atenciosamente,
Pablo
FA

Olá Pablo,

Eu coloquei o nome do objeto na aba de propriedades no Form Designer e mesmo assim não funcionou. Abaixo deixo meu código com um exemplo simples do que quero tratar. Sei que é possível deixar o campo desabilitado no próprio Form Designer, mas como exemplo estou usando o médoto "setEditable" apenas para fins de conhecimento e estudo do framework. Veja abaixo como estou fazendo, há algo errado? Também usei a forma que o nosso amigo Felipe Vicente demonstrou mas não obtive sucesso, ou seja, o setEditable como outras funções não funciona.

  1. <?php
  1. <?php
  2. /**
  3.  * UnidadeForm Registration
  4.  * @author  <your name here>
  5.  */
  6. class UnidadeForm extends TPage
  7. {
  8.     private $form;
  9.     private $datagrid;
  10.     private $pageNavigation;
  11.     private $loaded;
  12.     
  13.     function __construct()
  14.     {
  15.         parent::__construct();
  16.         
  17.         
  18.         $this->form = new TForm('form_Unidade');
  19.         
  20.         try
  21.         {
  22.            
  23.             $ui = new TUIBuilder(500,500);
  24.             $ui->setController($this);
  25.             $ui->setForm($this->form);
  26.             
  27.            
  28.             $ui->parseFile('app/forms/CadastroUnidade.form.xml');
  29.             
  30.             
  31.             $fields $ui->getWidgets();
  32.             
  33.             //AQUI ESTA O EXEMPLO QUE QUERO MANIPULAR NO ELEMENTO (CAMPO) GERADO PELO FORM DESIGNER
  34.             $limite $ui->getWidget('limite');
  35.             $limite->setEditable(FALSE);
  36.             
  37.             
  38.             foreach ($fields as $name => $field)
  39.             {
  40.                 if ($field instanceof TDataGrid)
  41.                 {
  42.                     $this->datagrid $field;
  43.                     $this->pageNavigation $this->datagrid->getPageNavigation();
  44.                 }
  45.             }
  46.             
  47.             
  48.             $this->form->add($ui);
  49.             
  50.             $this->form->setFields($ui->getFields());
  51.         }
  52.         catch (Exception $e)
  53.         {
  54.             new TMessage('error'$e->getMessage());
  55.         }
  56.     
  57.         parent::add($this->form);
  58.     }
  59.     
  60.     /**
  61.      * method onSave()
  62.      * Executed whenever the user clicks at the save button
  63.      */
  64.     function onSave()
  65.     {
  66.         try
  67.         {
  68.             // open a transaction with database 'sample'
  69.             TTransaction::open('sample');
  70.             
  71.             // get the form data into an active record Unidade
  72.             $object $this->form->getData('Unidade');
  73.             
  74.             // form validation
  75.             $this->form->validate();
  76.             
  77.             // stores the object
  78.             $object->store();
  79.             
  80.             // set the data back to the form
  81.             $this->form->setData($object);
  82.             
  83.             // close the transaction
  84.             TTransaction::close();
  85.             
  86.             // shows the success message
  87.             new TMessage('info'TAdiantiCoreTranslator::translate('Record saved'));
  88.             // reload the listing
  89.         }
  90.         catch (Exception $e// in case of exception
  91.         {
  92.             // shows the exception error message
  93.             new TMessage('error''<b>Error</b> ' $e->getMessage());
  94.             // undo all pending operations
  95.             TTransaction::rollback();
  96.         }
  97.     }
  98.     /**
  99.      * method onDelete()
  100.      * executed whenever the user clicks at the delete button
  101.      * Ask if the user really wants to delete the record
  102.      */
  103.     function onDelete($param)
  104.     {
  105.         // get the parameter $key
  106.         $key=$param['key'];
  107.         
  108.         // define two actions
  109.         $action = new TAction(array($this'Delete'));
  110.         
  111.         // define the action parameters
  112.         $action->setParameter('key'$key);
  113.         
  114.         // shows a dialog to the user
  115.         new TQuestion(TAdiantiCoreTranslator::translate('Do you really want to delete ?'), $action);
  116.     }
  117.     
  118.     /**
  119.      * method Delete()
  120.      * Delete a record
  121.      */
  122.     function Delete($param)
  123.     {
  124.         try
  125.         {
  126.             // get the parameter $key
  127.             $key=$param['key'];
  128.             // open a transaction with database 'sample'
  129.             TTransaction::open('sample');
  130.             
  131.             // instantiates object Unidade
  132.             $object = new Unidade($key);
  133.             
  134.             // deletes the object from the database
  135.             $object->delete();
  136.             
  137.             // close the transaction
  138.             TTransaction::close();
  139.             
  140.             // reload the listing
  141.             $this->onReload();
  142.             // shows the success message
  143.             new TMessage('info'TAdiantiCoreTranslator::translate('Record deleted'));
  144.         }
  145.         catch (Exception $e// in case of exception
  146.         {
  147.             // shows the exception error message
  148.             new TMessage('error''<b>Error</b> ' $e->getMessage());
  149.             // undo all pending operations
  150.             TTransaction::rollback();
  151.         }
  152.     }
  153.     /**
  154.      * method onEdit()
  155.      * Executed whenever the user clicks at the edit button da datagrid
  156.      */
  157.     function onEdit($param)
  158.     {
  159.         try
  160.         {
  161.             if (isset($param['key']))
  162.             {
  163.                 // get the parameter $key
  164.                 $key=$param['key'];
  165.                 
  166.                 // open a transaction with database 'sample'
  167.                 TTransaction::open('sample');
  168.                 
  169.                 // instantiates object Unidade
  170.                 $object = new Unidade($key);
  171.                 
  172.                 // fill the form with the active record data
  173.                 $this->form->setData($object);
  174.                 
  175.                 // close the transaction
  176.                 TTransaction::close();
  177.             }
  178.             else
  179.             {
  180.                 $this->form->clear();
  181.             }
  182.         }
  183.         catch (Exception $e// in case of exception
  184.         {
  185.             // shows the exception error message
  186.             new TMessage('error''<b>Error</b> ' $e->getMessage());
  187.             
  188.             // undo all pending operations
  189.             TTransaction::rollback();
  190.         }
  191.     }
  192. }
  193. ?>
</your>
FA

Up! Helpe me...
FA

Pessoal, eu consegui identificar onde estava errando. É uma observação que passou despercebido e que é de grande valia para quem esta começando.
Sem mais delongas o problema é que quando estava construindo o formulário no Form Designer eu estada dando nome para o TEntry "limite" e o mesmo nome estava dando para o Label "limite" com isso gerava conflito e o Framework com toda lógica não fazia nada. Sendo assim, quando se for montar um formulário no Fomr Designer estou usando a estrutura:

Para campos TEntry [Nome = "nome"]
Para Label ["nomeLabel"]

Para uma melhor organização do código. Agra sim posso manipular como quiser os elementos gerados pelo Form Designer com liberdade.

Obrigado a todos pela paciência.

Atenciosamente;

Fred.