ExitAction em um Input - Problema com TForm::sendData Olá. Descrevendo o problema. Tenho um formulário onde deve-se entrar a quantidade e o valor unitário. Usando o ExitAction quando o usuário sai do campo valor unitário, o valor total é atualizado (pela multiplicação dos campos.... evidentemente). Tudo funciona bem EXCETO se: Supondo que eu já tenha gravado anteriormente as informações eu queira alterá-la. Daí através de uma f...
AN
ExitAction em um Input - Problema com TForm::sendData  
Olá.

Descrevendo o problema.

Tenho um formulário onde deve-se entrar a quantidade e o valor unitário. Usando o ExitAction quando o usuário sai do campo valor unitário, o valor total é atualizado (pela multiplicação dos campos.... evidentemente). Tudo funciona bem EXCETO se:

Supondo que eu já tenha gravado anteriormente as informações eu queira alterá-la. Daí através de uma funcao estatica eu recarrego os valores previamente cadastrados através de um TForm::sendData. Deste ponto em diante o programa se perde e não atualiza mais tanto o valor final quanto outros campos tais como SeekButton e afins.

Com a finalidade para que possam testar segue uma tela simples. Nela entre o valor unitario e a quantidade. Ao sair da quantidade o valor total será atualizado normalmente. Após clique no botão Testar Send (ela irá colocar o valor 500 e o valor 2 e tentará passar a multiplicação 1000 para o total e verá que não irá atualizar). Entre novamente o valor unitario e a quantidade. Verá que o ExitAcion não será executado. Se nessa tela tivesse seekbutton... idem. Segue um screenshot da tela do sistema e um exemplo simples do codigo para teste.

 
  1. <?php
  2. /**
  3. * testesend Registration
  4. * @author <your name here>
  5. */
  6. class testesend extends TPage
  7. {
  8. private $form;
  9. /**
  10. * Class constructor
  11. * Creates the page and the registration form
  12. */
  13. function __construct()
  14. {
  15. parent::__construct();
  16. // creates the form
  17. $this->form = new TForm('form_teste');
  18. try
  19. {
  20. // TUIBuilder object
  21. $ui = new TUIBuilder(500,500);
  22. $ui->setController($this);
  23. $ui->setForm($this->form);
  24. // reads the xml form
  25. $ui->parseFile('app/forms/testesend.form.xml');
  26. $unitario = $ui->getWidget('unitario');
  27. $unitario->setNumericMask(2,',','.',TRUE);
  28. $quantidade = $ui->getWidget('quantidade');
  29. $quantidade->setNumericMask(2,',','.',TRUE);
  30. $total = $ui->getWidget('total');
  31. $total->setNumericMask(2,',','.',TRUE);
  32. $quantidade->setValue(0);
  33. $unitario->setValue(0);
  34. $total->setValue(0);
  35. $exit_action = new TAction(array($this, 'onExitAction'));
  36. $quantidade->setExitAction($exit_action);
  37. // get the interface widgets
  38. $fields = $ui->getWidgets();
  39. // add the TUIBuilder panel inside the TForm object
  40. $this->form->add($ui);
  41. // set form fields from interface fields
  42. $this->form->setFields($ui->getFields());
  43. }
  44. catch (Exception $e)
  45. {
  46. new TMessage('error', $e->getMessage());
  47. }
  48. // add the form to the page
  49. parent::add($this->form);
  50. }
  51. public static function onExitAction($param)
  52. {
  53. $valor = str_replace('.','',$param['unitario']);
  54. $valor = str_replace(',','.',$valor);
  55. $lunitario = $valor;
  56. $valor = str_replace('.','',$param['quantidade']);
  57. $valor = str_replace(',','.',$valor);
  58. $lqtdade = $valor;
  59. $ltotal = $lunitario*$lqtdade;
  60. $ltotal = number_format($ltotal,2,",",".");
  61. $send = new StdClass;
  62. $send->total = $ltotal;
  63. TForm::sendData('form_teste', $send);
  64. }
  65. public static function OnTeste($param)
  66. {
  67. $send = new StdClass;
  68. $send->unitario = 500;
  69. $send->quantidade = 2;
  70. $send->total = 1000;
  71. TForm::sendData('form_teste', $send);
  72. }
  73. }
  74. ?>




ARQUIVO XML

<?xml version="1.0" encoding="UTF-8"?>
<form>
<tlabel id="0">
<class>TLabel</class>
<name>label1</name>
<x>105</x>
<y>15</y>
<color>#000000</color>
<size>10</size>
<style></style>
<value>Consistência de ExitAction</value>
</tlabel>
<tlabel id="1">
<class>TLabel</class>
<name>label2</name>
<x>20</x>
<y>60</y>
<color>#000000</color>
<size>10</size>
<style></style>
<value>Valor Unitário:</value>
</tlabel>
<tlabel id="2">
<class>TLabel</class>
<name>label3</name>
<x>310</x>
<y>60</y>
<color>#000000</color>
<size>10</size>
<style></style>
<value>Quantidade:</value>
</tlabel>
<tentry id="3">
<class>TEntry</class>
<name>unitario</name>
<x>115</x>
<y>55</y>
<value></value>
<mask></mask>
<width>160</width>
<maxlen>15</maxlen>
<editable>1</editable>
<tip></tip>
<required></required>
</tentry>
<tentry id="4">
<class>TEntry</class>
<name>quantidade</name>
<x>395</x>
<y>55</y>
<value></value>
<mask></mask>
<width>160</width>
<maxlen>0</maxlen>
<editable>1</editable>
<tip></tip>
<required></required>
</tentry>
<tlabel id="5">
<class>TLabel</class>
<name>label4</name>
<x>140</x>
<y>110</y>
<color>#000000</color>
<size>10</size>
<style></style>
<value>Valor Total:</value>
</tlabel>
<tentry id="6">
<class>TEntry</class>
<name>total</name>
<x>215</x>
<y>105</y>
<value></value>
<mask></mask>
<width>160</width>
<maxlen>15</maxlen>
<editable>1</editable>
<tip></tip>
<required></required>
</tentry>
<tbutton id="7">
<class>TButton</class>
<name>button1</name>
<x>435</x>
<y>105</y>
<value>Testar Send</value>
<icon>ico_question.png</icon>
<action>OnTeste</action>
<template></template>
</tbutton>
</form>

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


NR

Testei esse código que você forneceu e não tive problemas(Firefox e Chrome), atualizou certinho o total para 1000 após clicar no botão e modificando valor/quantidade continuou executando o exitAction.

Você está com os erros habilitados no php? O console não exibe nenhum erro javascript?
AN

Desculpe a demora em responder Nataniel.

Tive que fazer uma cirurgia do estômago e a recuperação é bem dificil. Qual SO voce usa aí. Se Linux qual a distribuição?

Vou enviar no seu email duas telas que gravei em um screen recorder te mostrando o que está acontecendo.

Grato.