No artigo de hoje, vamos ver em como liberar um lock gerado pela função LockByName.
Algumas vezes precisamos fazer alguma customização e temos que usar o controle de semáforos. Por exemplo, enquanto a rotina estiver sendo executada pelo Joãozinho, o Zézinho não pode usar a mesma rotina.
Para isso, podemos usar as famosas LockByName e UnlockByName, que criam arquivos dentro da nossa pasta de semáforo (através da GetPathSemaforo) conforme a configuração do special key (através da __GetSpecialKey).
Abaixo um exemplo, de um arquivo gerado (com o nome da special.key).
Mas e se precisarmos que o lock seja liberado? Digamos que o usuário deixou a tela aberta, ou o processo travou, como podemos proceder?
Forma 1 – Derrubando a Conexão do Usuário e apagando o arquivo
Se você souber o usuário que esta com o lock travado, basta você:
- Derrubar a conexão dele. Só com isso, geralmente já libera o lock, caso não libere, siga os próximos passos abaixo
- Ir na pasta do seu semaforo (configurada no appserver.ini com SEMAFOROPATH, ou por padrão na \semaforo\ dentro da Protheus Data)
- Excluir o arquivo gerado pelo LockByName
Forma 2 – Forçando a exclusão do arquivo
Caso você use algum servidor Linux ou tenha algum aplicativo no Windows que permita fazer a exclusão de arquivos bloqueados por processos, o que você pode fazer é:
- Abrir o console (Linux) / prompt de comando (Windows)
- Ir até a pasta onde se encontra o arquivo com a trava
- Forçar a exclusão via linha de comando
Abaixo exemplo no Windows:
del /f "C:\pasta\nome do arquivo.key"
Abaixo exemplo em distros Linux:
rm -f "/pasta/nome do arquivo.key"
Forma 3 – Reiniciando o Protheus
Em último caso, você pode reiniciar o AppServer em que o Lock foi gerado, que assim a rotina ficará liberada para ser usada novamente.
Bom pessoal, por hoje é só.
Abraços e até a próxima.