Categorias
TOTVS Fluig

TOTVS FLUIG – Exportar Dados de uma Widget para uma Planilha Excel

Olá, Fluiger!

No post de hoje, te ajudarei a criar uma função para exportar dados de uma widget, para uma planilha excel (Isso também serve para dados que estão em um formulário).

O primeiro passo, é criar uma widget no Eclipse, acessar o arquivo view.ftl, substituir o código existente por este trecho a seguir, e salvar.
Podemos observar os principais itens desse arquivo:
– Linha 7: Título da nossa tabela.
– Linha 11: Nossa tabela com 3 colunas.
– Linha 27: O botão que acionaremos sempre que quisermos exportar os dados da nossa widget.

<div id="MyWidget_${instanceId}" class="super-widget wcm-widget-class fluig-style-guide" data-params="MyWidget.instance()">
    
    <div class="container" style="width: 100%;">

        <div class="panel panel-primary">
            <div class="panel-heading" style="font-weight: bolder;">
                PREVISÃO DO TEMPO - CAMPINAS/SP
            </div>
            <div class="panel-body">
                <div class="row">
                    <div class="table-responsive">
                        <table class="table table-bordered table-hover" id="tbPrevisoes">
                            <thead>
                                <tr>
                                    <th>DATA</th>
                                    <th>TEMPERATURA MINIMA</th>
                                    <th>TEMPERATURA MAXIMA</th>
                                </tr>
                            </thead>
                            <tbody>
                            </tbody>
                        </table>
                    </div>
                </div>
                <div class="row">
                    <div class="form-group">
                        <button class="btn btn-default" data-exportar-dados>Exportar</button>
                    </div>
                </div>
            </div>
        </div>
        
    </div>
    
</div>

O segundo passo, é acessar o arquivo javascript, criado na pasta SRC>>MAIN>>WEBAPP>>RESOURCES>>JS. Agora, substitua todo o código existente por este trecho a seguir, e salve o arquivo.
Podemos observar os principais itens desse arquivo:

  • Linha 3: Nossa fonte de dados, um array de objetos, para popular nossa tabela, e também alimentar a Planilha Excel que exportaremos. (Neste exemplo, a váriavel previsões possui dados fixos, mas poderia também receber dados de um dataset, ou de uma API externa).
  • Linha 36: Função que percorre todos os objetos do nosso array, e os insere nas linhas da tabela.
  • Linha 43: Binding para escutar o clique no botão Exportar, e chamar a função de exportação.
  • Linha 50: Definição da função gerarPlanilha().
  • Linha 56: Definição da variável csv, e a primeira atribuição de valor, com os nomes das colunas conforme desejamos na planilha, separados por ponto e vírgula, e uma quebra de linha no final.
  • Linha 58: Função que percorre todos os objetos do nosso array, e os concatena na variável csv, caso sejam verdadeiros, senão, é adicionado um “–“. Novamente cada valor de cada coluna inserida é separado por ponto e vírgula, seguido de uma quebra de linha “/n”, ao final de cada iteração do FOR.
  • Linha 85: Caso o array tenha registros
    • Definimos o tipo do arquivo de exportação, em hiddenElement.href
    • Definimos o nome do arquivo final, em hiddenElement.download
  • Linha 105: Executamos a função gerarPlanilha(), e o navegador iniciará o download do nosso arquivo de exportação.
var MyWidget = SuperWidget.extend({
    //variáveis da widget
    previsoes: [
        {
            'data': '13/05/2024',
            'min': '18',
            'max': '33'
        },
        {
            'data': '14/05/2024',
            'min': '18',
            'max': '29'
        },
        {
            'data': '15/05/2024',
            'min': '16',
            'max': '27'
        },
        {
            'data': '16/05/2024',
            'min': '15',
            'max': '30'
        },
        {
            'data': '17/05/2024',
            'min': '20',
            'max': '32'
        },
    ],

    //método iniciado quando a widget é carregada
    init: function() {

        for(i in this.previsoes){

            $('#tbPrevisoes').append('<tr><td>'+ this.previsoes[i].data +'</td><td>'+ this.previsoes[i].min +'</td><td>'+this.previsoes[i].max +'</td></tr>');
        }
    },
  
    //BIND de eventos
    bindings: {
        local: {
            'exportar-dados': ['click_exportarDados']
        },
        global: {}
    },
 
    exportarDados: function () {

        var gerarPlanilha = function () {

            // encode
            var universalBOM = "\uFEFF";

            // cabeçalh
            var csv = "DATA;TEMPERATURA MINIMA;TEMPERATURA MAXIMA;\n";

            for (j in this.MyWidget.previsoes) {
                var prev = this.MyWidget.previsoes[j]

                if (!!prev.data) {
                    csv += `${prev.data};`
                } else {
                    csv += "--;"

                }
                if (!!prev.min) {
                    csv += `${prev.min};`
                } else {
                    csv += "--;"

                }
                if (!!prev.max) {
                    csv += `${prev.max};`
                } else {
                    csv += "--;"

                }

                csv += "\n"

                console.log("CSV FINAL: " + csv)
            }

            if (this.MyWidget.previsoes.length > 0) {

                var hiddenElement = document.createElement("a");

                hiddenElement.href = "data:text/csv; charset=ISO-8859-1," + encodeURIComponent(universalBOM + csv)
                hiddenElement.target = "_blank";
                hiddenElement.download = "previsoes.csv";
                hiddenElement.click();
                csv = "";

            } else {

                FLUIGC.message.alert({
                    message: "Não foi possível baixar o relatório, não há registros.",
                    title: "Mensagem",
                    label: "OK",
                });

            }
        };
        gerarPlanilha();

    },

});

Após executar os passos acima, exporte a widget para o servidor, anexe-a em uma página, e acesse-a.

Esta é a nossa widget após o seu carregamento:

Ao clicar no botão EXPORTAR, escolha o local de salvamento.

E visualize o resultado da planilha com os dados da nossa widget!

Caso queira acessar os arquivos dos códigos utilizados nesse tutorial, clique neste link: https://github.com/jorgeMaicon/fluig-exportar-dados-widget-para-planilha .

Esse tutorial te ajudou? Então, deixe um comentário ou sugestão!
Forte abraço!

Fluig é uma marca registrada da Totvs S.A.

Documentação Oficial TOTVS Fluig: https://tdn.totvs.com/display/public/fluig/TOTVS+FLUIG

Categorias
TOTVS Fluig

TOTVS FLUIG – Como enviar emails personalizados em eventos de processo

No post de hoje, trago uma solução bem simples para envio de emails em eventos de workflow.

Explicarei cada trecho do código ao longo do post, e no final, disponibilizarei os arquivos javascript, e html, para vocês baixarem.

*Lembrando que para os scripts abaixo, funcionem corretamente, as configurações de email devem estar ajustadas e testadas no WCMADMIN.

Vamos iniciar pelo script de envio, declarando algumas variáveis com informações provenientes dos campos do formulário utilizado no processo.

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');

Em seguida, crio uma lista java, chamada PARAMETROS.

var parametros = new java.util.HashMap();

Nessa lista PARAMETROS, insiro as informações que eu preciso passar para o template de email, utilizando o padrão (CHAVE, VALOR)

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);

Essa chave SUBJECT, em específico, é a responsável pelo assunto do email.
Nesse exemplo, estou informando o pagamento de uma solicitação, e concatenando algumas variáveis.

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

Agora, vamos aos destinatários. Para isso, eu crio um array java, chamado DESTINATARIOS.

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

Utilizo o método SPLIT para dividir os emails inseridos no campo do formulário separados por “;”.

var emails = emails.split(';')

Rodo um FOR a partir da quantidade de emails detectados na variável EMAILS.

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

Pra finalizar o script e enviar o email, utilizamos a função NOTIFY, alimentando os 5 parâmetros, com as seguintes informações:

Parâmetro 1: Matricula Fluig do usuário remetente deste email.
Recomendamos a criação de um usuário especialmente para utilização como remetente, e que no cadastro dele, seja inserido o mesmo endereço de email da conta cadastrada para envios no WCMADMIN, pois, alguns servidores de email, como o OUTLOOK, não aceitam que uma conta envie mensagens utilizando um endereço de remetente diferente do endereço dela.

Parâmetro 2: Código do TEMPLATE DE EMAIL cadastrado no Painel de Controle do Fluig. Ainda nesse post, exibo um template exemplo.

Parâmetro 3: A variável PARAMETROS, com as informações que serão utilizadas no Template de Email.

Parâmetro 4: A variável DESTINATÁRIOS com a lista de endereços que receberão o email.

Parâmetro 5: Formato do email enviado.

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

Agora, vamos ao Template de Email:

Lembram daquelas informações que adicionamos a lista java PARAMETROS para posteriormente serem exibidas no template de email? Aqui estão elas, referenciadas entre ${} no arquivo html. Esse é um exemplo básico, mas vocês podem passar quantas informações precisarem do script para o template.

<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!
                </р>
                <div class="beneficiado">
                    <b>Beneficiado: </b> ${NOME_SOLICITANTE}
                </div>
                <div class="aprovadores">
                    <p>
                        <b>Supervisor Aprovador:</b> ${NOME_SUPERVISOR}
                    </р>
                    <р>
                        <b>Gerente Aprovador: </b> ${ NOME_GERENTE}
                    </р>
                </div>
            </td>
        </tr>
    </tbody>
</table>

O destinatário receberá o email parecido com esse, com as informações preenchidas no lugar das variáveis entre ${}:

Agora, mãos a obra! Clique no link abaixo, e faça o download dos arquivos que exibi ao longo desse post.
https://github.com/jorgeMaicon/fluig-script-email-personalizado

Caso este tutorial tenha lhe ajudado, deixe um comentário abaixo. Adorarei saber!

Fluig é uma marca registrada da Totvs S.A.

Documentação Oficial TOTVS Fluig: https://tdn.totvs.com/display/public/fluig/TOTVS+FLUIG