Olá, Fluiger! Tenho uma ótima notícia! Agora eu faço parte do projeto open source innovare-fluig-snippets, uma iniciativa da InnovareTI, empresa na qual eu ja tive o prazer de trabalhar por 4 anos!
Trata-se de uma extensão para Visual Studio Code, que ajuda desenvolvedores TOTVS Fluig com snippets das principais funções e elementos HTML. Isso aqui ajuda demaaaais quando você está em um projeto com prazo apertado, e precisa ganhar tempo na digitação de código.
E eu já cheguei contribuindo com 6 novos snippets: ✅ Script completo para um dataset que é populado com os resultados de uma query SQL. ✅ Script completo para envio de email personalizado em eventos de processo. ✅ Script para realizar ações ao selecionar um registro em um campo Zoom. ✅ Script para realizar ações ao remover um registro em um campo Zoom. ✅ Script para chamada de Dataset de um só registro. ✅ Script para chamada de Dataset com múltiplos registros.
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 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.
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.
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!
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!
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.
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)
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.
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 ${}: