Semáforo no License Server

p_semaforo-repetidor-14Rotinas que utilizam semáforo, como por exemplo, as da contabilidade. Internamente fazem uso das funções LockByName e UnlockByName já explicadas aqui neste blog.

De um tempo pra cá, essas funções, por padrão, passaram a controlar o semáforo através do License Server.

Mas quando sua base de testes e sua base de produção utilizam o mesmo License Server (o que acontece em quase todo lugar), um processamento num ambiente acaba travando o outro ambiente via semáforo.

Para solucionar esse problema inclua a cláusula SpecialKey no ambiente do AppServer.ini do Protheus de testes. Segue um exemplo:

[TESTE]
SourcePath=D:\TOTVS12Teste\Protheus\apo
RootPath=D:\TOTVS12Teste\Protheus_Data
StartPath=\system\
x2_path=
RpoDb=Top
RpoLanguage=portuguese
RpoVersion=120
LocalFiles=CTREE
Trace=0
localdbextension=.dtc
PictFormat=DEFAULT
DateFormat=DEFAULT
RegionalLanguage=BRA
TopMemoMega=1
HelpServer=192.168.10.247:8079
SpecialKey=BaseDeTestes <--- Olha ela aí
Anúncios

Controle de Semáforo no Protheus

O controle de semáforo no Protheus é feito utiizando-se duas funções:

LockByName (para criar um semáforo)
http://tdn.totvs.com/pages/releaseview.action?pageId=6814894

UnlockByName (para liberar o semáforo criado)
http://tdn.totvs.com/pages/releaseview.action?pageId=6814897

O conceito é o seguinte. Quando for iniciar a rotina verifique se pode criar um semáforo dessa forma:

If !LockByName("NOME_DA_SUA_ROTINA",.F.,.F.,.T.)
    MsgAlert("Rotina está sendo executada por outro usuário.")
    Return
EndIf

Ao final da rotina desative o semáforo. Senão não vai conseguir rodar mais a rotina. Dessa forma:

UnLockByName("NOME_DA_SUA_ROTINA",.F.,.F.,.T.)

Em caso de queda de conexão e travamento dos semáforos, existe a pasta semaforo no Protheus_Data. Será necessário parar o serviço, apagar os arquivos e iniciar novamente o serviço. Isso resolve qualquer problema de semáforos padrões do sistema inclusive.

Essa dica foi enviada pelo amigo, consultor e programador Bruno Sobral, que pediu para não colocar os créditos, mas eu sou teimoso. Abraços 😉