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 06:03 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 |