Base de conhecimento
Encontre respostas para suas dúvidas em quatro fontes de conhecimento diferentes ao mesmo tempo, simplificando o processo de pesquisa.

Cross Segmento - TOTVS Backoffice (Linha Protheus) - ADVPL - Funções LockByName e UnLockByName no ambiente Cloud

A partir da release 12.1.2510, o DBAccess gerencia locks no Cloud, permitindo reentrância na mesma thread. 

É recomendado que UnLockByName deve repetir exatamente os parâmetros de LockByName, incluindo Empresa e Filial; caso contrário, a liberação falha.

 

time.png Tempo aproximado para leitura: 00:03:00 min
 

Dúvida
Como funcionam as funções LockByName e UnLockByName no ambiente Cloud a partir da release 12.1.2510?
 

Ambiente 
Cross Segmento - TOTVS Backoffice (Linha Protheus) - ADVPL - A partir da versão 12.1.2510.
 

Solução 
A partir da release 12.1.2510, o controle de concorrência e de semáforos para clientes Cloud deixou de ser gerenciado pelo License Server e passou a ser realizado diretamente pelo DBAccess. 
Com essa atualização, o DBAccess passa a reconhecer a sessão atual conectada ao banco de dados, permitindo a reentrância. Ou seja, ao solicitar o mesmo lock várias vezes na mesma thread, o sistema permite a operação e retorna verdadeiro (.T.).

A falha ao derrubar o lock ocorre quando a assinatura da função de liberação diverge da assinatura de criação. 

A função LockByName cria o semáforo validando Empresa e Filial quando os parâmetros lógicos correspondentes são informados exemplo: 

LockByName(cFun, .T., .T.)). 


Se na função UnLockByName esses parâmetros lógicos forem omitidos, o Protheus assume o comportamento padrão de validar apenas a Empresa (.T.) e não validar a Filial (.F.). Essa diferença de assinaturas faz com que o sistema não encontre o lock exato, falhando na liberação e retornando falso (.F.).

Adicionalmente, se for utilizado um operador de negação antes da função de lock que obteve sucesso exemplo:

!LockByName(...)// o retorno avaliado será .F., pois a negação de .T. é .F.

 

Passos para validação do Lock;

  1. Verifique a chamada da função LockByName em seu código-fonte para identificar quais parâmetros lógicos de controle por Empresa e Filial foram passados.
     
  2. Localize a chamada correspondente da função UnLockByName responsável por eliminar o semáforo.
     
  3. Garanta que os parâmetros lógicos passados no UnLockByName sejam rigorosamente idênticos aos utilizados no LockByName. 
    1. Exemplo: se utilizou LockByName(cFun, .T., .T.), utilize obrigatoriamente UnLockByName(cFun, .T., .T.).
       
  4. Compile as alterações e execute a rotina novamente para confirmar a liberação com sucesso (.T.).
     
Exemplo de código:
#include 'totvs.ch'

User Function Lock()

	RpcsetEnv("T1", "D MG 01")

	Local cFun:="testeLock"

	If LockByName(cFun, .T., .T.)
		conout("Lock True!")
	else
		conout("Lock False!")
	ENDIF

	IF MsgYesNo("Desbloquear?","Lock")
		If UnLockByName(cFun, .T., .T.)
			conout("UnLock True!")
		else
			conout("UnLock False!")
		ENDIF
	Endif

Return()
 
Observação: A chamada do LockByName e UnLockByName precisam estar atreladas a mesma thread.
 

 

Esse artigo foi útil?
Usuários que acharam isso útil: 0 de 0

0 Comentários

Por favor, entre para comentar.
X Fechar

Olá ,

Há pendência referente a um de seus produtos contratados para a empresa ().

Entre em contato com o Centro de Serviços TOTVS para tratativa.

Ligue! 4003-0015 opção 4 e 9 ou registre uma solicitação para CST – Cobrança – Verificação de pendências financeiras . clique aqui.

TOTVS

X Fechar

Olá ,

Seu contato não está cadastrado no Portal do Cliente como um perfil autorizado a solicitar consultoria telefônica.

Por gentileza, acione o administrador do Portal de sua empresa para: (1)configurar o seu acesso ou (2)buscar um perfil autorizado para registro desse atendimento.

Em caso de dúvidas sobre a identificação do contato administrador do Portal, ligue (11) 4003-0015, opção 7 e, em seguida, opção 4 para buscar o suporte com o time de Assessoria ao Portal do Cliente. . clique aqui.

TOTVS

X Fechar

Olá ,

Para o atendimento de "Consultoria Telefônica" você deverá estar de acordo com o Faturamento.

TOTVS

X Fechar

Olá,

Algo inesperado ocorreu, e o usuario nao foi reconhecido ou você nao se encontra logado

Por favor realize um novo login

Em caso de dúvidas, entre em contato com o administrador do Portal de Clientes de sua empresa para verificação do seu usuário, ou Centro de Serviços TOTVS.

Ligue! 4003-0015 opção 4 e 9 ou registre uma solicitação para CST – Cadastros . clique aqui.

TOTVS

Chat _

Preencha os campos abaixo para iniciar o atendimento:

Chat _