Como chamar uma função ao clicar em ENVIAR

Alguém sabe informar como chamar uma função ao clicar na opção ENVIAR do FLUIG?

O formulário valida o campo CPF quando o usuário muda de campo, chamada no formulário através onmouseout. Está funcionando corretamente, porém quando o usuário retorna para acertar o campo, caso digite um código incorreto e clicar direto na opção ENVIAR para avançar o fluxo não passa pela validação novamente e está o dado incorreto.

Alguém pode ajudar como resolver esse problema?

Veja se esse evento te ajuda

http://tdn.totvs.com/display/fluig/Eventos+Processos#EventosProcessos-beforeMovementOptions

Coloque esse evento DENTRO do formulário em questão.

Ajuda, já vi uma outra resposta sua indicando esse, mas não localizei no evento global do formulário.

Cliquei em Novo / Evento Global do Formulário e não aparece esse que está indicando.

Esse evento não aparece mesmo, porque não é feito num JS a parte, ele é pra ser implementado no próprio formulário mesmo, você cria uma função exatamente com esse nome e ele vai chamar ao clicar em enviar.

Gustavo, você fala em adicionar um Novo Arquivo vinculado ao formulário? Aparece em branco e depois eu colei a função do exemplo. É isso?

Tenho dúvida na implementação desse código:

Como incluir a função que valida o CPF ? Está no meu custom
function prix_cpf()

Você pode fazer isso diretamente em uma tag script do seu formulário.

Bom dia Cássia, eu resolvi parar de utilizar o evento validateForms e comecei a fazer a validação no próprio formulário. Só que para isso funcionar, eu precisei "capturar" o botão enviar e parar a continuação da movimentação de atividade quando algum campo esteja vazio ou incorreto.

Segue um exemplo de como meus formulários funcionam:


<!DOCTYPE html>
    <head>
        <meta http-equiv="X-UA-Compatible" content="IE=11;text/html;">
        <meta charset="UTF-8">
        <title>Exemplo</title>

    </head>
    <body>
        <div class="fluig-style-guide">
            <form name="form" role="form">

            </form>
        </div>
        <script src="http://10.0.136.71:9090/webdesk/vcXMLRPC.js"></script>
        <script>
             var beforeMovementOptions = function(numState){
                if (/Mobi/.test(navigator.userAgent)) {
                    var beforeSendValidate = function(numState,nextState){
                        validateForms_mobile();
                    }
                }else{
                    window.parent.$("[data-send]").on("click", function(ev) { validateForms(ev); });
                }
            }
        </script>
    </body>
</html>


function validateForms(ev){
    var validate     =    "validateStep"+stepWF+"();";

    if(eval(validate)){
        blockPage();    // O formulário recebe uma máscara escura

        // Se não validou, impede o evento padrão do botão:
        ev.stopImmediatePropagation();
        ev.stopPropagation();
        ev.preventDefault();
        return false;
    }
}

Em resumo, existe um if para caso seja versão mobile ou desktop. Na versão desktop, basta "monitorar" o atributo data-send da janela pai:

window.parent.$("[data-send]")

Já a versão mobile eu usei o evento beforeMovementOptions(). Utilzei essas duas formas pois encontrava alguns BUGs utilizando somente uma ou outra. E eu paro todo tipo de propagação de evento com o seguinte trecho:


      // Se não validou, impede o evento padrão do botão:
        ev.stopImmediatePropagation();
        ev.stopPropagation();
        ev.preventDefault();
        return false;

Bom dia Carlos, obrigada pela ajuda, mas ainda não funcionou.

Deixa ver se eu entendi bem, esse script adiciono no final após a tag /form junto com os outros scripts do formulário é isso?

E a função validateForms(ev) eu incluo no Custom, é isso?
Fiz esse procedimento, mas meu botão de enviar continua aparecendo. Uma dúvida no meu caso será necessário executar a função já vinculada no Custom de ValidarCPF.

Tu pode colocar esse código no final da tag BODY.

custom que tu quer dizer, é um arquivo externo .js? por exemplo: scripts.js? Se o custom for um externo, pode sim! Mais o botão enviar não some, ele só é “capturado”

Esse código:
window.parent.$("[data-send]").on("click", function(ev) { validateForms(ev); });
ele monitora o botão enviar da plataforma FLUIG que movimenta para outra atividade, ou seja, toda vez que tu clica em enviar a função: validateForms(ev);
é executada. Ai na função validateForms(ev) eu tenho validações (por exemplo o ValidarCPF) que caso retorne false eu executo:
// Se não validou, impede o evento padrão do botão: ev.stopImmediatePropagation(); ev.stopPropagation(); ev.preventDefault(); return false;
que, resumindo, para a movimentação de atividade.

Boa tarde,

Você poderia usar dessa forma:

Evento do Formulário:


function displayFields(form,customHTML){
    var mobile = form.getMobile();

    customHTML.append("<script>");
    customHTML.append("        function getMobile(){ return '" + mobile + "'};");
    customHTML.append("</script>");
}

Javascript do formulário:


var beforeSendValidate = function(numState,nextState){
    var mobile  = getMobile(); // pega da função criada no displayFields
    var retorno = true;

    if (mobile) {
        retorno = validaFormMobile();
    } else {
        retorno = validaForm();
    }

    if (!retorno) {
        throw("Formulário com dados inválidos!!!");
    }
}