Conheça as melhorias da versão 8.0, 8.1, 8.2!
Clique aqui para saber mais
Salvar Dados - TMultifield Pessoal, Estou com dificuldade para salvar os dados de uma TMultifield, nos exemplos que vi, todos usam composições, mas no meu caso tenho uma classe apenas. E não estou conseguindo salvar. Basicamente tenho 1 id de viagem e vários IDs de reembolsos, de tipos diferentes, da maneira que fiz, ele só salva o ultimo registro da TMultifield. Como posso fazer? Minha classe Reembolso: ...
FW
Salvar Dados - TMultifield  
Fechado
Pessoal,

Estou com dificuldade para salvar os dados de uma TMultifield, nos exemplos que vi, todos usam composições, mas no meu caso tenho uma classe apenas. E não estou conseguindo salvar.
Basicamente tenho 1 id de viagem e vários IDs de reembolsos, de tipos diferentes, da maneira que fiz, ele só salva o ultimo registro da TMultifield.

Como posso fazer?

Minha classe Reembolso:
 
  1. <?php
  2. class Reembolso extends TRecord
  3. {
  4. const TABLENAME = 'tb_reembolso';
  5. const PRIMARYKEY= 'id_reembolso';
  6. const IDPOLICY = 'max'; // {max, serial}
  7. /**
  8. * Constructor method
  9. */
  10. public function __construct(2540_reembolso = NULL)
  11. {
  12. parent::__construct(2540_reembolso);
  13. parent::addAttribute('id_viagem');
  14. parent::addAttribute('id_tipo_reembolso');
  15. parent::addAttribute('valor');
  16. parent::addAttribute('quem');
  17. parent::addAttribute('quando');
  18. }
  19. }
  20. ?>

Meu método para salvar:
 
  1. <?php
  2. public function onSave($param)
  3. {
  4. try
  5. {
  6. TTransaction::open('gestao_viagens');
  7. $object = $this->form->getData('Reembolso');
  8. 2540_viagem = $object->id_viagem;
  9. $this->form->validate();
  10. // put the data back to the form
  11. //$this->form->setData($data);
  12. $object->id_viagem = 2540_viagem;
  13. $object->quem = TSession::getValue('id_user');
  14. $object->quando = date("Y-m-d H:i:s");
  15. if ($object->reembolso)
  16. {
  17. foreach ($object->reembolso as $reembolsos)
  18. {
  19. $object->id_tipo_reembolso = $reembolsos->tipo_reembolso;
  20. $object->valor = $reembolsos->valor;
  21. $object->store;
  22. }
  23. }
  24. //$object->store;
  25. TTransaction::close();
  26. $this->form->setData($object);
  27. new TMessage('info', TAdiantiCoreTranslator::translate('Record saved'));
  28. }
  29. catch (Exception $e)
  30. {
  31. new TMessage('error', '<b>Error:</b> ' . $e->getMessage());
  32. TTransaction::rollback();
  33. }
  34. }
  35. ?>

Obrigado.

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)


FW

Pessoal,

Descobri o que ocorre, fiz uma alteração no fonte, acho que está mais correto.

Ele pega o primeiro registro e faz um INSERT, e para os demais registros da MultiField, ele gera UPDATES, a questão agora é como evitar isto?? E realizar apenas inserts???

 
  1. <?php
  2. public function onSave($param)
  3. {
  4. try
  5. {
  6. TTransaction::open('gestao_viagens');
  7. $conn = TTransaction::get();
  8. $result = $conn->query('PRAGMA foreign_keys = ON');
  9. $data = $this->form->getData();
  10. $object = new Reembolso;
  11. $id_viagem = $data->id_viagem;
  12. $this->form->validate();
  13. // put the data back to the form
  14. //$this->form->setData($data);
  15. $object->id_viagem = $id_viagem;
  16. $object->quem = TSession::getValue('id_user');
  17. $object->quando = date("Y-m-d H:i:s");
  18. if ($data->reembolso)
  19. {
  20. foreach ($data->reembolso as $reembolsos)
  21. {
  22. //$object->setIdTipoRee($reembolsos->id_tipo_reembolso);
  23. //$object->setValor($reembolsos->valor);
  24. $object->id_tipo_reembolso = $reembolsos->id_tipo_reembolso;
  25. $object->valor = $reembolsos->valor;
  26. echo '<br>';
  27. var_dump ($object);
  28. echo '<br>';
  29. $object->store();
  30. }
  31. }
  32. TTransaction::close();
  33. $this->form->setData($object);
  34. new TMessage('info', TAdiantiCoreTranslator::translate('Record saved'));
  35. }
  36. catch (Exception $e)
  37. {
  38. new TMessage('error', '<b>Error:</b> ' . $e->getMessage());
  39. TTransaction::rollback();
  40. }
  41. }
  42. ?>

FW

Adicionei a instancia do objeto dentro do FOR, e inseriu registro a registro.
Não sei se é a maneira mais correta para isto, mas funcionou.