Cursor não volta pro campo após executar a operação anterior

Criei um form. em que o cliente escolhe filial, unidade, e data e em seguida bipa uma chave de acesso, ao bipar é dado um ENTER pela config do leitor do cliente, se o processo da certo, alimenta o contador criado na tela e o focus deveria voltar para o campo de chave de acesso, mas não esta ocorrendo, apos dar o ENTER os campos ficam azul e o ponteiro some, impedindo o cliente de bipar uma nova chave
Apos informar a primeira chave de acesso:
Alimentou o campo processados, mas os campos ficaram com essa borda azul, impedindo de que seja bipada outra chave na sequencia


teria alguma solução para isso?
o campo da chave de acesso ja esta com a propriedade “Cancelar Submissão” marcada

Olá @juliano.rosa! :waving_hand:

:confetti_ball: Seja bem-vindo a comunidade Latromi! :confetti_ball:

Esperamos que os conteúdos presentes neste ambiente te proporcione uma gama de novas ideias, para solucionar as situações do dia a dia!


Sim, é possível voltar o foco, para o campo, após ter ocorrido o evento de submit. Para isso, em seu procedimento de confirmar, podes adicionar uma ação chamada Atribuir foco

Bom dia Diego, ja coloquei para atribuir o foco, mas simplesmente não vai, esta assim o codigo


quando da o erro no processo, mostra a mensagem e atribui o foco certinho, mas se não da erro ele faz o contator, mas não atribuiu o foco, ja coloquei pra atribuir o foco depois de fazer o contador e acontece a mesma coisa.
Desde ja, obrigado.

Tem algum script javascript ou C# rodando para ajudar no comportamento de entrada dos dados?

Conferi aqui e não tem nenhum script

att
Juliano da Rosa

Bom dia @juliano.rosa!

O evento de LostFocus ocorre no servidor, devido a isto, teu procedimento, que retorna o foco para o campo, ocorre junto a ele. Dando a sensação que não ocorreu.

Após a execução do servidor a informação é retornada para o lado client que executa sua própria ação de lostFocus (blur). Então a sequência de eventos, que está ocorrendo seguindo a lógica aplicada ao teu cenário, é o seguinte:

— lado do cliente —

  1. Dispara o evento de lost focus do campo no navegador do cliente

— lado do servidor —
2. Recebe a informação de lost focus do cliente, quando há alteração no campo.
3. Executa os procedimentos vinculados ao evento de lost focus do campo, no formulário.
4. Popula os campos informados.
5. Altera o foco para o campo desejado.

— lado do cliente —
6. Finaliza a execução do evento de foco no lado do cliente. (Nesta etapa é sobrescrito a informação que ocorreu no servidor que levava o foco de volta ao campo)


Uma possível solução, para manter o foco no teu campo. É forçando redisparo da função de foco no lado do cliente, ou seja, vamos adicionar um 7º passo, no fluxo acima. Com o seguinte código:

const myForm = (function () {

    // Adiciona Callbacks no Formulário
    latromi.formManager.setOnFormCreatedCallback(onFormCreated);
    latromi.formManager.setOnEventFiringCallback(onEventFiring);
    latromi.formManager.setOnFieldValueChangedCallback(onFieldValueChanged);

    // Ocorre logo após o form ser inicializado
    function onFormCreated(ev) { }

    // Ocorre quando um evento é disparado no Form
    function onEventFiring(ev) {
        if (ev.eventName === 'LostFocus' &&
            ev.eventKind === 'Field' &&
            ev.field.name === 'SUBSTITUIR_PELO_NOME_DO_CAMPO') {
            ev.completeCallback = function (ctx) {
                setTimeout(function () {
                    $find(ctx.field.clientId).focus();
                }, 0);
            };
        }
    }

    // Ocorre quando o valor de um campo é alterado no Form
    function onFieldValueChanged(ev) { }

    // Todas as funções acima são "privadas", e não podem ser chamadas externamente.
    // As únicas funções que podem ser chamadas externamente são as que compões o resultado a seguir:
    return {
        test: function() { }
    }
})();

**Observação: É necessário substituir o valor SUBSTITUIR_PELO_NOME_DO_CAMPO pelo nome do teu campo no formulário

1 curtida