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.