Lançado Adianti Framework 7.6!
Clique aqui para saber mais
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.     /**
  11.      * Class constructor
  12.      * Creates the page and the registration form
  13.      */
  14.     function __construct()
  15.     {
  16.         parent::__construct();
  17.         
  18.         // creates the form
  19.         $this->form = new TForm('form_teste');
  20.         
  21.         try
  22.         {
  23.             // TUIBuilder object
  24.             $ui = new TUIBuilder(500,500);
  25.             $ui->setController($this);
  26.             $ui->setForm($this->form);
  27.             
  28.             // reads the xml form
  29.             $ui->parseFile('app/forms/testesend.form.xml');
  30.             $unitario $ui->getWidget('unitario'); 
  31.             $unitario->setNumericMask(2,',','.',TRUE);                        
  32.             $quantidade $ui->getWidget('quantidade'); 
  33.             $quantidade->setNumericMask(2,',','.',TRUE);                        
  34.             $total $ui->getWidget('total'); 
  35.             $total->setNumericMask(2,',','.',TRUE);                        
  36.             $quantidade->setValue(0);
  37.             $unitario->setValue(0);
  38.             $total->setValue(0);
  39.             
  40.             $exit_action = new TAction(array($this'onExitAction'));
  41.             $quantidade->setExitAction($exit_action);           
  42.             
  43.             // get the interface widgets
  44.             $fields $ui->getWidgets();
  45.             
  46.             // add the TUIBuilder panel inside the TForm object
  47.             $this->form->add($ui);
  48.             // set form fields from interface fields
  49.             $this->form->setFields($ui->getFields());
  50.         }
  51.         catch (Exception $e)
  52.         {
  53.             new TMessage('error'$e->getMessage());
  54.         }
  55.         
  56.         // add the form to the page
  57.         parent::add($this->form);
  58.     }
  59.     public static function onExitAction($param)
  60.     {
  61.         $valor str_replace('.','',$param['unitario']);
  62.         $valor str_replace(',','.',$valor); 
  63.         $lunitario $valor;
  64.         $valor str_replace('.','',$param['quantidade']);
  65.         $valor str_replace(',','.',$valor); 
  66.         $lqtdade $valor
  67.         
  68.         $ltotal $lunitario*$lqtdade;
  69.         $ltotal number_format($ltotal,2,",",".");
  70.         $send = new StdClass;
  71.         $send->total $ltotal;
  72.         TForm::sendData('form_teste'$send);
  73.     }
  74.     
  75.    public static function OnTeste($param)
  76.    {
  77.        $send = new StdClass;
  78.        $send->unitario 500;
  79.        $send->quantidade 2;
  80.        $send->total 1000;      
  81.        TForm::sendData('form_teste'$send);   
  82.    }
  83. }
  84. ?>




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 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 (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.