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


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

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