Categorias
TOTVS Fluig

TOTVS FLUIG – Como consultar a url do servidor de forma dinâmica (fdn_paramgeral)


Olá, Fluiger!

Se em algum momento, você necessitar desenvolver uma solução dentro do Fluig, que utiliza a URL do Fluig, e a sua empresa diversas bases, como (Dev, Homologação e/ou Produção), você não poderá deixar a url chumbada no código. Senão, terá problemas ao exportar para as diferentes bases.

Para tornar o seu código dinâmico, e trabalhar independente do servidor atual, siga os passos a seguir:

1 – Acesse o menu PAINEL DE CONTROLE >> DESENVOLVIMENTO >> SERVIÇOS, e garanta que existe criado o serviço JDBC – AppDS.

2 – Acesse o menu PAINEL DE CONTROLE >> DESENVOLVIMENTO >> DATASETS, clique no botão NOVO DATASET >> SIMPLES.

3 – Clique em SERVIÇO, e escolha a opção AppDS. Em seguida, clique na lupa para buscar uma tabela.

4 – Clique na caixa de pesquise, e busque por fdn_paramgeral. Em seguida, selecione o resultado.

5 – Insira o CÓDIGO e DESCRIÇÃO do dataset que você criará (eu prefiro repetir o nome da tabela), e clique em SALVAR.

6 – Teste o dataset, e visualize os resultados, buscando por fdn_paramgeral ou o nome que você deu para o seu dataset, clique em MAIS AÇÕES da respectiva linha, e clique em CONSULTAR.

7 – Serão exibidos todos os parâmetros do servidor atual, em especial o que desejamos nesse tutorial, que é o fluig/server.url .

Pronto! Agora, é só consumir a coluna DATA_VALUE desse dataset em qualquer solução, filtrando a coluna DATA_KEY com o valor fluig/server.url, como no exemplo abaixo:

function getServidorAtual(){
		var parametros = []

		var c1 = DatasetFactory.createConstraint("DATA_KEY", 'fluig/server.url', 'fluig/server.url', ConstraintType.MUST);
		var dsParams = DatasetFactory.getDataset("fdn_paramgeral", null, [c1], null);
	
		for (var j = 0; j < dsParams.rowsCount; j++) {
			parametros.push(dsParams.getValue(j, "DATA_VALUE") + "");
		}

		return parametros
	}

E ai!? Você gostou do conteúdo de Fluig de hoje? Deixe o seu comentário!
Forte abraço!!!

Fluig é uma marca registrada da Totvs S.A.

Categorias
TOTVS Fluig

TOTVS FLUIG – DatasetFactory – O que é, e como funciona?

Olá, Fluiger!
Se você é iniciante ou experiente, com certeza já se deparou com o erro DatasetFactory is not defined ao tentar invocar um dataset em um script de formulário, e corrigiu referenciando o arquivo vcXMLRPC.js.

Você já se perguntou por que devemos referenciar esse arquivo?
O vcXMLRPC.js é uma biblioteca que tem como principal objetivo, abstair e facilitar requisições http à api /ecm/dataset/datasets do Fluig, utilizando o conceito de factory.

A principal factory desta biblioteca, é a DatasetFactory. É nela que encontramos as funções que utilizamos em nossas chamadas, como getDataset e createConstraint.

Vamos entender o que acontece por debaixo dos panos, quando chamamos essas funções?
Inspecione a página do formulário, e na aba Sources do navegador, pesquise e acesse o arquivo vcXMLRPC.js.

O arquivo possui diversas funções, mas vamos concentrar nas principais:

DatasetFactory.createConstraint

Essa é a função que chamamos quando queremos invocar um dataset, com uma ou mais restrições (filtros). A createConstraint, cria e retorna um novo objeto chamado SearchConstraint. Na linha 216, temos a definição de SearchConstraint que recebe os argumentos que informamos (field, initialValue, finalValue, type, e likeSearch).
Para initialValue e finalValue, há ainda, validações os para garantir que não sejam nulos. Se forem nulos, são substituídos por uma string especial “NULL___VALUE“.

DatasetFactory.getDataset

Essa é a função que de fato invoca um dataset. Assim como a createConstraint, também precisamos passar alguns argumentos (name, fields, constraints, order, callback), que no final serão adicionados ao objeto data.

Logo em seguida, temos uma requisição AJAX, com alguns parâmetros (url, data, async), no final, se tudo ocorrer bem, os registros do dataset serão adicionados à variável result, e retornados ao usuário.

Obs: Um dos parâmetros da requisição AJAX realizada acima, é o datasetsUrl. Trata-se de uma propriedade do objeto fluigXMLRPC, definido na linha 80. Esta propriedade é a concatenação de:

  • window.location.protocol: http ou https
  • window.location.host: endereço do seu Fluig
  • /api/public/ecm/data/datasets/: endpoint da API Fluig de Datasets.

É isso, Fluigers! Concluo esse post, querendo saber o que vocês acharam desse tipo de conteúdo mais voltado pra curiosidades do desenvolvimento Fluig? Deixe um comentário ou sugestão!

Saiba mais sobre o conceito de Factory, em Javascript, assistindo esse vídeo do meu querido Filipe Deschamps <3 https://youtu.be/uyOJ2jjBtBs?si=LksaPAQMR5Wscqja

Forte abraço!!!

Fluig é uma marca registrada da Totvs S.A.

Categorias
TOTVS Fluig

TOTVS FLUIG – Aprenda a usar as APIs Rest do Fluig

Olá, Fluiger!
Bora aprender de uma vez por todas, a utilizar as APIs do Fluig?

Estas são recursos importantíssimos para expandir as possibilidades de desenvolvimentos em seus processos, formulários e widgets.

Eu estruturei esse tutorial em 3 tópicos:

  1. Documentação das APIs
  2. Como consumir dentro da plataforma
  3. Como consumir fora da plataforma

1 – DOCUMENTAÇÃO DAS API’s

As APIs do Fluig estão disponíveis em 2 versões: ANTIGA e a NOVA, que detalharei abaixo.

1.1 – Documentação API ANTIGA
Para acessar a API ANTIGA: Clique aqui

O link te levará para essa página abaixo. Podemos visualizar os nomes dos recursos (que são separados por contextos), e os seus respectivos endpoints e métodos.

Se clicarmos em um recurso, como por exemplo o DatasetServiceRest, podemos ver os endpoints e métodos desse recurso, e o que cada endpoint retornará ao usuário.

1.2 – Documentação API NOVA
Para acessar a API NOVA: Clique aqui

O link te levará para essa página abaixo. Podemos visualizar os nomes dos recursos (que também são separados por contextos).

Se clicarmos em um recurso, como por exemplo o Dataset, podemos ver os endpoints e métodos desse recurso, e o que cada endpoint retornará ao usuário.


2 – COMO CONSUMIR AS APIs, POR DENTRO DA PLATAFORMA

Para consumirmos as APIs do Fluig, dentro da plataforma, precisaremos criar um serviço. Para isso, acesse PAINEL DE CONTROLE >> SERVIÇOS >> NOVO.

Preencha o formulário:
1 – Selecione o serviço “REST”.
2 – Informe “api-fluig” tanto para o Nome quanto para a Descrição.
3 – Informe o domínio do seu Fluig.
4 – Selecione “Fluig API” no Tipo de Autenticação.
5 – Insira no campo URL para Teste, o base_url + um endpoint do tipo GET, para testarmos esse novo serviço.
6 – Clique em salvar.

Podemos testar esse novo serviço, clicando no último ícone do respectivo serviço.

Clique em TESTAR SERVIÇO, e o retorno da API será exibido logo abaixo.

Agora, podemos consumir as APIs em eventos de processo, datasets, e widgets, usando o script abaixo. Os itens que você deverá alterar nesse script, são: o endpoint, e o method, conforme o recurso que você for usar. O resultado da requisição retornará na variável vo.

    var clientService = fluigAPI.getAuthorizeClientService();

    var data = {
        companyId: getValue("WKCompany") + '',
        serviceCode: 'api-fluig',
        endpoint: '/dataset/api/v2/datasets',
        method: 'get', 
        params: {
        },
        options: {
            encoding: 'UTF-8',
            mediaType: 'application/json',
        },
        headers: {
            'Content-Type': 'application/json;charset=UTF-8'
        }
    }
    
    //retorno
    var vo = clientService.invoke(JSON.stringify(data));

3 – COMO CONSUMIR AS APIs, POR FORA DA PLATAFORMA

É possível consumir as APIs do Fluig a partir de qualquer sistema que realize requisições HTTP. Neste exemplo, consumiremos o endpoint /v2/datasets, no Postman. Se você ainda não o possui, pode baixar aqui.

Faremos a requisição, usando como método de autorização, o OAuth 1.0. Este, exige algumas informações, como: Signature Method, Consumer Key, Consumer Secret, Access Token, e Token Secret.

Para conseguir os dados de Signature Method, acesse no Fluig, PAINEL DE CONTROLE >> PARÂMETROS TÉCNICOS >> OAUTH PROVIDER.
Marque o registro, e clique em Editar.

A tela a seguir será exibida, com as informações desejadas.

Agora, para conseguir os dados de Consumer Key, Consumer Secret, Access Token, e Token Secret, acesse no Fluig, PAINEL DE CONTROLE >> PARÂMETROS TÉCNICOS >> OAUTH APPLICATION.

Vamos primeiro pegar Consumer Key e Consumer Secret. Marque o registro, e clique em Editar.

Os dados serão apresentados conforme imagem abaixo.

Agora, vamos pegar Access Token e Token Secret. Marque o registro, e clique em Usuário Aplicativo.

Os dados serão apresentados conforme imagem abaixo.

Agora que temos todos os dados em mãos, vamos para o Postman! Abra uma nova aba, e insira a url. Lembre-se de se atentar ao método, ao base_url e ao endpoint que você usará. Neste exemplo, usarei o /v2/datasets da api nova.

Em seguida, clique na aba AUTH, logo abaixo da url. Selecione o type OAUTH 1.0, e preencha os campos ao lado direito, com as informações que coletamos no painel de controle do Fluig.

Agora, é só realizarmos a requisição, clicando em SEND. A resposta será exibida abaixo:

Fique atento ao colar os dados do OAuth, pois erros como este abaixo, podem ocorrer se você inserir algo divergente:

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 – Dataset com todos os papéis de um usuário

Olá, Fluiger!

Neste tutorial, vou te ensinar a criar um dataset que te retorna todos os papéis de um usuário.

O primeiro passo é acessar PAINEL DE CONTROLE >> DESENVOLVIMENTO >> DATASETS.
Na tela a seguir, clique em NOVO DATASET >> SIMPLES.

Agora, informe o Código e a Descrição do dataset conforme desejado. No campo Serviço, escolha a opção AppDS.

No campo Tabela, clique no ícone da lupa.

Um modal será exibido. Clique no campo de pesquisa, escreva fdn_userrole , eclique no ícone de lupa. O resultado será exibido, clique nesta linha. Fdn_userrole é o nome da tabela que contém os registros que necessitamos.

Agora, voltamos para a tela de configuração. Se desejar, é possível remover colunas, definir um filtro, e até escolher qual a ordenação. Quando terminar, clique em Salvar.

Agora que criamos o dataset, podemos consumi-lo. Neste tutorial, mostrarei o resultado consumindo pelo Eclipse.
Clique em CONSULTAR DATASET.

Filtre pelo código do dataset que você definiu, e clique em FINISH.

Todos os resultados do dataset serão exibidos. Clique em CONFIGURAR FILTRO.

Clique em NEXT até exibir a tela abaixo. Escolha a coluna LOGIN, informe a matrícula do usuário no campo VALOR INICIAL e VALOR FINAL, e clique em ADICIONAR. O filtro será exibido na caixa abaixo. Clique em FINISH.

Agora, podemos ver os registros conforme o filtro. O meu usuário nesta base, está atribuído a todos esses papéis, na coluna ROLE_CODE.

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 – 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