Página 1 de 2

Gravação automatica de 1 unico campo ( #command )

Enviado: 03 Jun 2019 10:13
por scooby
Bom Dia Senhores

Sou novo aqui no fórum, e já de antemão, gostaria de agradecer a ajuda.

Tenho a seguinte situação:
Em todas as tabelas do sistema, existe um campo chamado datlan, esse campo é responsável por gravar a alteração de qualquer dado. Porém nem todo mundo lembra de colocar esse campo e as vezes o conteúdo deste campo não é atualizado corretamente.
Eu verifiquei que dentro do arquivo std.ch é que controla o comando replace.
Eu gostaria de saber como eu posso alterar o comando esse comando para que possa efetuar essa gravação, uma vez que o comando é assim.. não sei nem por onde dar inicio...
#command REPLACE [ <f1> WITH <x1> [, <fN> WITH <xN>] ] ;
[FOR <for>] [WHILE <while>] [NEXT <next>] ;
[RECORD <rec>] [<rest:REST>] [ALL] => ;
DBEval( {|| _FIELD-><f1> := <x1> [, _FIELD-><fN> := <xN>]}, ;
<{for}>, <{while}>, <next>, <rec>, <.rest.> )

Att


Márcio Pinheiro

Gravação automatica de 1 unico campo ( #command )

Enviado: 03 Jun 2019 13:04
por asimoes
O que você quer é uma trigger, acho que isso não rola no replace

Gravação automatica de 1 unico campo ( #command )

Enviado: 03 Jun 2019 13:47
por scooby
Boa Tarde asimoes

Então, seria a mesma funcionalidade de um trigger. Existe algum outro modo conhecido de se fazer isso.
Só para saber se dou prosseguimento nessa implementação ou simplesmente abandono essa questão.

Gravação automatica de 1 unico campo ( #command )

Enviado: 03 Jun 2019 14:07
por JoséQuintas
scooby escreveu:Então, seria a mesma funcionalidade de um trigger. Existe algum outro modo conhecido de se fazer isso.
Bom... pra gravar é comum bloquear/desbloquear registro...
E a não ser que goste de ficar repetindo vários comandos, deve ter uma função pra isso.
Coloque numa delas.

Código: Selecionar todos

RecLock()
REPLACE field->Nome WITH cNome
RecUnlock()
RETURN


FUNCTION RecLock() // ou RecUnlock()

   ...
   REPLACE field->DatLan WITH Date()
   ...

   RETURN NIL


Gravação automatica de 1 unico campo ( #command )

Enviado: 03 Jun 2019 14:18
por JoséQuintas
scooby escreveu:Porém nem todo mundo lembra de colocar esse campo e as vezes o conteúdo deste campo não é atualizado corretamente.
Isto ficou confuso.
É o usuário que digita?
Ou são programadores que esquecem disso?

Se é usuário... porque ele teria que digitar?
Se é programador... vão esquecer de outras coisas também...

Gravação automatica de 1 unico campo ( #command )

Enviado: 03 Jun 2019 15:01
por scooby
JoséQuintas escreveu:Isto ficou confuso.
É o usuário que digita?
Ou são programadores que esquecem disso?
Sim são os programadores... então devido a várias ocorrências, essa medida está sendo tomada, para evitar que mesmo que esqueçam o campo terá atualização.
JoséQuintas escreveu:Bom... pra gravar é comum bloquear/desbloquear registro...
E a não ser que goste de ficar repetindo vários comandos, deve ter uma função pra isso.
Coloque numa delas.
Exatamente, a ideia era alterar a #command replace, porque fazendo isso, resolveria o problema num local só. E efetuando como o senhor havia falado, caso eu trave um registro para pesquisa por exemplo o sistema irá efetuar um replace.

Gravação automatica de 1 unico campo ( #command )

Enviado: 03 Jun 2019 15:21
por JoséQuintas
scooby escreveu:caso eu trave um registro para pesquisa por exemplo o sistema irá efetuar um replace.
Travar na pesquisa?

Já vi programador colocar isso em relatório nem sei pra que.

Código: Selecionar todos

DO WHILE ! Eof()
   RLock()
   @ l, c SAY ""
   SKIP
ENDDO
UNLOCK

Gravação automatica de 1 unico campo ( #command )

Enviado: 03 Jun 2019 15:25
por JoséQuintas
Resolver um problema alterando o funcionamento do Harbour.... isso é querer mais problemas.
Além do mais, isso é quebra-galho, muito fraco pra registrar alguma coisa.
Não vão querer saber apenas quando foi alterado, mas também QUEM foi, e a que horas, ou até por qual módulo, ou até saber o que tinha antes.
E não apenas a última alteração, mas todas as alterações, senão o último vai levar a culpa de algum anterior.
Com certeza o registro não é o melhor lugar pra isso.

E o que é pior....
O programador não faz o trabalho dele...
Vai incluir coisa que pode dar problema.... e arriscar todo funcionando do aplicativo por causa disso.
Sei lá... precisa rever isso...

Gravação automatica de 1 unico campo ( #command )

Enviado: 03 Jun 2019 18:55
por asimoes
scooby.

Entendo o seu problema, aqui utilizamos biblioteca corporativa, pode haver erro da aplicação ou da biblioteca, para validar esse campo, você deveria
ter um validador de fonte pra saber se o programador X cometeu erro, o ideal é subir esses fontes para o SVN ou GIT para ter maior controle das modificações nos fontes.

Nós temos aqui 3 ambientes, Desenvolvimento, Homologação e Produção, toda modificação de sistema tem que ir para Homologação para o usuário testar, quando o usuário aprova a rotina, o fonte é compilado em produção.

Perguntas:

Quantos programadores fazem manutenção no sistema ?

Gravação automatica de 1 unico campo ( #command )

Enviado: 03 Jun 2019 19:23
por JoséQuintas
Outra opção é criar uma classe.
Vai fazer um trabalho melhor, mais detalhado, mas vai continuar dependendo dos programadores usarem.
Com a vantagem de que não vai precisar passar o fonte das classes pra eles, o que evita extravio de fonte.

Gravação automatica de 1 unico campo ( #command )

Enviado: 05 Jun 2019 09:20
por scooby
Bom Dia


Muito obrigado pelas informações passadas. Estou vendo com a parte gerencial como devemos tomar providência nesse quesito.
asimoes escreveu:Entendo o seu problema, aqui utilizamos biblioteca corporativa, pode haver erro da aplicação ou da biblioteca, para validar esse campo, você deveria
ter um validador de fonte pra saber se o programador X cometeu erro, o ideal é subir esses fontes para o SVN ou GIT para ter maior controle das modificações nos fontes.
Pois é, já utilizamos SVN, essa implementação também entraria para um processo de exportação entre base de dados e esse campo tem função primordial, pois os dados só serão exportados caso esse conteúdo tenha sido atualizado.
JoséQuintas escreveu:Outra opção é criar uma classe.
Vai fazer um trabalho melhor, mais detalhado, mas vai continuar dependendo dos programadores usarem.
Com a vantagem de que não vai precisar passar o fonte das classes pra eles, o que evita extravio de fonte.
Estou pensando em fazer exatamente isso. Agora é começar a codificar.


Muito obrigado pela ajuda.


Márcio Pinheiro

Gravação automatica de 1 unico campo ( #command )

Enviado: 05 Jun 2019 18:54
por JoséQuintas
scooby escreveu:Estou pensando em fazer exatamente isso. Agora é começar a codificar.
É tanta coisa assim que precisa de programador?
Ou são coisas repetitivas, que ao invés de você automatizar seu serviço, está colocando ajudantes que só pioram a coisa?

Lembra daquela história: seja seu próprio chefe/dono?

em caso de programação digo o seguinte: seja seu próprio cliente.

Nosso serviço não é reduzir/facilitar o trabalho do cliente?
Então... seja seu cliente, e reduza/facilite o seu trabalho.

Gravação automatica de 1 unico campo ( #command )

Enviado: 05 Jun 2019 20:03
por asimoes
Quintas,

Aqui somos obrigados colocar um histórico das modificações nos fontes, que inclui autor da modificação, data e motivo da modificação, ai fica fácil bater no maluco.

Gravação automatica de 1 unico campo ( #command )

Enviado: 05 Jun 2019 21:06
por JoséQuintas
asimoes escreveu:Aqui somos obrigados colocar um histórico das modificações nos fontes, que inclui autor da modificação, data e motivo da modificação, ai fica fácil bater no maluco.
usar o GIT pra centralizar seria interessante, elimina isso dos fontes.

Só lembrando: O GIT faz tudo.

Opções:

1. controlar na máquina
2. controlar num servidor próprio, ou outra máquina da rede
3. controlar em alguma máquina nas nuvens
4. usar Bitbucket ou GitHub pra cópia nas nuvens, o que seria mais interessante, porque cada usuário poderia ter uma conta criada/apagada do projeto

Só não sei como fazer isso localmente com várias contas, sem que o usuário possa destruir o central

Gravação automatica de 1 unico campo ( #command )

Enviado: 06 Jun 2019 09:46
por asimoes
JoséQuintas escreveu:usar o GIT pra centralizar seria interessante, elimina isso dos fontes.
Isso é um plus nos fontes, usamos o SVN por usuário, atualizando no mesmo respositório, isso é só pra ter certeza de quem ta fazendo M**** mesmo.