Categorias
TOTVS Fluig

TOTVS FLUIG – Dataset com Consulta de CNPJ na Receita Federal (Gratuito)

Olá, Fluiger!!!

No post de hoje, trago uma solução pra você, que precisa agilizar o preenchimento de dados de CNPJ no seu formulário ou widget no Fluig, e também evitar erros por parte do usuário.

A solução é a criação de um dataset que se conecta com a api ReceitaWS , um serviço gratuito da Leads2b, que traz os principais dados do CNPJ informado, como Razão Social, Nome Fantasia, e Endereço, diretamente da base de dados da Receita Federal.

Vale lembrar, que para usar este serviço gratuitamente, é importante seguir as regras do plano gratuito:

Regras do Plano Gratuito, coletadas do site em 04/05/2024.

Regras esclarecidas, bora para o Fluig!

O primeiro passo, é criar um serviço para administrar as requisições que faremos ao ReceitaWS.
No Fluig Plataforma, acesse PAINEL DE CONTROLE >> SERVIÇOS >> NOVO SERVIÇO.

A tela abaixo será exibida, e você deverá preencher os seguintes campos:

  • No campo Serviço, selecione a opção “REST”.
  • No campo Nome, informe um valor de acordo com a sua preferência. Não é recomendado utilizar símbolos, nem caixa alta.
  • No campo Descrição, dê mais detalhes sobre o serviço.
  • No campo Domínio, insira esta url: https://receitaws.com.br/v1/cnpj/
  • No campo Tipo de Autenticação, informa a opção “None”

Clique em Salvar para criar o Serviço.

Agora, vamos para o Eclipse. No seu projeto, clique com o botão direito do mouse na pasta DATASETS, em seguida clique em NEW, e por fim, em DATASET CUSTOMIZADO FLUIG.

Informe um código e uma descrição para o nosso novo dataset, em clique em FINISH.

O arquivo será gerado. Substitua tudo pelo código abaixo. Nosso código terá duas funções principais:
createDataset, padrão do Fluig, e é nela que inseriremos todos os próximos códigos.
parseFromJSON, que usaremos para tratar os dados que virão da api ReceitaWS.

function createDataset(fields, constraints, sortFields) {

    // INSERIR OS PRÓXIMOS CÓDIGOS AQUI

}

function parseFromJSON(json) {
    try {
        var jsonObj = JSON.parse(json);
        return {
            data: jsonObj,
            success: true
        };
    } catch (e) {
        return {
            data: json,
            success: false
        };
    }
}

O primeiro trecho você deve inserir dentro da função createDataset, é esse abaixo. Chamamos o DatasetBuilder, e declaramos todas as colunas que o nosso dataset possuíra. Eu nomeei as colunas exatamente igual aos nomes das propriedades que são retornadas pela API. Para saber todas as propriedades disponíveis, clique aqui.

var dataset = DatasetBuilder.newDataset();

    dataset.addColumn('nome');
    dataset.addColumn('fantasia');
    dataset.addColumn('logradouro');
    dataset.addColumn('numero');
    dataset.addColumn('complemento');
    dataset.addColumn('cep');
    dataset.addColumn('bairro');
    dataset.addColumn('uf');
    dataset.addColumn('municipio');

Em seguida, insira um FOR para percorrer as constraints que serão informadas pelo recurso que chamará esse dataset (Formulário, Widget, Evento de Processo, ou até mesmo um Dataset). Nesse nosso exemplo, o dataset só tomará ações com a constraint nomeada cnpj, que terá o seu valor salvo na variável cnpj.

for (var i in constraints) {
        if (constraints[i]['fieldName'] == "cnpj") {
            cnpj = constraints[i]['finalValue'];
        }
    }

Agora, vem a parte final do dataset. O código segue um padrão de consumo de serviços externos do Fluig. As únicas partes que você precisará se preocupar, são:
– Linha 4: A variável url receberá a variável cnpj que corresponde ao que enviaremos via constraint.
– Linha 8: O nome do serviço que atribuímos la no menu PAINEL DE CONTROLE >> SERVIÇOS.
– Linha 26: As propriedades que estão dentro de dataset.addRow, que são os valores que usaremos para adicionar aos registros deste dataset. Substitue pelas propriedades que você deseja consumir e adicionar ao dataset.

    try {

        var clientService = fluigAPI.getAuthorizeClientService();
        var url = cnpj

        var data = {
            companyId: getValue('WKCompany') + '',
            serviceCode: 'receitaws',
            endpoint: encodeURI(url),
            method: 'get',
            options: {
                encoding: 'UTF-8',
                mediaType: 'application/json'
            }
        };

        var response = clientService.invoke(JSON.stringify(data));
        var result = response.getResult();

        if (result == null || result.isEmpty()) throw 'Erro ao executar chamada a API';

        var jsonResponse = parseFromJSON(result);

        if (jsonResponse.success == false) throw jsonResponse.data;

            dataset.addRow(
                [
                    jsonResponse.data.nome,
                    jsonResponse.data.fantasia,
                    jsonResponse.data.logradouro,
                    jsonResponse.data.numero,
                    jsonResponse.data.complemento,
                    jsonResponse.data.cep,
                    jsonResponse.data.bairro,
                    jsonResponse.data.uf,
                    jsonResponse.data.municipio
                ]
            );


    } catch (err) {
        log.info('Erro no dataset ds_busca_cnpj_receita_federal: ' + err);
        throw err;
    }

    return dataset;


Antes de salvar e exportar o seu novo dataset, confira se ele está exatamente dessa forma:

function createDataset(fields, constraints, sortFields) {

    var dataset = DatasetBuilder.newDataset();

    dataset.addColumn('nome');
    dataset.addColumn('fantasia');
    dataset.addColumn('logradouro');
    dataset.addColumn('numero');
    dataset.addColumn('complemento');
    dataset.addColumn('cep');
    dataset.addColumn('bairro');
    dataset.addColumn('uf');
    dataset.addColumn('municipio');

    for (var i in constraints) {
        if (constraints[i]['fieldName'] == "cnpj") {
            cnpj = constraints[i]['finalValue'];
        }
    }

    try {

        var clientService = fluigAPI.getAuthorizeClientService();

        var url = cnpj

        var data = {
            companyId: getValue('WKCompany') + '',
            serviceCode: 'receitaws',
            endpoint: encodeURI(url),
            method: 'get',
            options: {
                encoding: 'UTF-8',
                mediaType: 'application/json'
            }
        };
        var response = clientService.invoke(JSON.stringify(data));
        var result = response.getResult();

        if (result == null || result.isEmpty()) throw 'Erro ao executar chamada a API';

        var jsonResponse = parseFromJSON(result);

        if (jsonResponse.success == false) throw jsonResponse.data;

            dataset.addRow(
                [
                    jsonResponse.data.nome,
                    jsonResponse.data.fantasia,
                    jsonResponse.data.logradouro,
                    jsonResponse.data.numero,
                    jsonResponse.data.complemento,
                    jsonResponse.data.cep,
                    jsonResponse.data.bairro,
                    jsonResponse.data.uf,
                    jsonResponse.data.municipio
                ]
            );


    } catch (err) {
        log.info('Erro no dataset ds_busca_cnpj_receita_federal: ' + err);
        throw err;
    }

    return dataset;
}

function parseFromJSON(json) {
    try {
        var jsonObj = JSON.parse(json);
        return {
            data: jsonObj,
            success: true
        };
    } catch (e) {
        return {
            data: json,
            success: false
        };
    }
}

Após exportar o dataset, devemos testá-lo. No meu caso, testarei no javascript de um formulário. Na linha 70, defini uma constraint chamada cnpj, na linha 71 fiz uma chamada ao dataset que acabamos de criar, passando cnpj como parâmetro, e funcionou corretamente, como podemos ver em dsReceita.values. Agora, é só pegar os valores desse retorno, e realizar as ações desejadas.

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 adicionar campos customizados em documentos no ECM?

Nas últimas semanas, trabalhei em um projeto onde foi necessário controlar os documentos do ECM com maior detalhamento de informações. Porém, neste caso, os campos padrões que o Fluig Plataforma exibe para cada documento, não era suficiente.

É aí que entra a funcionalidade Campos Customizados!

Para utilizar esse recurso, é necessário ter o papel de Admin, para acessar o Painel de Controle.

No Painel de Controle, acesse a opção Campos Customizados, que está listada na seção Personalização.

A tela abaixo será exibida. Clique em Adicionar.

Digite o Código e a Descrição desejada para este novo campo. Além disso, é possível marcar se esse campo será exibido em todos os documentos. Caso contrário, sempre que desejar, o usuário deverá adicioná-lo ao documento para visualizá-lo.
É recomendado informar um código sem assentos e simbolos, e em caixa alta, para facilitar a utilização futura em datasets e scripts.

Quando concluir, é só clicar Salvar.

O novo campo customizado será exibido na lista.

Agora, já podemos atrelar o novo Campo Customizado aos documentos. Carregue um novo arquivo, ou selecione um já existente, e clique no último botão do canto direito. Em seguida, clique em Propriedades.

Na tela a seguir, clique em Informações Gerais, e role a página até visualizar a área Campos Customizados. No final desta área, há um botão Adicionar Campo, clique neste.

Uma lista de Campos Customizados já cadastrados será exibida. Clique na opção que acabamos de criar, e clique no botão Selecionar.

Pronto. Agora, é só clicar na linha, na coluna Valor. O campo será exibido, e você poderá inserir o valor desejado. Para finalizar, é só clicar em Confirmar.

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 – Erro ao exportar processo, 350 caracteres

Olá, Fluiger!

Sabe aquele momento em que você está preenchendo a expressão de um gateway, com 1.000 condições, e de repente, quando vai exportar o diagrama, recebe esse erro?

Calma! Não se desespere!!! rsrsrs

Como corrigir?
Uma solução prática para resolver esse problema, é criando um script de workflow personalizado.

No Eclipse, clique em FILE >> NEW >> SCRIPT FLUIG.

Uma janela será aberta, selecione “Script Evento Workflow” e clique em “Next”.

Digite um nome para o evento, relacione ao diagrama e clique em “Finish”.

O código será criado, e ficará disponível na pasta workflow/scripts. Ao abrir o arquivo, visualizamos que uma função é criada com o mesmo nome do evento. Insira as condições necessárias para o seu projeto, e retorne um valor, ele será utilizado na chamada dentro da expressão do gateway.

function enviaFiscal() {
    var retorno = "";

    if (hAPI.getCardValue("tipoPagamento") != "folhaPagamento" && 
        hAPI.getCardValue("tipoPagamento") != "reembolso" && 
        hAPI.getCardValue("tipoPagamento") != "contrato" && 
        hAPI.getCardValue("tipoPagamento") != "intercompany" &&
        hAPI.getCardValue("tipoPagamento") != "tributo") {
            
            retorno ==  1;

    }else{

        retorno == 0;

    }
    
    return retorno;
}

Após isso, é só chamar a função dentro da Expressão, e informar o valor desejado para a determinada condição:

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

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

Categorias
TOTVS Fluig

Desenvolvimento Fluig nos Macs Apple Silicon (M1, M2, M3)

Olá, Fluiger!
Como voce já sabe, a TOTVS só homologou o Plugin Fluig Studio do Eclipse para Windows, conforme documentação oficial.

E eu, como usuário de MacOS tive bastante dificuldade para configurar o ambiente de desenvolvimento, principalmente porque o meu utiliza a nova arquitetura ARM/Silicon da Apple, mais especificamente o M1.

Depois de quebrar bastante a cabeça, consegui uma solução! rsrs
Segue o passo a passo:

1 – Baixe o JDK, escolhendo a opção macOS ARM64 DMG Installer, e instale-o.
Link: https://www.oracle.com/br/java/technologies/javase/javase8u211-later-archive-downloads.html

2 – Baixe o Eclipse neste link, escolhendo a opção Eclipse IDE for Java EE Developers macOS [x86_64]
Link: https://www.eclipse.org/downloads/packages/release/neon/3

3 – Descompacte o arquivo do Eclipse, e mova para a pasta de Aplicativos.

4 – Clique com o botão direito no icone do Eclipse, e selecione Mostrar Conteúdo do Pacote. Dentro da pasta Contents, há um arquivo chamado Info.plist , abra-o com um editor de código

5 – Role até o final do arquivo, e insira o trecho de código abaixo, exatamente onde eu posicionei.
<string>-vm</string><string>/Library/Java/JavaVirtualMachines/jdk1.8.0_333.jdk/Contents/Home/bin/java</string>

6 – Substitua jdk1.8.0_333.jdk pelo nome que está a pasta do java, caso seja diferente.

7 – Abra o Eclipse, baixe e instale o Fluig Studio, e pronto!!! Eclipse funcionando perfeitamente no Macbook Air M1!!! 😍

Fluig é uma marca registrada da Totvs S.A.

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