Visão geral
Para garantir a integridade das operações e evitar comportamentos inesperados, o LATROMI possui um mecanismo nativo de gerenciamento de estados. Esse recurso monitora as interações do usuário em tempo real, que ao disparar um evento – como um clique em um botão de salvar ou processar, a plataforma bloqueia automaticamente novas interações até que o processo corrente seja finalizado.
Essa proteção impede o ‘duplo clique’ acidental ou disparos simultâneos que poderiam resultar em duplicidade de registros ou conflitos de lógicas.
Problema
Embora o mecanismo de proteção seja robusto, identificamos um cenário específico relacionado à latência de rede. Em situações onde a conexão do usuário apresenta instabilidade, verificamos um pequeno atraso entre a finalização do processo no servidor e o efetivo fechamento da janela no navegador. Esse intervalo era suficiente para que o sistema interpretasse que o evento já havia terminado e liberasse os componentes para interação antes que a janela fosse removida da tela.
Nessa brecha de milissegundos, o usuário poderia realizar uma ação indesejada — como clicar em outro botão ou alterar um campo — em um formulário que deveria estar em processo de encerramento. Esse comportamento gera inconsistências, pois a interação ocorre em um objeto que o sistema já considerava como ‘finalizado’.
Solução
A estratégia adotada para eliminar essa brecha de interação se baseia em uma premissa simples que após o fechamento solicitado, nenhuma outra ação do usuário deve ser permitida naquele objeto. Portanto, a partir do disparo do evento close, o bloqueio dos componentes passará a ser persistente, não sendo mais revertido após o processamento.
A correção será aplicada no método _callProcessEventServiceComplete, dentro do módulo de gerenciamento de formulários dinâmicos. A lógica seguirá os seguintes critérios:
- O método analisará a variável de retorno
processResult. - Será verificada a propriedade booleana
processResult.closedRequired. - Caso o valor seja true, o sistema não executará o desbloqueio dos componentes da tela.
Dessa forma, garantimos que os campos permaneçam inacessíveis durante todo o tempo de resposta do navegador, eliminando o risco de interações residuais antes do encerramento visual da janela.