Lançado Adianti Framework 7.6!
Clique aqui para saber mais
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 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 (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.             /**
  9.             // Enable Debug logger for SQL operations inside the transaction
  10.             TTransaction::setLogger(new TLoggerSTD); // standard output
  11.             TTransaction::setLogger(new TLoggerTXT('log.txt')); // file
  12.             **/
  13.             
  14.             $this->form->validate(); // validate form data
  15.             $data $this->form->getData(); // get form data as array
  16.             
  17.             $object = new CondPgtoHdr;  // create an empty object
  18.             $object->fromArray( (array) $data); // load the object with data
  19.             echo"<pre>";
  20.             var_dump($data->flag_pgto_parcelado);
  21.             echo"<pre>";
  22.             $object->flag_pgto_parcelado $data->flag_pgto_parcelado;
  23.             echo"<pre>";
  24.             var_dump$object->flag_pgto_parcelado );
  25.             echo"<pre>";
  26.             $object->store(); // save the object
  27.             
  28.             // get the generated met_pgto_id
  29.             $data->met_pgto_id $object->met_pgto_id;
  30.             
  31.             $this->form->setData($data); // fill form data
  32.             TTransaction::close(); // close the transaction
  33.             
  34.             new TMessage('info'AdiantiCoreTranslator::translate('Record saved'));
  35.         }
  36.         catch (Exception $e// in case of exception
  37.         {
  38.             new TMessage('error'$e->getMessage()); // shows the exception error message
  39.             $this->form->setData$this->form->getData() ); // keep form data
  40.             TTransaction::rollback(); // undo all pending operations
  41.         }
  42.     }
  43. ?>

</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