No vídeo de hoje, vamos demonstrar em como buscar o nome do usuário que esta travando um registro através de um código fonte.
A dúvida de hoje, nos perguntaram, como seria possível em uma função buscar o nome do usuário que esta travando um registro (similar ao que acontece nas telas, onde mostra “Registro travado por …”).
Pensando nisso, montamos um exemplo, onde vamos demonstrar em como utilizar a função TCInternal para buscar essa informação ao tentar bloquear com RLock e DBRUnlock.
Segue abaixo o vídeo exemplificando:
E abaixo o código fonte desenvolvido:
//Bibliotecas TLPP
#Include "tlpp-core.th"
//Declaração da namespace
Namespace custom.terminal.youtube
#Define CRLF Chr(13) + Chr(10) //Carriage Return Line Feed
/*/{Protheus.doc} User Function video0150
Função de teste demonstrando em como buscar o nome do usuário que esta travando o registro (Lock)
@type Function
@author Atilio
@since 09/05/2024
@example custom.terminal.youtube.u_video0150()
/*/
User Function video0150()
Local aArea := FWGetArea() As Array
Local cCustomerID := "" As Character
Local cMessage := "" As Character
//Solicita para o usuário informar o código do cliente
cCustomerID := FWInputBox("Informe o código do cliente (A1_COD):")
//Tenta posicionar no cliente
DbSelectArea("SA1")
SA1->(DbSetOrder(1)) // A1_FILIAL + A1_COD + A1_LOJA
If SA1->(MsSeek(FWxFilial("SA1") + cCustomerID))
//Tenta travar o registro, se conseguir, não tem ninguém bloqueando e aí já desbloqueia em seguida
If SA1->(RLock())
cMessage := "Não tem ninguém bloqueando o registro."
SA1->(DBRUnlock())
//Do contrário, busca quem que está bloqueando através da TCInternal
Else
cMessage := "Esse registro esta bloqueado! Segue maiores informações: " + CRLF + CRLF
cMessage += SA1->(TCInternal(53))
EndIf
Else
cMessage := "Cliente não encontrado na base!"
EndIf
//Exibe a mensagem
ShowLog(cMessage)
FWRestArea(aArea)
Return
Bom pessoal, por hoje é só.
Abraços e até a próxima.