não consigo TAction em fields dentro do TFieldList Olá pessoal, eu estou tendo um probleminha, se alguém já passou por isso ou tem alguma ideia de como poderia funcionar eu agradeço, a questão é eu tenho um formulário onde existem campos que serão gerados por uma tabela e pode haver N campos, no entanto esses campos devem possuir Taction uma vez que a pessoa preenche o valor de certo produto e eu quero colocar automaticamente o valor tota...
SM
não consigo TAction em fields dentro do TFieldList  
Olá pessoal, eu estou tendo um probleminha, se alguém já passou por isso ou tem alguma ideia de como poderia funcionar eu agradeço,
a questão é eu tenho um formulário onde existem campos que serão gerados por uma tabela e pode haver N campos, no entanto esses campos devem possuir Taction uma vez que a pessoa preenche o valor de certo produto e eu quero colocar automaticamente o valor total, e esses campos não são fixos por isso usei como base a tela do tutor FormMultiValuesView segue o link

https://www.adianti.com.br/framework_files/tutor/index.php?class=FormFieldListVi

a partir desse documento começei o meu
mas preciso adicionar as interações dinâminca, mas n sei como pegar um campo gerado...
ou eu teria que fazer isso com TScript ?

 
  1. <?php
  2. /**
  3. * FormMultiValuesView
  4. *
  5. * @version 1.0
  6. * @package samples
  7. * @subpackage tutor
  8. * @author Pablo Dall'Oglio
  9. * @copyright Copyright (c) 2006 Adianti Solutions Ltd. (http://www.adianti.com.br)
  10. * @license http://www.adianti.com.br/framework-license
  11. */
  12. class MessageProposalForm extends TWindow
  13. {
  14. private $form;
  15. private $fieldlist;
  16. /**
  17. * Constructor
  18. */
  19. public function __construct($param)
  20. {
  21. parent::__construct();
  22. // create form and table container
  23. $this->form = new TForm('my_form');
  24. $subject = new TEntry('subject');
  25. $subject->setSize('100%');
  26. $this->form->addField($subject);
  27. $this->form->add(new TLabel('Assunto: '));
  28. $this->form->add($subject);
  29. $subject->addValidation('Assunto', new TRequiredValidator);
  30. $message = new TText('message');
  31. $message->setSize('100%');
  32. $this->form->addField($message);
  33. $this->form->add(new TLabel('Mensagem:'));
  34. $this->form->add($message);
  35. $prazo = new TEntry('Prazo');
  36. $prazo->setSize('100%');
  37. $this->form->addField($prazo);
  38. $this->form->add(new TLabel('Prazo:'));
  39. $this->form->add($prazo);
  40. $id_produto = new TEntry('id[]');
  41. $id_produto->setSize('90%');
  42. $id_produto->setEditable(FALSE);
  43. $descricao = new TEntry('descricao[]');
  44. $descricao->setEditable(FALSE);
  45. $quantidade = new TEntry('quantidade[]');
  46. $quantidade->setMask('9!');
  47. $quantidade->setEditable(FALSE);
  48. $quantidade->setSize('90%');
  49. // $valor = new TEntry('valor');
  50. $valor = new TNumeric('valor[]', '2', ',', '.' );
  51. // set exit action for valor
  52. $exit_action = new TAction(array($this, 'onChangeAction'));
  53. $valor->setExitAction($exit_action);
  54. $valortotalitem = new TEntry('valortotalitem[]');
  55. $valortotalitem->setEditable(FALSE);
  56. $unidade_medida_id = new TDBCombo('unidade_medida_id[]', 'produto', 'UnidadeMedida', 'id', '{nome}','id asc' );
  57. $this->fieldlist = new TFieldList;
  58. $this->fieldlist->width = '100%';
  59. $this->fieldlist->name = 'my_field_list';
  60. $this->fieldlist->addField( '<b>ID</b>', $id_produto, ['width' => '20%'] );
  61. $this->fieldlist->addField( '<b>Descrição</b>', $descricao, ['width' => '20%'] );
  62. $this->fieldlist->addField( '<b>Quantidade</b>', $quantidade, ['width' => '20%'] );
  63. $this->fieldlist->addField( '<b>Unidade de medida</b>', $unidade_medida_id, ['width' => '20%'] );
  64. $this->fieldlist->addField( '<b>Valor Unitário</b>', $valor, ['width' => '20%'] );
  65. $this->fieldlist->addField( '<b>Valor Total</b>', $valortotalitem, ['width' => '20%'] );
  66. $this->fieldlist->addHeader();
  67. TTransaction::open('produto'); // open transaction
  68. // query criteria
  69. $criteria = new TCriteria;
  70. $criteria->add(new TFilter('id_message', '=', $param['id']));
  71. // load using repository
  72. $repository = new TRepository('Produto');
  73. $customers = $repository->load($criteria);
  74. $data = new stdClass;
  75. foreach ($customers as $customer)
  76. {
  77. $row = $this->fieldlist->addDetail( new stdClass );
  78. $row->del($row->get(count($row->getChildren())-1));
  79. $data->id[] = $customer->id;
  80. $data->descricao[] = $customer->descricao;
  81. $data->quantidade[] = $customer->quantidade;
  82. $data->unidade_medida_id[] = $customer->unidade_medida_id;
  83. TForm::sendData('my_form', $data);
  84. }
  85. TTransaction::close(); // close transaction
  86. // $this->fieldlist->addCloneAction();
  87. $hbox1 = new THBox;
  88. $hbox1->addRowSet( $this->fieldlist );
  89. $frame1 = new TFrame;
  90. $frame1->setLegend('Produtos necessários');
  91. $frame1->add($hbox1);
  92. $this->form->add($frame1);
  93. // create save button
  94. $save = TButton::create('save', array($this, 'onSave'), 'Salvar', 'fa:save blue');
  95. $clear = TButton::create('clear', array($this, 'onClear'), 'Limpar', 'fa:eraser red');
  96. $this->form->addField($save);
  97. $this->form->addField($clear);
  98. $panel = new TPanelGroup('Formulário de Proposta');
  99. $panel->add($this->form);
  100. $panel->addFooter(THBox::pack($save, $clear));
  101. // wrap the page content using vertical box
  102. $vbox = new TVBox;
  103. $vbox->style = 'width: 100%';
  104. // $vbox->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
  105. $vbox->add($panel);
  106. parent::add($vbox);
  107. }
  108. public static function onSave($param)
  109. {
  110. print_r($param);
  111. }
  112. public static function onChangeAction($param)
  113. {
  114. print_r($param);
  115. }
  116. }
  117. ?>




Na minha tela da o seguinte erro!
 
  1. <?php
  2. Você deve passar o Adianti\Widget\Form\TEntry (valor[]) como parâmetro para TForm::setFields()
  3. File: /lib/adianti/widget/base/TElement.php : 343
  4. Adianti\Widget\Form\TEntry->show()
  5. File: /lib/adianti/widget/base/TElement.php : 343
  6. Adianti\Widget\Base\TElement->show()
  7. File: /lib/adianti/widget/base/TElement.php : 343
  8. Adianti\Widget\Base\TElement->show()
  9. File: /lib/adianti/widget/base/TElement.php : 343
  10. Adianti\Widget\Base\TElement->show()
  11. File: /lib/adianti/widget/form/TFieldList.php : 317
  12. Adianti\Widget\Base\TElement->show()
  13. File: /lib/adianti/widget/base/TElement.php : 343
  14. Adianti\Widget\Form\TFieldList->show()
  15. File: /lib/adianti/widget/base/TElement.php : 343
  16. Adianti\Widget\Base\TElement->show()
  17. File: /lib/adianti/widget/base/TElement.php : 343
  18. Adianti\Widget\Base\TElement->show()
  19. File: /lib/adianti/widget/base/TElement.php : 343
  20. Adianti\Widget\Base\TElement->show()
  21. File: /lib/adianti/widget/form/TForm.php : 509
  22. Adianti\Widget\Base\TElement->show()
  23. File: /lib/adianti/widget/base/TElement.php : 343
  24. Adianti\Widget\Form\TForm->show()
  25. File: /lib/adianti/widget/base/TElement.php : 343
  26. Adianti\Widget\Base\TElement->show()
  27. File: /lib/adianti/widget/base/TElement.php : 343
  28. Adianti\Widget\Base\TElement->show()
  29. File: /lib/adianti/widget/base/TElement.php : 343
  30. Adianti\Widget\Base\TElement->show()
  31. File: /lib/adianti/widget/base/TElement.php : 343
  32. Adianti\Widget\Base\TElement->show()
  33. File: /lib/adianti/widget/container/TJQueryDialog.php : 224
  34. Adianti\Widget\Base\TElement->show()
  35. File: /lib/adianti/widget/base/TElement.php : 343
  36. Adianti\Widget\Container\TJQueryDialog->show()
  37. File: /lib/adianti/control/TPage.php : 207
  38. Adianti\Widget\Base\TElement->show()
  39. File: /lib/adianti/core/AdiantiCoreApplication.php : 64
  40. Adianti\Control\TPage->show(MessageProposalForm,onView,6)
  41. File: /engine.php : 23
  42. Adianti\Core\AdiantiCoreApplication::run(1)
  43. File: /engine.php : 64
  44. TApplication::run(1)
  45. ?>

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


NR

A mensagem de erro aparece pois você não adicionou o campo ao form:
 
  1. <?php
  2. $this->form->addField($valor);
  3. ?>

No link abaixo tem um exemplo usando TFieldList que preenche outros campos após onchange:
www.adianti.com.br/framework_files/tutor/index.php?class=SaleMultiVa