No artigo de hoje, nós vamos demonstrar uma lógica, para criarmos onde o usuário não poderá executar a função duas vezes seguidas.
Imagina o seguinte cenário, você tem uma função customizada, e nela tem uma tecla de atalho, seja um F5, F6, F7, Shift + F8, Ctrl + L, entre tantas outras possíveis.
O que acontece se o usuário ficar pressionando esse atalho várias vezes? Por exemplo, imagina que a tecla de atalho seja F4, ai o usuário vai e fica apertando no teclado o F4 umas 10 vezes.
Se não fizer nenhuma tratativa, será acionado 10 vezes a função, se for alguma tela, será aberto 10 telas, isso se não der erros.
Então para esse cenário, a lógica para tratarmos essa situação será a seguinte:
- Crie uma variável do escopo STATIC (que fica só no prw), sendo que ela vai ter .T. ou .F. (em execução ou não respectivamente)
- Dentro da sua função, você irá testar se essa variável está como .F.
- Se ela estiver como false
3.a. Ai você vai entrar no If, já mudar ela para true e acionar a customização
3.b. Somente quando acabar, que daí a flag volta para false
- Se estiver como true, nem irá entrar no if
Então conforme a lógica acima, segue o exemplo abaixo:
//Cria a Flag como false
Static lEmExecucao := .F.
//Cria a sua função que é acionada via algum atalho
User Function zSuaFuncao()
Local aArea := FWGetArea()
//Somente se não estiver em execução
If ! lEmExecucao
//Altera a flag para true, informando ao sistema que já está executando
lEmExecucao := .T.
//Aciona a customização (como abertura de alguma tela, executar alguma query, etc)
//...
//Volta o status da flag para false
lEmExecucao := .F.
EndIf
FWRestArea(aArea)
Return
Bom pessoal, por hoje é só.
Abraços e até a próxima.