onSave() fica no Carregando e não salva no banco Boa tarde é a minha primeira experiencia com o adianti, e estou tendo um problema. criei um formulário tudo certinho com, a aplicação esta rodando normal, porem na hora que clico em salvar no formulário fica em loop no [ loading ] já tentei refazer todo o formulário, mudar conexão com o banco de dados e nada resolve. Estou usando mysql...
VE
onSave() fica no Carregando e não salva no banco  
Fechado
Boa tarde é a minha primeira experiencia com o adianti, e estou tendo um problema.

criei um formulário tudo certinho com, a aplicação esta rodando normal, porem na hora que clico em salvar no formulário fica em loop no [ loading ]
já tentei refazer todo o formulário, mudar conexão com o banco de dados e nada resolve.

Estou usando mysql

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


LC

Coloca o código fonte ai pra galera analisar.
VE

Este é o fonte do formulário, Desde já agradeço muito a ajuda


 
  1. <?php
  2. class DevolutionForm extends TPage
  3. {
  4. public function __construct()
  5. {
  6. parent::__construct();
  7. $this->form = new TQuickForm('form-devolution');
  8. $this->form->setFormTitle ('DevolutionForm');
  9. $this->form->class = 'tform';
  10. $this->form->style = 'width: 900px';
  11. $id = new TEntry('id');
  12. $apelido_cliente = new TEntry('apelido_cliente');
  13. $protudo = new TEntry('protudo');
  14. $valor = new TEntry('valor');
  15. $motivo = new TText('motivo');
  16. $rastreio_01 = new TEntry('rastreio_01');
  17. $frete_01 = new TEntry('frete_01');
  18. $status_01 = new TCombo('status_01');
  19. $rastreio_02 = new TEntry('rastreio_02');
  20. $frete_02 = new TEntry('frete_02');
  21. $status_02 = new TCombo('status_02');
  22. $reclamation = new TCombo('reclamation');
  23. $geral = new TCombo ('geral');
  24. $nome_cliente = new TEntry('nome_cliente');
  25. $cli_rua = new TEntry('cli_rua');
  26. $cli_numero = new TEntry('cli_numero');
  27. $cli_bairro = new TEntry('cli_bairro');
  28. $cli_cidade = new TEntry('cli_cidade');
  29. $cli_estado = new TEntry('cli_estado');
  30. $cli_cep = new TEntry('cli_cep');
  31. $id->setEditable(FALSE);
  32. $status_01->addItems( array ( 1=>'postado', 2=>'entregue', 3=>'estraviado', 4=>'aguardando retirar') );
  33. $status_02->addItems( array ( 1=>'postado', 2=> 'entregue', 3=> 'estraviado', 4=> 'aguardando retirar') );
  34. $reclamation->addItems( array ( 1=> 'sim', 2=> 'não') );
  35. $geral->addItems( array ( 1=> 'aberta', 2=> 'fechada') );
  36. $cli_cep->setMask('99-999-999');
  37. $id->setSize(100);
  38. $apelido_cliente->setSize(315);
  39. $protudo->setSize(400);
  40. $valor->setSize(100);
  41. $rastreio_01->setSize(250);
  42. $frete_01->setSize(100);
  43. $status_01->setSize(200);
  44. $rastreio_02->setSize(250);
  45. $frete_02->setSize(100);
  46. $status_02->setSize(200);
  47. $this->form->addQuickFields('ID', array($id, new TLabel('Apelido Do Cliente'), $apelido_cliente));
  48. $this->form->addQuickFields('Produto', array($protudo, new TLabel('Valor'), $valor));
  49. $this->form->addQuickField( 'Motivo', $motivo, 300);
  50. $motivo->setSize(550, 50);
  51. $this->form->addQuickFields('Rastreio 01', array($rastreio_01, new TLabel('Frte 01'), $frete_01, new TLabel('Status 01'), $status_01));
  52. $this->form->addQuickFields('Rastreio 02', array($rastreio_02, new TLabel('Frte 02'), $frete_02, new TLabel('Status 02'), $status_02));
  53. $this->form->addQuickField( 'Reclamação', $reclamation, 100);
  54. $this->form->addQuickField( 'Staus Geral', $geral, 100);
  55. $row = $this->form->addRow();
  56. $row->class = 'tformsection';
  57. $row->addCell( new TLabel('Dados Para Envio'))->colspan = 2;
  58. $this->form->addQuickField( 'Nome Do Cliente', $nome_cliente, 300);
  59. $this->form->addQuickField( 'Rua', $cli_rua , 300);
  60. $this->form->addQuickField( 'Numer', $cli_numero, 300);
  61. $this->form->addQuickField( 'Bairro', $cli_bairro, 300);
  62. $this->form->addQuickField( 'Cidade', $cli_cidade, 300);
  63. $this->form->addQuickField( 'Estado', $cli_estado, 300);
  64. $this->form->addQuickField( 'Cep', $cli_cep, 300);
  65. $save = new TAction( array($this, 'onSave') );
  66. $this->form->addQuickAction('salvar', $save, 'ico_save.png');
  67. parent::add($this->form);
  68. }
  69. public function onSave()
  70. {
  71. try
  72. {
  73. TTransaction::open('devolution');
  74. $object = $this->form->getData('Devolution');
  75. $object->store();
  76. $this->form->setData( $object );
  77. new TMessage('info', 'registro salvo com sucesso');
  78. TTransaction::close();
  79. }
  80. catch (Exception $e)
  81. {
  82. new TMssage('error', $e->getMessage());
  83. TTransaction::rollback();
  84. }
  85. }
  86. }
  87. ?>
AS

Vagner Eugenio tive um problema parecido. Cada campo do arquivo para serem gravados pelo FORM tem que estar definidos no modelo (MODEL). Você criou o model (TRecord) referente ao seu Form?

Se não criou basta gerá-lo e vai funcionar tudo direitinho, é tiro e queda - (a opção "new model" gera automático).

Espero que tenha ajudado.
VE

Bom dia Joaquin criei sim olha a estrutura [ ..config/develinion.ini | ..model/Devolution.class.php | ..control/Devolutions.class.php ] já tentei renomear os arquivos e nada

olha o model

 
  1. <?php
  2. class Devolution extends TRecord
  3. {
  4. const TABELENAME = 'devolutio';
  5. const PRIMARYKEY = 'id';
  6. const IDPOLICY = 'max';
  7. public function __construct ($id = NULL)
  8. {
  9. parent::__construct($id);
  10. parent::__addattribute('nome_cliente');
  11. parent::__addattribute('apelido_cliente');
  12. parent::__addattribute('protudo');
  13. parent::__addattribute('valor');
  14. parent::__addattribute('motivo');
  15. parent::__addattribute('rastreio_01');
  16. parent::__addattribute('frete_01');
  17. parent::__addattribute('rastreio_02');
  18. parent::__addattribute('frete_02');
  19. parent::__addattribute('reclamation');
  20. parent::__addattribute('cli_cep');
  21. parent::__addattribute('cli_estado');
  22. parent::__addattribute('cli_cidade');
  23. parent::__addattribute('cli_bairro');
  24. parent::__addattribute('cli_rua');
  25. parent::__addattribute('cli_numero');
  26. parent::__addattribute('status_01');
  27. parent::__addattribute('status_02');
  28. parent::__addattribute('geral');
  29. }
  30. }
  31. ?>

AS


Desculpe, também posso me considerar um iniciante, não saberia dizer porque não grava.

Obs:

..config/develinion.ini
TTransaction::open('devolution');

Vejo que o nome do arquivo ".ini" (develinion) está diferente no TTransaction ('devolution'), eles devem ter o mesmo nome. Foi distração na digitação no Forum...?




VE

desculpa rsrs foi erro na digitação [ teclado do celular ] rsrsrs sim os arquivos estão com o mesmo nome, exatamente como esta no form
VE

pensei que fosse alguma configuração na meu servidor, mais creio que não é, deve ser alguma coisa que montei errado, pois instalei o scriptcase na minha máquina para ver se era problema com o Sql, mais ele ta funcionando normal, então com certeza é alguma coisa que esta errada no fonte do sistema, já refis o código 2 vezes e criei um outro formulários mais ainda não consegui solucionar o problema. Todos os formulários que eu crio não salva.

quando clica em salvar, ele fica com um quadrado preto na tela escrito loading e não sai disso, já refiz o botão de salvar e nada.

AS

Você está usando o Studio (gerador de programas), ou está fazendo na unha?
AS

Acho que descobri o que está fazendo seu programa não gravar, vc não criou o objeto Devolution, veja o exemplo abaixo:

...
ttry
{
TTransaction::open('controleobra'); // open a transaction


$object = new Conta; // create an empty object --->>> FALTOU ESTE COMANDO AQUI

$data = $this->form->getData(); // get form data as array

$object->fromArray( (array) $data); // load the object with data

$object->store(); // save the object

// get the generated id
$data->id = $object->id;

$this->form->setData($data); // fill form data
TTransaction::close(); // close the transaction

new TMessage('info', TAdiantiCoreTranslator::translate('Record saved')); // success message

}
catch (Exception $e) // in case of exception
{
new TMessage('error', $e->getMessage()); // shows the exception error message
$this->form->setData( $this->form->getData() ); // keep form data
TTransaction::rollback(); // undo all pending operations
}
...
AS

Repetindo
...
 
  1. <?php
  2. ttry
  3. {
  4. TTransaction::open('controleobra'); // open a transaction
  5. $object = new Conta; // create an empty object --->>> FALTOU ESTE COMANDO AQUI
  6. $data = $this->form->getData(); // get form data as array
  7. $object->fromArray( (array) $data); // load the object with data
  8. $object->store(); // save the object
  9. // get the generated id
  10. $data->id = $object->id;
  11. $this->form->setData($data); // fill form data
  12. TTransaction::close(); // close the transaction
  13. new TMessage('info', TAdiantiCoreTranslator::translate('Record saved')); // success message
  14. }
  15. catch (Exception $e) // in case of exception
  16. {
  17. new TMessage('error', $e->getMessage()); // shows the exception error message
  18. $this->form->setData( $this->form->getData() ); // keep form data
  19. TTransaction::rollback(); // undo all pending operations
  20. }
  21. ?>

...
JC

Saudações Vagner

verifica a model const TABELENAME = 'devolutio'; não deveria ser 'devolution'
VE

Boa noite Jorge, esta correto o nome da tabela é este mesmo, e em todos os casos criei outra tabela e formulário e mesmo assim não sai do loading, não sei se o problema seja com o banco de dados, deve ser alguma configuração no botão de salvar, mais já tentei refazer tudo do zero e mesmo assim não chego a uma solução
AA

Vagner, seu config está configurado corretamente? se fica na tela de loading, já verificou se gerou algum erro js?
VE

Bom dia Anderson, sim o config esta correto, e já alterei criei um banco em sqlite e em mysql mais mesmo assim o erro persiste.
Para mim o erro esta nessa parte mais não consigo achar.

 
  1. <?php
  2. $save = new TAction( array($this, 'onSave') );
  3. $this->form->addQuickAction('salvar', $save, 'ico_save.png');
  4. parent::add($this->form);
  5. }
  6. public function onSave()
  7. {
  8. try
  9. {
  10. TTransaction::open('devolution');
  11. $object = $this->form->getData('Devolution');
  12. $object->store();
  13. $this->form->setData( $object );
  14. new TMessage('info', 'registro salvo com sucesso');
  15. TTransaction::close();
  16. }
  17. catch (Exception $e)
  18. {
  19. new TMssage('error', $e->getMessage());
  20. TTransaction::rollback();
  21. }
  22. }
  23. }
  24. ?>
AA

vc declarou o form? private $form;

class DevolutionForm extends TPage { private $form; // <<<<< public function __construct() {
VE

Anderson eu alterei o código e quando coloco

private $form; // <<<<<

o formulário não aparece,
AA

Você tem Telegram? se tiver entra nesse grupo. https://telegram.me/joinchat/CKWfqwbym-NiETKmKnAZgQ

é mais fácil de conversar.
VE

Anderson não tenho me add no whats 16 991428824 ou skype vadesingner

Grato
AA

Conseguimos uma solução.

De parent::__addattribute para parent::addAttribute
De TABELENAME para TABLENAME
De new TMssage('error', $e->getMessage()); para new TMessage('error', $e->getMessage());
LJ

apenas um detalhe:

3=>'estraviado' altere para 3=>'extraviado'

PD

Às vezes o erro que trava o "Carregando" nem é relacionado ao PHP, mas ao Javascript.
Ex: Se vcs subirem um arquivo em um host, mas alguns .js não tiverem permissão de leitura, dá erro, mas que só e visível com o Console JS [F12] aberto.

Att,