Neste artigo vamos falar sobre como implementar uma validação de alguma regra de negocio e se necessário prevenir form submit com GlideAjax Async no Client Script para validar caso hajam dependências.
Muitas vezes precisamos implementar validações mais complexas em algum formulário, requerendo o uso de uma chamada Ajax para decidir se aquela operação de save/update deve ser permitida ou não. E a solução para este cenário apesar de simples não é tão óbvia!
Caso você não esteja familiarizado com chamadas GlideAjax, confira o artigo abaixo antes de prosseguir!
Para conseguirmos implementar essa solução, vamos falar um pouco do objeto “g_scratchpad”!
Esse objeto permite compartilhar informações entre server e client de forma persistente. É uma ferramenta bastante útil e não acredito que seja muito conhecida/utilizada! Não vou entrar muito a fundo nele agora, mas deixa um comentário se vocês quiserem mais conhecer mais detalhes sobre o g_scratchpad.
Temos o seguinte Client Script, do tipo onSubmit:
function onSubmit() {
// Capturamos a operação executada, por exemplo insert, update etc
var actionName = g_form.getActionName();
// Checa no g_scratchpad se o atributo isFormValid está setado como verdadeiro
// Se sim, ele retorna true para o onSubmit, e o form será atualizado.
if (g_scratchpad.isFormValid){
return true;
}
// Chamada da nossa validação Ajax, que definirá se o form poderá ser submetido ou não
var ga = new GlideAjax('MyUtils');
ga.addParam('sysparm_name', 'testAjax');
ga.getXMLAnswer(meuCallback);
// Retorna falso por padrão, pois somente com a aprovação do Ajax que o submit deverá feito
return false;
// Callback da chamada Ajax
function meuCallback(answer) {
// Aqui voce valida a condição de sucesso para o submit.
if (answer == 'no') {
// O segredo está nesse scratchpad, que é validado na linha 6
g_scratchpad.isFormValid = true;
// Re-submetemos o form com a mesma action original.
g_form.submit(actionName);
}
}
}A solução então funciona da seguinte forma: A primeira validação do valor do scratchpad (linha 6) sempre será false uma vez que a chamada Ajax ainda não foi completada, então logo de cara cancelamos o submit (linha 15).
Em paralelo, a chamada Ajax está em execução e aguardamos a chamada do callback meuCallback para tratar o retorno. Uma vez que o callback é executado, fazemos as validações necessárias para definir se aquele g_form pode ser submitido ou não (linha 20).
Se o form for aprovado para submissão, nós setamos o atributo g_scratchpad.isFormValid com o valor true e re-resubmetemos o mesmo form. Agora a grande sacada é, com a resubmissão, este mesmo script será executado desde o início, porém quando ele chegar na linha 6 teremos:
// Agora na segunda vez, este valor foi definido como true, então ele entrará no if e o return
// do onSubmit agora será verdadeiro, fazendo com que a submissão seja completada.
if (g_scratchpad.isFormValid){
return true;
}Bacana né?
Espero que tenham gostado e até a proxima.