Imprimi Página | Fechar janela

Gravar informações via gatilho

Impresso de: Helpfacil - Portal do conhecimento
Nome do Forum: ADVPL
Descrição do Forum: Dúvidas sobre a programação em ADVPL
URL:http://www.helpfacil.com.br/display_topic_threads.asp?ForumID=1&TopicID=43094
Data da Impressão: quinta-feira, 28 de março de 2024 at 15:46


Topico: Gravar informações via gatilho

Postado por: GUDEFENDI
Assunto: Gravar informações via gatilho
Data Postagem: segunda-feira, 10 de fevereiro de 2020 at 15:56

Boa tarde,

Montei um gatilho no campo A2_MSBLQL para executar um fonte (U_LOGUSRBQ). Sempre que alguem alterar o valor do campo A2_MSBLQL para 1, o fonte pega o usuário logado no sistema e grava num campo personalizado (A2_ZZUSRBQ).

Preciso de ajuda com o fonte abaixo, pois o mesmo esta trazendo as informações nas variáveis, mas não grava o nome no campo personalizado.

********** GATILHO **********

Campo -------- A2_MSBLQL
Sequencia ---- 001
Cnt. Dominio - A2_ZZUSRBQ
Tipo --------- 1 Primario
Regra -------- U_LOGUSRBQ
Posiciona ---- 2 não
Alias --------
Ordem -------- 0
Chave --------
Condicao -----

*****************************

*********** FONTE ***********

#include ‘protheus.ch‘
#include ‘parmtype.ch‘

User Function LOGUSRBQ()

     Local cBloq := M->A2_MSBLQL
     Local cUsuario := ALLTRIM(USRFULLNAME(RETCODUSR()))
     
     IF cBloq == "1"

     DbSelectArea("SA2")

          RecLock("SA2", .F.)
          SA2->A2_ZZUSRBQ := cUsuario
          MsUnLock()
     ENDIF

Return

*****************************


Respostas:

Postado Por: LHC
Data Postagem: segunda-feira, 10 de fevereiro de 2020 at 16:24

Vê se te ajuda a alteração abaixo:

RecLock(‘SA2‘, .F.)
Replace A2_ZZUSRBQ with cUsuario
MsUnLock()

Atenciosamente,
Luis Henrique



Postado Por: JCSTORINO
Data Postagem: segunda-feira, 10 de fevereiro de 2020 at 16:31

Eu acho que vc não precisa fazer RecLock, uma vez que vc já esta em modo de edição do registro ( em tela ), a única coisa que precisa fazer é gatilhar o conteúdo para o campo respectivo..

Seu gatilho ficaria assim

Campo -------- A2_MSBLQL
Sequencia ---- 001
Cnt. Dominio - A2_ZZUSRBQ
Tipo --------- 1 Primario
Regra -------- cUserName ou ALLTRIM(USRFULLNAME(RETCODUSR()))
Posiciona ---- 2 não
Alias --------
Ordem -------- 0
Chave --------
Condicao -----

Só isso, quando gravar o valor já vai ser gravado junto com o restante do cadastro.

att

Julio Storino
Consultor Protheus



Postado Por: INFOBRENO
Data Postagem: segunda-feira, 10 de fevereiro de 2020 at 18:47

Da forma que o Julio colocou funciona e é bem mais prático, mas se quiser utilizar o ser fonte

*********** FONTE ***********

#include 'protheus.ch'
#include 'parmtype.ch'

User Function LOGUSRBQ()

     Local cBloq := M->A2_MSBLQL
     Local cUsuario := ""

     
     IF cBloq == "1"
        cUsuario := ALLTRIM(USRFULLNAME(RETCODUSR()))
     ENDIF

Return (cUsuario) <- Caso queira utilizar seu fonte voce deve informar o
retorno aqui
voce já está posicionado e com reclock.





Postado Por: GUDEFENDI
Data Postagem: terça-feira, 11 de fevereiro de 2020 at 12:00

JCTORINO, bom dia!

Eu testei desse modo fazendo direto no gatilho, mas o problema é que ele altera o nome do usuário mesmo quando vão desbloquear um fornecedor. O que estou querendo é filtrar para apenas quando vão bloquear-lo.



Postado Por: GUDEFENDI
Data Postagem: terça-feira, 11 de fevereiro de 2020 at 12:01

INFOBRENO, bom dia!

Vou testar como voce falou, obrigado.



Postado Por: JCSTORINO
Data Postagem: terça-feira, 11 de fevereiro de 2020 at 14:28

Olá GUDEFENDI, faz assim...

Coloca no campo Condição do gatilho a seguinte expressão:

M->A2_MSBLQL=="1"

Seu gatilho ficaria assim:

Campo -------- A2_MSBLQL
Sequencia ---- 001
Cnt. Dominio - A2_ZZUSRBQ
Tipo --------- 1 Primario
Regra -------- cUserName ou AllTrim(UsrFullName(RetCodUsr()))
Posiciona ---- 2 não
Alias --------
Ordem -------- 0
Chave --------
Condicao ----- M->A2_MSBLQL==‘2‘

Julio Storino
Consultor Protheus



Postado Por: JCSTORINO
Data Postagem: terça-feira, 11 de fevereiro de 2020 at 14:33

A propósito, lembrei de um recurso nativo do protheus que faz um log das alterações em determinado campo e determinada tabela, é só configurar..

Dá uma olhada nesse vídeo que fiz a bastante tempo, considere que algumas coisas podem terem mudado daquela versão pra cá.. mas acredito que ainda funcione bem para o que vc deseja..

https://www.youtube.com/watch?v=z5fiAv7jvvE&t=42s

Espero ter ajudado.

Julio Storino
Consultor Protheus



Postado Por: WALTERFCAR
Data Postagem: terça-feira, 11 de fevereiro de 2020 at 15:33

estava vendo isso hj
se já estiver no fonte mvc, dá para fazer assim

FWFldPut("A2_ZZUSRBQ", ALLTRIM(USRFULLNAME(RETCODUSR()))   )



Postado Por: GUDEFENDI
Data Postagem: quinta-feira, 13 de fevereiro de 2020 at 10:12

JCSTORINO, bom dia!

Fiz a alteração do gatilho que voce falou, mas da um erro na hora que altero o campo A2_MSBLQL.

Segue os prints em anexo.



Postado Por: GUDEFENDI
Data Postagem: quinta-feira, 13 de fevereiro de 2020 at 10:13

WALTERFCAR, bom dia!

Vou testar desse modo que voce me passou.



Postado Por: JCSTORINO
Data Postagem: quinta-feira, 13 de fevereiro de 2020 at 11:09

Olá GUDEFENDI, só vai disparar o gatilho quando bloquear o fornecedor certo ? então A2_MSBLQL tem que estar com o valor 1, tente essa alteração...

Coloca no campo Condição do gatilho a seguinte expressão:

&(READVAR())==‘1‘

Seu gatilho ficaria assim:

Campo -------- A2_MSBLQL
Sequencia ---- 001
Cnt. Dominio - A2_ZZUSRBQ
Tipo --------- 1 Primario
Regra -------- cUserName   ou   AllTrim(UsrFullName(RetCodUsr()))
Posiciona ---- 2 não
Alias --------
Ordem -------- 0
Chave --------
Condicao ----- &(READVAR())==‘1‘

Julio Storino
Consultor Protheus



Postado Por: GUDEFENDI
Data Postagem: quinta-feira, 13 de fevereiro de 2020 at 12:03

JCSTORINO, bom dia!

Deu certo agora a montagem do gatilho, muito obrigado pela ajuda.




Imprimir Página | Fechar Janela