Como buscar o nome de um usuário que está bloqueando um registro via código fonte | Ti Responde 0150

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.

Dan (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.

Deixe uma resposta

Terminal de Informação