Problema com Store() Boa Tarde! Estamos desenvolvendo um projeto usando o Adianti e deparamos com a seguinte situação: Em um cadastro temos alguns campos no formulário que são do Tipo TCheckGroup que estão setados para que se marcados recebam o valor "S", já no banco de dados que é PostGresSQL, os campos correspondentes aos campos TCheckGroup, tem um valor Default "N", após concluir o pr...
G
Problema com Store()  
Boa Tarde!
Estamos desenvolvendo um projeto usando o Adianti e deparamos com a seguinte situação:
Em um cadastro temos alguns campos no formulário que são do Tipo TCheckGroup que estão setados para que se marcados recebam o valor "S",
já no banco de dados que é PostGresSQL, os campos correspondentes aos campos TCheckGroup, tem um valor Default "N", após concluir o preenchimento
do formulário, quando executo a ação do onSave, os campos que estão marcados são salvos no banco de dados como "N", após alguns testes constatamos que:
1) Se dentro da função onSave setar o valor "S" para o campo, antes de dar $object->store() , ele funciona.
2) Se dentro da função onSave setar o valor que vem no formulário, antes do store(), ele salva com o valor Default"N"
3) Fazendo um var_dump(), no objeto que veio do formulário, os campos vem preenchidos de acordo com a seleção na hora de preencher o formulário
4) Fazendo um var_dump(), no objeto que esta sendo preenchido de forma manual segundo o item 2 dessa lista, ele vai preenchido com o valor do formulário normalmente.
Com isso constatamos que a função store() pega os valores Default que é pré-escrito no banco e atribui aos campos, subscrevendo os dados entrados pelo usuário.

Nessa situação, como devemos proceder?

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


HL

Guilherme, boa tarde!

Posta o código do onSave para uma melhor compreensão do que está acorrendo.

Um exemplo que você pode usar, é o formulário de usuário.

Onde após salvar o usuário é que são criados os vínculos com as unidades, e toda vez que alteramos o cadastro de usuário as informações de vínculos são excluídas e gravadas novamente.

G

Ola Hellton, segue abaixo o codigo do onSave

 
  1. <?php
  2. public function onSave( $param )
  3. {
  4. try
  5. {
  6. TTransaction::open('sgidb'); // open a transaction
  7. /**
  8. // Enable Debug logger for SQL operations inside the transaction
  9. TTransaction::setLogger(new TLoggerSTD); // standard output
  10. TTransaction::setLogger(new TLoggerTXT('log.txt')); // file
  11. **/
  12. $this->form->validate(); // validate form data
  13. $data = $this->form->getData(); // get form data as array
  14. $object = new CondPgtoHdr; // create an empty object
  15. $object->fromArray( (array) $data); // load the object with data
  16. echo"<pre>";
  17. var_dump($data->flag_pgto_parcelado);
  18. echo"<pre>";
  19. $object->flag_pgto_parcelado = $data->flag_pgto_parcelado;
  20. echo"<pre>";
  21. var_dump( $object->flag_pgto_parcelado );
  22. echo"<pre>";
  23. $object->store(); // save the object
  24. // get the generated met_pgto_id
  25. $data->met_pgto_id = $object->met_pgto_id;
  26. $this->form->setData($data); // fill form data
  27. TTransaction::close(); // close the transaction
  28. new TMessage('info', AdiantiCoreTranslator::translate('Record saved'));
  29. }
  30. catch (Exception $e) // in case of exception
  31. {
  32. new TMessage('error', $e->getMessage()); // shows the exception error message
  33. $this->form->setData( $this->form->getData() ); // keep form data
  34. TTransaction::rollback(); // undo all pending operations
  35. }
  36. }
  37. ?>

</pre></pre></pre></pre>
NR

Se você está usando TCheckGroup então "$data->flag_pgto_parcelado" deve estar retornando um array, pois o conceito de check é possibilitar a seleção de um ou mais itens.

Não é possível gravar um array diretamente. Você precisa tratar isso.
G

Eu tinha tratado também e mesmo assim não deu certo, então migrei pra opção de TRadioGroup e supriu minha necessidade. Obrigado