Envio de e-mail personalizado

Bom dia!

Estou tentando criar um envio de e-mail personalizado porém falhei miseravelmente hahaha, tentei pelo afterStateEntry, afterProcessCreate e pelo beforeStateEntry e não funcionou em nenhum deles.

Gostaria de saber como faço para criar e enviar um e-mail personalizado de forma correta.

Aqui está minha ultima tentativa que fiz.

function afterStateEntry(sequenceId){
	
    var idFluig = getValue("WKNumProces") + ''
    var emails = hAPI.getCardValue('emails');
    var nome_solicitante = hAPI.getCardValue('solicitante');
    var nome_gerente = hAPI.getCardValue('nomeGerente');
    var nome_supervisor = hAPI.getCardValue('nomeSupervisor');
    var valor_total = hAPI.getCardValue('total');
    
try {
    var parametros = new java.util.HashMap();

    parametros.put("NOME_USUARIO", nome_solicitante);
    parametros.put("NOME_SOLICITANTE", nome_solicitante);
    parametros.put("NOME_GERENTE", nome_gerente);
    parametros.put("NOME_SUPERVISOR", nome_supervisor);
    parametros.put("VALOR_TOTAL", valor_total);

    parametros.put("subject", "Pagamento Efetuado para a solicitação (" + idFluig + ") / colaborador (" + nome_solicitante + ")");

    var destinatarios = new java.util.ArrayList();

    var emails = emails.split(';')

    for (var i = 0; i < emails.length; i++) {
     
        destinatarios.add(emails[i]);
    }


    notifier.notify("1275", "tpl_confirmacao_pgto", parametros, destinatarios, "text/html");

} catch (e) {
    log.info(e);
}
	
}

@Caue_Silva_Jesus o nome ‘1275’ está registrado no WCMADMIN?

@Mautresim está assim

image

@Caue_Silva_Jesus , no WCMADMIN, em Parâmetros da Plataforma, o nome que você tem de usar para que o email seja enviado é como na imagem. No caso, lá no WCMADMIN do meu Fluig está ‘Fluig’. Tem de ver como está no seu e substituir aquele ‘1275’ no Notifier.

image

Verifiquei aqui e está como Fluig e já efetuei a mudança porém ainda não está enviando o e-mail personalizado

Dentro do WCMADMIN você pode testar, naquele mesmo lugar, a conexão. Você pode enviar daquela página para quem você quiser um email. Veja se funciona pelo WCMADMIN o teste de envio.

@Caue_Silva_Jesus , qual a mensagem de erro que aparece no log do Fluig?

Melhor coisa é analisar o erro pra tentar ir mais certo ao problema.

2 curtidas

Está assim

2023-07-14 14:03:02,021 INFO [com.datasul.technology.webdesk.dataset.business.DatasetBO] (default task-1042) Executando Dataset com ID fdwt_tipo_layout do tipo Interno.
2023-07-14 14:03:02,021 INFO [com.datasul.technology.webdesk.dataset.business.DatasetBO] (default task-1042) Builder rodando sem o mobile
2023-07-14 14:03:02,064 INFO [com.datasul.technology.webdesk.dataset.business.DatasetBO] (default task-1042) Executando Dataset com ID fdwt_pagina_layout do tipo Interno.
2023-07-14 14:03:02,065 INFO [com.datasul.technology.webdesk.dataset.business.DatasetBO] (default task-1042) Builder rodando sem o mobile
2023-07-14 14:03:02,106 INFO [com.datasul.technology.webdesk.dataset.business.DatasetBO] (default task-1042) Executando Dataset com ID fdwt_tipo_layout do tipo Interno.
2023-07-14 14:03:02,106 INFO [com.datasul.technology.webdesk.dataset.business.DatasetBO] (default task-1042) Builder rodando sem o mobile
2023-07-14 14:03:02,332 INFO [com.datasul.technology.webdesk.dataset.business.DatasetBO] (default task-1043) Executando Dataset com ID fdwt_menu do tipo Interno.
2023-07-14 14:03:02,333 INFO [com.datasul.technology.webdesk.dataset.business.DatasetBO] (default task-1043) Builder rodando sem o mobile
2023-07-14 14:03:22,638 INFO [com.fluig.ecm.workflow.service.WorkflowProcessErrorLogServiceBean] (default task-1042) >6e1f6885-e13a-44e6-8cc4-0c3ab9efbb41
2023-07-14 14:03:22,732 INFO [com.datasul.technology.webdesk.workflow.business.WorkflowBO] (default task-1042) Iniciando o processo ‘novo_teste’ ativ destino ‘3’ usuario ‘1275’ empresa ‘1’
2023-07-14 14:03:22,758 INFO [com.datasul.technology.webdesk.customization.ScriptingLog] (default task-1042) TypeError: Cannot call method “split” of null
2023-07-14 14:03:23,066 WARN [com.datasul.technology.webdesk.workflow.engine.WorkflowEngine] (default task-1042) Não existe nenhum anexo definido como principal.
2023-07-14 14:03:23,067 WARN [com.datasul.technology.webdesk.workflow.engine.WorkflowEngine] (default task-1042) Não existe nenhum anexo definido como principal.
2023-07-14 14:03:23,067 INFO [com.datasul.technology.webdesk.workflow.business.WorkflowBO] (default task-1042) # Saving card. Process: novo_teste, Instance: 1092, Sequence: 3, Dados: {emails=kaue.menezes@yahoo.com.br, total=sa, nomeSupervisor=sa, nomeGerente=sa, solicitante=sa}
2023-07-14 14:03:23,262 WARN [com.totvs.technology.foundation.alert.service.AlertServiceBean] (Thread-9647 (ActiveMQ-client-global-threads)) Same sender and receiver[login=kaue.menezes]

Vi que deu esse erro: Cannot call method “split” of null

Será que sua variável emails está preenchida?

Tentei novamente e ainda deu esse erro ai, efetuei o preenchimento certo. Irei deixar em negrito os valores que digitei

2023-07-14 14:24:24,831 INFO [com.datasul.technology.webdesk.workflow.business.WorkflowBO] (default task-1046) Iniciando o processo ‘novo_teste’ ativ destino ‘3’ usuario ‘1275’ empresa ‘1’
2023-07-14 14:24:24,863 INFO [com.datasul.technology.webdesk.customization.ScriptingLog] (default task-1046) TypeError: Cannot call method “split” of null
2023-07-14 14:24:25,185 WARN [com.datasul.technology.webdesk.workflow.engine.WorkflowEngine] (default task-1046) Não existe nenhum anexo definido como principal.
2023-07-14 14:24:25,185 WARN [com.datasul.technology.webdesk.workflow.engine.WorkflowEngine] (default task-1046) Não existe nenhum anexo definido como principal.
2023-07-14 14:24:25,185 INFO [com.datasul.technology.webdesk.workflow.business.WorkflowBO] (default task-1046) # Saving card. Process: novo_teste, Instance: 1093, Sequence: 3, Dados: {emails=kaue.menezes@yahoo.com.br, total=teste, nomeSupervisor=teste, nomeGerente=teste, solicitante=teste}

Vou deixar o código do template, formulario e o Js

Template

<html>

<head>
    <title>Fluig</title>
    <style>
        .title {
            font-size: 22px;
        }

        .description {
            font-size: 17px;
        }

        table {
            width: 100%;
            padding-bottom: 2px;
        }

        table tbody {
            text-align: left;
            padding-left: 15px;
        }

        .beneficiado,
        .aprovadores {
            color: #484848;
        }
    </style>
</head>

<body leftmargin="0" topmargin="0" marginheight="0" marginwidth="0">
    <div>
        <br>
        <table cellspacing="0" cellpadding="0" border="0">
            <tbody>
                <tr>
                    <td style="padding: 25px;">
                        <h3 class="title">
                            Pagamento Realizado com sucesso!
                        </h3>
                        <p class="description">
                            O pagamento de ${VALOR_TOTAL} referente as despesas da viagem foi efetuado!
                        </p>
                        <div class="beneficiado">
                            <b>Beneficiado:</b> ${NOME_SOLICITANTE}
                        </div>
                        <div class="aprovadores">
                            <p>
                                <b>Supervisor Aprovador:</b> ${NOME_SUPERVISOR}
                            </p>
                            <p>
                                <b>Gerente Aprovador:</b> ${NOME_GERENTE}
                            </p>
                        </div>
                    </td>
                </tr>
            </tbody>
        </table>
        <table cellspacing="0" cellpadding="0" border="0" style="margin-top: 25px; background-color: #f2f2f2;">
            <tbody>
                <tr>
                    <td>
                        <img src="https://www.innovareti.com.br/img/logo/logo-dark.png" width="200" style="right: 0;">
                    </td>
                    <td align="left" style="color: #666666;">
                        <p style="margin-bottom: 0;margin-block-end: 0;margin-block-start: 0; font-weight: 600;">
                            Innovare TI</p>
                        <p style="margin-bottom: 0;margin-block-end: 0;margin-block-start: 0;">Rua Capitão Cassiano
                            Ricardo de Toledo, 191, sala 1610, Chácara Urbana – Ed. Golden Office, Jundiaí, SP</p>
                    </td>
                </tr>
            </tbody>
        </table>
    </div>
    <br />
</body>

</html>

Formulário

<html>
<head>
	<link type="text/css" rel="stylesheet" href="/style-guide/css/fluig-style-guide.min.css"/>
	<script type="text/javascript" src="/portal/resources/js/jquery/jquery.js"></script>
	<script type="text/javascript" src="/portal/resources/js/jquery/jquery-ui.min.js"></script>
	<script type="text/javascript" src="/portal/resources/js/mustache/mustache-min.js"></script>
	<script type="text/javascript" src="/style-guide/js/fluig-style-guide.min.js" charset="utf-8"></script>
	<script type="text/javascript" src="jquery.input.mask.js"></script>
	<script type="text/javascript" src="validacao.js"></script>
	
	<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div class="fluig-style-guide">
<form name="form" role="form">
    
    
    <div class="panel panel-default boder-red" id="referencias">
    <div class="panel-heading panel-child">
    <h3 class="panel-title">Itens Solicitados / Especificações Técnicas</h3>
  </div>
    <div class="panel-body"> 
    <div class="row">
					<div class="col-md-2" id="emails">	  
						<label class="required" for="emails">Pessoa Fisica:</label>
						<input type="text" id="emails" name="emails" class="form-control">
					</div>
					
					<div class="col-md-2" id="solicitante">
						 <label class="required" for="solicitante">Local:</label>
						 <input type="text" id="solicitante" name="solicitante" class="form-control">
					 </div>
					 
					 <div class="col-md-2" id="nomeGerente">
						 <label class="required" for="nomeGerente">nomeGerente:</label>
						 <input type="text" id="nomeGerente" name="nomeGerente" class="form-control">
					 </div>
					 
					 <div class="col-md-2" id="nomeSupervisor">
						 <label class="required" for="nomeSupervisor">nomeSupervisor:</label>
						 <input type="text" id="nomeSupervisor" name="nomeSupervisor" class="form-control">
					 </div>
					 
					 <div class="col-md-2" id="total">
						 <label class="required" for="total">total:</label>
						 <input type="text" id="total" name="total" class="form-control">
					 </div>
					        
			       </div> 
             </div>
             </div>
 </form>
</div>
</body>
</html>

Validação para o envio

        
        var idFluig = getValue("WKNumProces") + ''
        var emails = hAPI.getCardValue('emails');
        var nome_solicitante = hAPI.getCardValue('solicitante');
        var nome_gerente = hAPI.getCardValue('nomeGerente');
        var nome_supervisor = hAPI.getCardValue('nomeSupervisor');
        var valor_total = hAPI.getCardValue('total');
        
    try {
       
        var parametros = new java.util.HashMap();

       
        parametros.put("emails", emails);
        parametros.put("NOME_SOLICITANTE", nome_solicitante);
        parametros.put("NOME_GERENTE", nome_gerente);
        parametros.put("NOME_SUPERVISOR", nome_supervisor);
        parametros.put("VALOR_TOTAL", valor_total);

       
        parametros.put("subject", "Pagamento Efetuado para a solicitação (" + idFluig + ") / colaborador (" + nome_solicitante + ")");

      
        var destinatarios = new java.util.ArrayList();

       
        var emails = emails.split(';')

       
        for (var i = 0; i < emails.length; i++) {
            
            destinatarios.add(emails[i]);
        }

        

        notifier.notify("Fluig", "tpl_confirmacao_pgto", parametros, destinatarios, "text/html");

    } catch (TESTEPARAVERCADEOERRO) {
        log.info(TESTEPARAVERCADEOERRO);
    }

dá um log.info na variável emails pra confirmar que tem algo nela.

Pra mim o problema é que você tá declarando a emails duas vezes e com isso tá sobrescrevendo ela e perdendo o valor antes de conseguir dar o split.

Bom dia!

Deixei a segunda declaração do email comentada e fiz os teste novamente.

        
        var idFluig = getValue("WKNumProces") + ''
        var emails = hAPI.getCardValue('emails');
        var nome_solicitante = hAPI.getCardValue('solicitante');
        var nome_gerente = hAPI.getCardValue('nomeGerente');
        var nome_supervisor = hAPI.getCardValue('nomeSupervisor');
        var valor_total = hAPI.getCardValue('total');
        
    try {
       
        var parametros = new java.util.HashMap();

       
        parametros.put("emails", emails);
        parametros.put("NOME_SOLICITANTE", nome_solicitante);
        parametros.put("NOME_GERENTE", nome_gerente);
        parametros.put("NOME_SUPERVISOR", nome_supervisor);
        parametros.put("VALOR_TOTAL", valor_total);

       
        parametros.put("subject", "Pagamento Efetuado para a solicitação (" + idFluig + ") / colaborador (" + nome_solicitante + ")");

      
        var destinatarios = new java.util.ArrayList();

       
       // var emails = emails.split(';')

       
        for (var i = 0; i < emails.length; i++) {
            
            destinatarios.add(emails[i]);
        }

        

        notifier.notify("Fluig", "tpl_confirmacao_pgto", parametros, destinatarios, "text/html");

    } catch (TESTEPARAVERCADEOERRO) {
        log.info(TESTEPARAVERCADEOERRO);
        log.info(emails);
    }

Porém ainda da erro

2023-07-18 09:50:16,564 INFO [com.datasul.technology.webdesk.workflow.business.WorkflowBO] (default task-1195) Iniciando o processo ‘novo_teste’ ativ destino ‘3’ usuario ‘1275’ empresa ‘1’
2023-07-18 09:50:16,591 INFO [com.datasul.technology.webdesk.customization.ScriptingLog] (default task-1195) TypeError: Cannot call method “split” of null
2023-07-18 09:50:16,937 WARN [com.datasul.technology.webdesk.workflow.engine.WorkflowEngine] (default task-1195) Não existe nenhum anexo definido como principal.
2023-07-18 09:50:16,938 WARN [com.datasul.technology.webdesk.workflow.engine.WorkflowEngine] (default task-1195) Não existe nenhum anexo definido como principal.
2023-07-18 09:50:16,938 INFO [com.datasul.technology.webdesk.workflow.business.WorkflowBO] (default task-1195) # Saving card. Process: novo_teste, Instance: 1098, Sequence: 3, Dados: {emails=kaue.menezes@turmadamonica.com.br, total=kaue.menezes@turmadamonica.com.br, nomeSupervisor=kaue.menezes@turmadamonica.com.br, nomeGerente=kaue.menezes@turmadamonica.com.br, solicitante=kaue.menezes@turmadamonica.com.br}
2023-07-18 09:50:17,176 WARN [com.totvs.technology.foundation.alert.service.AlertServiceBean] (Thread-14422 (ActiveMQ-client-global-threads)) Same sender and receiver[login=kaue.menezes]

Caso tenha um modelo de envio de e-mail personalizado poderia deixar em anexo pra ver onde eu errei.

Estranho que continuou dando erro de chamada no método split mesmo sem ter esse método sendo chamado no seu código.

Segue um exemplo de código que uso pra disparar e-mail:

/**
 * Evento disparado após o cancelamento da solicitação
 *
 * @param {string} colleagueId Matrícula do Usuário
 * @param {number} processId
 */
function afterCancelProcess(colleagueId, processId) {

    // Foi cancelada aguardando Assinatura Digital
    if (parseInt(getValue("WKNumState")) == 22) {

        var destinatarios = pegaDestinatariosCancelamento();

        if (destinatarios.isEmpty()) {
            return;
        }

        // Variáveis do template de e-mail
        var parametros = new java.util.HashMap();
        parametros.put("subject", "Solicitação de Atestado de Capacidade Técnica: Cancelamento da Solicitação " + processId);
        parametros.put("SERVER_URL", fluigAPI.getPageService().getServerURL());
        parametros.put("TENANT_ID", getValue("WKCompany"));
        parametros.put("PROCESSO_ID", processId.toString());

        // Dispara o e-mail
        notifier.notify("admin", "Atestado_Capacidade_Tecnica_Cancelado", parametros, destinatarios, "text/html");

        return;
    }
}

/**
 * Pega os destinatários do e-mail de cancelamento
 *
 * @returns {java.util.ArrayList<string>}
 */
function pegaDestinatariosCancelamento() {
    var destinatarios = new java.util.ArrayList();

    var usuarios = DatasetFactory.getDataset(
        "ds_usuarios_ativos",
        ["mail"],
        [DatasetFactory.createConstraint("groupId", "UAD - Contratações", "", ConstraintType.MUST)],
        null
    );

    if (!usuarios.rowsCount) {
        return destinatarios;
    }

    for (var i = 0; i < usuarios.rowsCount; ++i) {
        destinatarios.add(colleague.getValue(0, "mail"));
    }

    return destinatarios;
}

Exemplo do Template:

<html>
<head>
	<meta charset="utf-8">
    <title>Sebrae MS - Fluig</title>
</head>
<body>
    <p><img src="${SERVER_URL!''}/globalmailsender/mailSenderHeader?tenantId=${TENANT_ID!''}"></p>

    <h1>ATENÇÃO</h1>

    <p>
        A Solicitação de Atestado de Capacidade Técnica <strong>${PROCESSO_ID!''}</strong>
        foi <strong>Cancelada</strong> enquanto aguardava a coleta de Assinatura Digital!
    </p>

    <p>Você pode acessar a Solicitação <a href="${SERVER_URL!''}/portal/p/01/pageworkflowview?app_ecm_workflowview_detailsProcessInstanceID=${PROCESSO_ID!''}">Clicando Aqui</a></p>
</body>
</html>

Ah, seguinte.

Depois que você atualizou seu Processo você testou com uma Nova Solicitação ou tentou com a que já estava criada?

Se tentou com a que já estava criada fez a Conversão da versão dela para a versão mais recente?

Se não atualizou a versão o código executado continuará a ser o da versão antiga, que tinha o erro no split.

Eu escrevi o código que eu mostrei tudo dnv e agora não aparece aquele erro de antes, porém agora aparece esse.

Você colocou destinatários na variável?

Coloquei.

        var idFluig = getValue("WKNumProces") + ''
        var emails = hAPI.getCardValue('emails');
        var nome_solicitante = hAPI.getCardValue('solicitante');
        var nome_gerente = hAPI.getCardValue('nomeGerente');
        var nome_supervisor = hAPI.getCardValue('nomeSupervisor');
        var valor_total = hAPI.getCardValue('total');
        
    try {
        
        var parametros = new java.util.HashMap();

        
        parametros.put("NOME_USUARIO", nome_solicitante);
        parametros.put("NOME_SOLICITANTE", nome_solicitante);
        parametros.put("NOME_GERENTE", nome_gerente);
        parametros.put("NOME_SUPERVISOR", nome_supervisor);
        parametros.put("VALOR_TOTAL", valor_total);

        
        parametros.put("subject", "Pagamento Efetuado para a solicitação (" + idFluig + ") / colaborador (" + nome_solicitante + ")");

       
        var destinatarios = new java.util.ArrayList();
        destinatarios.add(kaue.menezes);
       

      

        notifier.notify("1275", "tpl_confirmacao_pgto", parametros, destinatarios, "text/html");

    } catch (e) {
        log.info(e);
    }
    
    function onNotify(subject, receivers, template, params) {

        if (template == "templateEmail") {
            receivers.clear();
        }
    }

Coloquei também o e-mail no lugar do usuário e deu esse erro ai

destinatarios.add recebe uma string. Ali tá fora de " e ', então dá problema.

E das vezes que tentei enviar e-mail eu sempre precisei colocar o email ao invés da matrícula (embora na documentação diga que pode ser a matrícula nunca consegui sem ser com email)

Então seria desse jeito?

    var idFluig = getValue("WKNumProces") + ''
        var emails = hAPI.getCardValue('emails');
        var nome_solicitante = hAPI.getCardValue('solicitante');
        var nome_gerente = hAPI.getCardValue('nomeGerente');
        var nome_supervisor = hAPI.getCardValue('nomeSupervisor');
        var valor_total = hAPI.getCardValue('total');
        
    try {
        
        var parametros = new java.util.HashMap();

        
        parametros.put("NOME_USUARIO", nome_solicitante);
        parametros.put("NOME_SOLICITANTE", nome_solicitante);
        parametros.put("NOME_GERENTE", nome_gerente);
        parametros.put("NOME_SUPERVISOR", nome_supervisor);
        parametros.put("VALOR_TOTAL", valor_total);

        
        parametros.put("subject", "Pagamento Efetuado para a solicitação (" + idFluig + ") / colaborador (" + nome_solicitante + ")");

       
        var destinatarios = new java.util.ArrayList();
        destinatarios.add("kaue.menezes");
       

      

        notifier.notify("kaue.menezes@yahoo.com.br", "tpl_confirmacao_pgto", parametros, destinatarios, "text/html");

    } catch (e) {
        log.info(e);
    }
    
    function onNotify(subject, receivers, template, params) {

        if (template == "templateEmail") {
            receivers.clear();
        }
    }

Não.

Destinatários devem ser o e-mail.

Remetente deve ser a matrícula do usuário.