Boa tarde, pessoal! Eu costumo tratar casos de lock de registro, como até já postei em alguns tópicos, mas agora estou com uma dúvida e não encontrei nada no help do Progress... Existe alguma forma de eu saber via comando quem é o usuário que está prendendo o registro? Trocando em miúdos... quando não incluímos nenhum tratamento, o Progress mostra a mensagem padrão "Registro x em uso por <nome-da-estacao>.. mas eu uso tratamento com IF LOCKED e mostro uma mensagem tratada, pois na mensagem padrão se vc cancelar o processo, a sessão do Progress é reiniciada, além de não ser uma mensagem nada amigável. Porém agora surgiu a necessidade de incluir na mensagem tratada qual é o usuário (ou pelo menos a estação) que está com o registro alocado. Alguém sabe como fazer isso?
Boa tarde, Eu não consigo testar agora, mas abaixo a resposta do site da Progress: Record Locking - How to know who has locked the record using VST? http://knowledgebase.progress.com/articles/Article/19136 Espero que ajude, depois posta se deu certo.
Boa tarde, Fabiano! Agradeço a atenção... No servidor tudo bem, eu queria saber a nível de programa mesmo...
Olá Cleilton, era isso mesmo que eu precisava. Estava vendo o arquivo que me indicou e um colega me avisou de uma include que já tínhamos implementada aqui pra isso.. Segue (com algumas alterações) caso seja útil pra mais alguém: Código: REPEAT: FIND <nome-tabela> WHERE RECID(<nome-tabela>) = <variavel-RECID> EXCLUSIVE NO-ERROR NO-WAIT. IF LOCKED <nome-tabela> THEN DO: FIND FIRST <nome-banco>._lock WHERE <nome-banco>._lock._lock-recid = INTEGER(<variavel-RECID>) NO-LOCK NO-ERROR. FIND FIRST <nome-banco>._connect WHERE <nome-banco>._connect._connect-usr = <nome-banco>._lock._lock-usr NO-LOCK NO-ERROR. FIND LAST du_conexoes WHERE du_conexoes.estacao = <nome-banco>._connect._connect-device NO-LOCK NO-ERROR. ASSIGN lock_usr_ = <nome-banco>._connect._connect-usr NO-ERROR. ASSIGN lock_dev_ = <nome-banco>._connect._connect-device NO-ERROR. MESSAGE 'O registro solicitado está em uso por ' lock_nom_ ' em' lock_dev_ '.' SKIP 'Deseja tentar novamente?' VIEW-AS ALERT-BOX QUESTION BUTTONS YES-NO TITLE 'Lock' UPDATE lock_sai_. IF NOT lock_sai_ THEN DO: lock_ok_ = FALSE. LEAVE. END. END. ELSE DO: lock_ok_ = TRUE. LEAVE. END. END.
Outra maneira Código: for each {&DB}._Connect no-lock. if {&DB}._Connect._Connect-Usr = ? then next. /**/ for each {&DB}._Lock no-lock. if {&DB}._Lock._Lock-Usr = ? then leave. if {&DB}._Lock._Lock-Usr <> {&DB}._Connect._Connect-Usr then next. /**/ find {&DB}._File where {&DB}._File._File-Number = {&DB}._Lock._Lock-Table no-lock no-error. if available({&DB}._File) then x-nomeTabela = {&DB}._File._File-Name. else x-nomeTabela = "ERRO: Sem Tabela!". /**/ if x-nomeTabela = i-tabela then do: o-msg_simples = "Em Uso por " + caps({&DB}._Connect._Connect-Name) + " com o N£mero " + string({&DB}._Connect._Connect-Usr). /**/ o-msg_completa = "Tabela " + i-tabela + " em uso por " + {&DB}._Connect._Connect-Name + " (" + string({&DB}._Connect._Connect-Usr) + ")" + " no " + {&DB}._Connect._Connect-Device + "!". end. end. /* FOR EACH _lock */ end. /* FOR EACH _connect */