RC
Guardar data da alteração
Fechado
Pessoal, eu gostaria de pedir uma solução de vocês.
Criei uma tabela onde tem os seguintes campos:
Criei o método onSave na classe do formulário, onde salvo tais informações. Até aqui tudo bem.
O problema está quando eu clico na grid pra editar um registro! Quando eu vou editar eu não quero que os campos respcadastro e datacadastro sejam alterados!, somente o resalteração e dataalteracao
Tentei fazer assim, criando o método onEdit, mas não deu certo. Quando eu troco de usuário e vou editar um registro, ele altera todos os quatro campos
respcadastro,
datacadastro,
respalteracao,
dataalteracao
Criei uma tabela onde tem os seguintes campos:
CREATE TABLE permission.estoque_unidade(
id int PRIMARY KEY NOT NULL,
respcadastro varchar(50) NOT NULL,
datacadastro date NOT NULL,
respalteracao varchar(50) NOT NULL,
dataalteracao date NOT NULL,
unidade varchar(20) NOT NULL,
descricao varchar(40) NOT NULL,
casasdecimais int,
fator decimal
);
Criei o método onSave na classe do formulário, onde salvo tais informações. Até aqui tudo bem.
- <?php
- function onSave() {
- try {
- TTransaction::open('permission');
- $object = $this->form->getData('UnidadeProduto');
- $object->datacadastro = date("Y-m-d");
- $object->respcadastro = TSession::getValue('username');
- $object->respalteracao = TSession::getValue('username');
- $object->dataalteracao = date("Y-m-d");
- $object->store();
- $this->form->setData($object);
- TTransaction::close();
- new TMessage('info', TAdiantiCoreTranslator::translate('Record saved'));
- } catch (Exception $e) {
- new TMessage('error', '<b>Error</b> ' . $e->getMessage());
- TTransaction::rollback();
- }
- }
- ?>
O problema está quando eu clico na grid pra editar um registro! Quando eu vou editar eu não quero que os campos respcadastro e datacadastro sejam alterados!, somente o resalteração e dataalteracao
Tentei fazer assim, criando o método onEdit, mas não deu certo. Quando eu troco de usuário e vou editar um registro, ele altera todos os quatro campos
respcadastro,
datacadastro,
respalteracao,
dataalteracao
- <?php
- function onEdit($param) {
- try {
- if (isset($param['key'])) {
- $key = $param['key'];
- TTransaction::open('permission');
- $object = new UnidadeProduto($key);
- $object->respalteracao = TSession::getValue('username');
- $object->dataalteracao = date("Y-m-d");
- //var_dump($object); die();
- $object->store();
- $this->form->setData($object);
- TTransaction::close();
- } else {
- $this->form->clear();
- }
- } catch (Exception $e) {
- new TMessage('error', 'Error ' . $e->getMessage());
- TTransaction::rollback();
- }
- }
- ?>
Coloca um 'if' se o id for nulo - está efetuando o cadastro - se id tiver algum valor, ele está sendo alterado.
Essa condição seria no método onSave Voltaire? Poderia dar um exemplo por favor? Fiquei na dúvida de onde vem este id...
então no onSave vc faz o que o Voltaire disse:
antes do
$object->store
if ($object->id)//se existe o id
{
}
Veja bem,
O método onEdit() é executado sempre que você carrega os dados ao formulário.
O método onSave() é executado sempre que você salva (ou altera) os dados do formulário.
O controle que você precisa é SOMENTE no onSave(). Pois o usuário pode abrir o formulário (onEdit) e não alterar nada...
Siga a dica do Felipe, verificando se o objeto possui ID...
Se o objeto possui ID, grave no campo dataalteracao, senão grave no campo datacadastro.
Att,