Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Desafio?!

Tenho uma situação real que estou tentando descobrir como resolver pelo JavaScript. Caso alguém possa me dar alguma dica, desde já agradeço infinitamente. É a seguinte: 1) tenho uma página HTML que possui uma caixa de texto que será preenchida com o "bipe" (pistolado) de um código de barras (com o número de um recibo). Por este motivo, a caixa de texto deve ter sempre o "foco", por causa da "bipagem". 2) No evento "enter" desta caixa de texto acionamos o commit deste form que faz uma pesquisa no banco de dados, preenche um objeto em memória e envia uma segunda página web, com o layout de um formulário preenchido com os dados lidos do banco de dados para uma impressora local. Toda essa parte está funcionando! Desafio: O usuário é um operário de uma fábrica e "bipa" os códigos de barra em alta velocidade, sem olhar para a tela. Consequência: Em alguns momentos em que o sistema está processando os dados, ou quando ocorre um erro na impressora, a caixa de texto perde o foco e a bipagem é perdida. A minha missão é resolver este problema de bipagem/foco para que o operário possa executar esta impressão em alta velocidade, como é realizado atualmente em outro sistema desktop. Recebi uma sugestão em usar o setTimeout e popular um array e de tempos em tempos enviar para o processamento. A dificuldade é popular uma lista de dados bipados, mover da tela (View) para a Controller e retornar para o JavaScript onde uma mensagem deve ser exibida para cada registro bipado informando se cada recibo bipado foi localizado ou não e se foi enviado para a impressora.

Alguém teria uma dica em JavaScript do que eu poderia fazer? Obrigada.

4 respostas
solução!

Ao invés de submeter o formulário faça requisições ajax, porém de forma síncrona, tanto a captura dos códigos quando a exibição da listagem. Dessa forma ele terá a velocidade de captura e as requisições serão empilhadas e tratadas em fila. Já implementei isso em um PDV.

Entendi. Eu só coloquei em submit, porque não sabia voltar para a controller de outra forma. Vou pesquisar por esta ótica que vc está passando. Hoje a navegação (algorítmo) está assim: 1) popula o valor bipado no script (evento enter da caixa de texto); 2) o script chama um método (pesquisa) da controller (ASP.NET MVC) 3) a controller retorna um JSON (boolean) 4) se verdadeiro (#submit) >> o submit, executa uma 2ª controller que popula os dados pesquisados e envia uma View preenchida para a impressora. 5) se falso, exibe mensagem na tela; Preciso pesquisar como eu chamo esta 2ª controller sem ser necessário fazer um submit. certo???

Isso.

O coordenador aqui está pedindo para eu tentar primeiro o setInterval. Guardar um array de recibos (bipados) na tela e processar a cada X segundos. Populando um array de cookies (para enviar da View para a Controller)... Depois, enviar um array cookie para o Javascript (lista de mensagem de erro de cada pesquisa, caso ocorra) e as pesquisas positivas, exibir no Razor (@foreach) uma lista de objetos. Se não for o suficiente, tento com a sua dica tb. Valeu!!