Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

Este guia tem o objetivo de apresentar o conceito de DatasetsDataset, suas possíveis parametrizações e sua configuração e importância na plataforma fluig.

...

Um Dataset disponibiliza operações que permitem visualizar o seu conteúdo, viabilizam sua consulta como: consultar quais são as colunas disponíveis, quantas quantos registros foram retornados na consulta, os valores de cada campo, e também filtrar os valores de retorno.

O diagrama abaixo apresenta um modelo conceitual sobre os Datasets.

Image Modified

Tipos de Datasets

...

Existem três tipos de Datasets datasets gerenciados pela plataforma: internos, simples e avançados:

  • Internos: permitem

    navegar em

    acessar dados das entidades do próprio fluig

    (

    , como usuários, grupos, processos ou tarefas, por exemplo

    )

    , ou

    em

    dados existentes em formulários publicados no fluig.

    Acesse aqui para conhecer os

     

    Painel

    Acesse aqui para conhecer detalhes dos datasets internos.

  • Simples: realizam consulta em dados

    de sistemas terceiros

    provindos de API, de forma simplificada e sem codificação, por isso podem ser utilizados em uma grande gama de situações, por exemplo:

    definição de uma lista de valores fixos (como estados de um país) ou

    extração de dados de um serviço externo (via WebServices, por exemplo). A plataforma pode gerar a integração sem qualquer tipo de codificação, sendo necessário apenas informar o endereço e o método do Webservice que contém as informações. 

    Painel

    Acesse aqui para saber como construir facilmente um dataset simples.

  • Avançados:  é uma forma de customização do

    Dataset

    dataset simples, permitindo navegar nos dados retornados por meio de uma codificação em JavaScript. Por exemplo: definição de uma lista de valores fixos (como estados de um país).

    Painel

    Acesse aqui para saber como codificar um dataset avançado.

Informações

As nomenclaturas dos tipos simples e avançados foram adotadas a partir da atualização 1.6.5. Antes disso, os tipos de datasets eram chamados de gerados ou customizados, respectivamente.

Ainda que os Datasets possam ter origens distintas, não existe qualquer diferença sob a perspectiva do componente que fará uso deste realizará consultas neste Dataset. Esta característica representa um grande benefício para os usuários, uma vez que a fonte dos Datasets pode ser alterada sem que isto represente retrabalho nos pontos onde ele é utilizado.

...

Uma vez que codificar a lista se torne pouco flexível (devido a alterações frequentes nos dados), é possível trocar o centro de custo para que seja baseado em definição de formulário. Desde definir que a fonte de dados seja baseada em um Dataset de formulário, desde que se observe o nome dos campos do Dataset, não haverá qualquer impacto sobre o processo workflow.

Em um terceiro momento, pode-se optar por mudar o Dataset novamente, desta vez extraindo os centros de custo do ERP do cliente. Novamente não haverá impacto para o processo workflow (ou para os demais pontos que utilizem o Dataset), desde que se observe o nome dos camposmantenha a estrutura do Dataset inalterada.


Âncora
consultando
consultando
Consultando dados

...

A consulta aos dados retornados pelo Dataset pode ser feita pelo fluig Studio ou pela própria plataforma (via painel de controle ou widget).

Via fluig Studio

Nota
titleAtenção

Para que um usuário que não é administrador da empresa possa visualizar datasets via fluig Studio é necessário que ele possua a permissão "Configurar Datasets". Esta permissão pode ser concedida pelo administrador através do item Permissões disponível no Painel de Controle do fluig.

Pelo fluig Studio, através da visão Visualização de Dataset, é possível consultar os Datasets disponíveis bem como visualizar o seu conteúdo. Com isto é possível verificar quais os campos disponíveis, tanto para filtros quanto para acesso, bem como fazer testes sobre Datasets avançados.

O exemplo abaixo apresenta um exemplo de Dataset sendo visualizado:

Image Removed

Neste exemplo, é possível visualizar os campos disponíveis (conta, título, natureza e tipo) e os registros retornados pelo Dataset. Note que estas informações são essenciais para o uso dos Datasets, principalmente quando há necessidade de restringir os dados que queremos acessar.

Veja a seguir o vídeo how to que demonstra a consulta de dados de um Dataset interno pelo fluig Studio.

...

.

...

Via Painel de Controle

A partir da atualização 1.6.2, a plataforma disponibiliza o facilitador de integração, um editor visual que possibilita configurar a consulta em dados de sistemas terceiros sem qualquer tipo de codificação.O administrador do sistema pode consultar o que o Dataset está retornando, acessando Painel de Controle > Datasets, localizando o Dataset desejado, e acionando Mais ações > Consultar. Os dados retornados serão apresentados de forma semelhante à janela abaixo.

...

Pelo fluig, através da widget Listar registros de datasets, é possível consultar os Datasets disponíveis bem como visualizar o seu conteúdo. Com isto é possível verificar quais os campos disponíveis, tanto para filtros quanto para acesso. Através desta widget, visualizações de datasets podem ser publicados publicadas em páginas ou comunidades.

Painel
Deck of Cards
idwidget
Card
id1
labelWidget

O exemplo abaixo apresenta um exemplo de Dataset sendo visualizado pela widget:

Image RemovedImage Added

Card
id2
labelFiltro

Para filtrar os dados na widget de visualização de Datasets, é necessário selecionar quais os campos que você deseja utilizar o filtro, conforme a imagem a seguir:

Image RemovedImage Added


Nota
titleObservações

Em Datasets internos o filtro por campos metadata funcionará apenas se forem únicos, ou seja, se deseja filtrar por "metadata#parent_id", o filtro deve estar ativado apenas para ele. Em Datasets simples ou avançados, a busca o filtro deve ser implementada implementado junto ao seu código de criação.


Via fluig Studio

Para conhecer a consulta de datasets via fluig Studio, acesse a página de Visualização de Datasets.


Acessando um Dataset

...

Vários pontos do fluig podem fazer uso dos Datasets. Dependendo do local onde o Dataset é utilizado, podem ocorrer variações na forma de acessá-lo ou de manuseá-lo. Para saber mais sobre as formas de acesso ao dataset, consulte a documentação Acessando Datasets.

Construindo um Dataset Avançado

Um Dataset é construído a partir de um código JavaScript. Uma vez que o próprio Dataset é criado a partir de um código JavaScript, é possível fazer chamadas a outros Datasets, chamadas à serviços externos ou apenas criar o Dataset a partir de valores codificados.

Nota
titleAtenção

Para que um usuário que não é administrador da empresa possa visualizar datasets via fluig Studio é necessário que ele possua a permissão "Configurar Datasets". Esta permissão pode ser concedida pelo administrador através do item Permissões disponível no Painel de Controle do fluig.

No exemplo abaixo é criado um Dataset cujo os campos e valores estão fixos no código:

Bloco de código
languagejs
themeEclipse
linenumberstrue
 function createDataset(fields, constraints, sortFields) {
	var dataset = DatasetBuilder.newDataset();
	  
	//Cria as colunas
	dataset.addColumn("Sigla");
	dataset.addColumn("Estado");
	dataset.addColumn("Capital");
	dataset.addColumn("Area");
	 
	//Cria os registros
	dataset.addRow(new Array("AM", "Amazonas", "Manaus", 1570746));
	dataset.addRow(new Array("PA", "Pará", "Belém", 1247690));
	dataset.addRow(new Array("MT", "Mato Grosso", "Cuiabá", 903358));
	dataset.addRow(new Array("TO", "Tocantins", "Palmas", 277621));
	dataset.addRow(new Array("PI", "Piauí", "Teresina", 251529));
	
	return dataset;
}

Para criar um novo Dataset, é utilizado o método DatasetBuilder.newDataset(). A partir do objeto criado é possível adicionar as colunas desejadas (método addColumn) bem como adicionar linhas (método addRow).

Note que a função javascript createDataset, que cria o Dataset, recebe como parâmetros os campos, as constraints e a ordenação. Cabe ao desenvolvedor utilizar estes valores na lógica de implementação do Dataset avançado. Caso seja desconsiderado algum desdes campos, os filtros não serão aplicados. Os parâmetros "fields" e "sortFields" são arrays de String, que possuem, respectivamente, os nomes dos campos que serão retornados e os nomes dos campos utilizados para ordenação. Já o parâmetro "constraints" é um array de objetos do tipo Constraint, onde cada objeto deste array possui as seguintes propriedades: 

...

Valor final para filtro neste campo

...

Tipo do filtro deste campo, podendo ter os valores abaixo:

MUST: O valor informado precisa estar nos resultados

SHOULD: O valor informado pode estar ou não nos resultados

MUST_NOT: O valor informado não pode estar nos resultados

Os Datasets de fontes externas também podem ser sincronizados, para reduzir o número de acessos a serviços de dados e tráfego de informações. Para saber como funciona a sincronização, consulte Sincronização de Datasets.


Importar e Exportar Datasets

...

A plataforma possibilita exportar um dataset do ambiente de teste/homologação para posteriormente importá-lo no servidor de produção. A partir da atualização 1.6.5, esse recurso está disponível pela tela de Datasets, no Painel de Controle. Nas atualizações anteriores, a importação e exportação de datasets ocorria apenas pelo fluig Studio.

Conector de Widget
width800

Para acessar estas propriedades e analisar os valores de cada item, pode-se utilizar um laço de repetição, conforme implementação abaixo:

Bloco de código
languagejs
linenumberstrue
function createDataset(fields, constraints, sortFields) {
	var company;
	var initialDate;
	var finalDate;
	if (constraints != null) {
		for (var i = 0; i < constraints.length; i++) {
			if (constraints[i].fieldName == "company") { 
				company = constraints[i].initialValue; 
			}
			else if (constraints[i].fieldName == "date") { 
				initialDate = constraints[i].initialValue; 
				finalDate = constraints[i].finalValue; 
			}
		}
	}
	.
	.
	.
}

...

Bloco de código
languagejs
themeEclipse
linenumberstrue
function createDataset(fields, constraints, sortFields) {
	var dataset = DatasetBuilder.newDataset();
	dataset.addColumn("DDD");
	dataset.addColumn("Fone");
	dataset.addColumn("Nome");
	
	var tempDataset = getDefaultValues(); // consulta a fonte de dados do dataset
		
	if(constraints!=null && constraints.length){ //se tiver constraint filtra
		
		if(constraints[0].constraintType==ConstraintType.MUST) { // implementação somente para o MUST
			
			for(var a=0;a<	tempDataset.length;a++){
				if(constraints[0].initialValue==tempDataset[a][constraints[0].fieldName]){ // se o valor inicial da constraint for igual ao valor do campo na constraint adiciona a linha
					dataset.addRow(new Array(tempDataset[a]["DDD"], tempDataset[a]["Fone"],tempDataset[a]["Nome"]));
				}
			}
		}
	} else { // se não tiver constraint adiciona todas as linhas
		for(var a=0;a<	tempDataset.length;a++){
			dataset.addRow(new Array(tempDataset[a]["DDD"], tempDataset[a]["Fone"],tempDataset[a]["Nome"]));
		}
	}
	
	return dataset;
}

function getDefaultValues(){ // retorna valores default para serem filtrados
	return 	[{
				DDD: "47",
				Fone: "1111-1111",
				Nome: "Marcos"
			},
			{
				DDD: "47",
				Fone: "2222-2222",
				Nome: "Roberto"
			},
			{
				DDD: "41",
				Fone: "3333-3333",
				Nome: "Maria"
			},
			{
				DDD: "31",
				Fone: "4444-4444",
				Nome: "Francisco"
			},
			{
				DDD: "11",
				Fone: "5555-5555",
				Nome: "Michel"
			}];
}

Consulta da constraint:

Bloco de código
languagejs
themeEclipse
linenumberstrue
function createDataset(fields, constraints, sortFields) {
	var c1 = DatasetFactory.createConstraint("DDD", "47", "47", ConstraintType.MUST);
	
	var dataset = DatasetFactory.getDataset("exemploFiltro", null, new Array(c1), null);
	return dataset;
}

A partir da atualização 1.4.10, também é possível obter o código da empresa e do usuário autenticado através do método getValue(), conforme exemplo abaixo:

Bloco de código
languagejs
linenumberstrue
function createDataset(fields, constraints, sortFields) {
	var companyId = getValue("WKCompany");
	var currentUser = getValue("WKUser");
	.
	.
	.
}

Vídeo How To

Veja a seguir o vídeo How To que demonstra a criação de um dataset avançado com dados fixos.

Conector de Widgetwidth854

urlhttps://www.youtube.com/watch?v=
YD
V0EpnKLr1_
PPoqcRHs
o&
list=PLD-htCoWcvYqIInKALhFy8KaJfXLXcOJ7&index=20
feature=youtu.be
height
480

Utilizando zoom composto em Dataset avançado

Através do uso de Datasets avançados é possível realizar uma série de buscas compostas.

No exemplo abaixo, utilizando o método createDataset foi desenvolvida uma busca constituída por mais de um campo da tabela, que recebe o valor informado no campo zoom e em seguida retorna o dataset avançado com os registros encontrados em ambos ou em um único campo da busca. Caso não seja informado nenhum valor, serão retornados todos os registros encontrados no banco.

Bloco de código
languagejs
themeEclipse
titleExemplo Zoom Dataset customizado
linenumberstrue
 function createDataset(fields, constraints, sortFields) {
	var c1 = null;
	var c2 = null;
	var filter = null;
	
	if (constraints.length > 0)
	{
		c1 = DatasetFactory.createConstraint("mail", "%" + constraints[0].initialValue + "%" , "%" + constraints[0].finalValue + "%",  ConstraintType.SHOULD);
		c2 = DatasetFactory.createConstraint("login", "%" + constraints[0].initialValue + "%", "%" + constraints[0].finalValue + "%",  ConstraintType.SHOULD);
		c1.setLikeSearch(true);
		c2.setLikeSearch(true);
		filter = new Array (c1, c2);
	}	
    var dataset = DatasetFactory.getDataset("colleague", null, filter, sortFields);
     
    return dataset;
}

Em seguida é apresentado a implementação do zoom para tratar os retornos gerados pela busca composta.

Bloco de código
languagejs
themeEclipse
firstline1
titleExemplo 1
linenumberstrue
<script>
$(function(ready){
	var myTable = FLUIGC.datatable('#target', {
	    dataRequest: {
	        url: '/api/public/ecm/dataset/search',
	        options: {
	            contentType:'application/json',
	            dataType: 'json',
	            method: 'POST',
	            data: JSON.stringify({
	            	'datasetId' : 'DatasetTeste'
	            }),
	            crossDomain: true,
	            cache: false
	        },
	        root: '',
	        limit:10,
	    },
	    renderContent: ['colleagueName'], 
	    multiSelect: false,
	    search: {
	        enabled: true,
	    },
	    scroll: {
	        target: '#target',
	        enabled: true
	    }
	});
});
</script>
Bloco de código
languagejs
themeEclipse
titleExemplo 1
linenumberstrue
<input
    type="zoom"
    id = "c7_total"
    name="c7_total"
    data-zoom="{
        'displayKey':'colleagueName',
        'datasetId':'DatasetTeste',
		'limit': '0',
		'fields':[{
              'field':'colleagueName',
              'label':'Nome',
              'standard':'true'
            }
        ] 
     }" 
/>
<div id="target"></div>

Dataset avançado de definição de formulário "pai-filho"

Para acessar informações de um "pai-filho" de uma definição de formulário pode ser utilizado o WebService "ECMDatasetService" (do próprio fluig), um Dataset avançado (Exemplo 1), ou ainda um evento de processo ou definição de formulário (Exemplo 2). 

Bloco de código
languagejs
themeEclipse
titleExemplo 1
linenumberstrue
function createDataset(fields, constraints, sortFields) {
	
	//Cria as colunas
	var dataset = DatasetBuilder.newDataset();
	dataset.addColumn("NumFormulario");
	dataset.addColumn("Id");
	dataset.addColumn("Peca");
	dataset.addColumn("Quantidade");
	
	//Cria a constraint para buscar os formulários ativos
	var cst = DatasetFactory.createConstraint("metadata#active", true, true, ConstraintType.MUST);
	var constraints = new Array(cst);
	
	var datasetPrincipal = DatasetFactory.getDataset("dsExemploPaiFilho", null, constraints, null);
	
	for (var i = 0; i < datasetPrincipal.rowsCount; i++) {
		var documentId = datasetPrincipal.getValue(i, "metadata#id");
		var documentVersion = datasetPrincipal.getValue(i, "metadata#version");
		
		//Cria as constraints para buscar os campos filhos, passando o tablename, número da formulário e versão
		var c1 = DatasetFactory.createConstraint("tablename", "tabelaPecas" ,"tabelaPecas", ConstraintType.MUST);
		var c2 = DatasetFactory.createConstraint("metadata#id", documentId, documentId, ConstraintType.MUST);
		var c3 = DatasetFactory.createConstraint("metadata#version", documentVersion, documentVersion, ConstraintType.MUST);
		var constraintsFilhos = new Array(c1, c2, c3);

		//Busca o dataset
		var datasetFilhos = DatasetFactory.getDataset("dsExemploPaiFilho", null, constraintsFilhos, null);

		for (var j = 0; j < datasetFilhos.rowsCount; j++) {
			//Adiciona os valores nas colunas respectivamente.
			dataset.addRow(new Array(
					documentId,
					datasetFilhos.getValue(j, "wdk_sequence_id"), 
					datasetFilhos.getValue(j, "peca"),  
					datasetFilhos.getValue(j, "qtde")));
		}
	}
	
	return dataset;
}
Bloco de código
languagejs
themeEclipse
titleExemplo 2
linenumberstrue
function beforeStateEntry(sequenceId) {
	
	var user = getValue("WKUser");
	
	//Cria a constraint para buscar os formulários ativos
	var cst1 = DatasetFactory.createConstraint("metadata#active", true, true, ConstraintType.MUST);
	
	//É obrigatório informar a constraint userSecurityId para indicar o usuário 
	//que sera validada a permissão nos formulários
	var cst2 = DatasetFactory.createConstraint("userSecurityId", user, user, ConstraintType.MUST);
	
	var constraints = new Array(cst1, cst2);
	
	var datasetPrincipal = DatasetFactory.getDataset("dsExemploPaiFilho", null, constraints, null);
	
	for (var i = 0; i < datasetPrincipal.rowsCount; i++) {
		var documentId = datasetPrincipal.getValue(i, "metadata#id");
		var documentVersion = datasetPrincipal.getValue(i, "metadata#version");
		
		//Cria as constraints para buscar os campos filhos, passando o tablename, número da formulário e versão
		var c1 = DatasetFactory.createConstraint("tablename", "tabelaPecas" ,"tabelaPecas", ConstraintType.MUST);
		var c2 = DatasetFactory.createConstraint("metadata#id", documentId, documentId, ConstraintType.MUST);
		var c3 = DatasetFactory.createConstraint("metadata#version", documentVersion, documentVersion, ConstraintType.MUST);
		
		//É obrigatório informar a constraint userSecurityId para indicar o usuário 
		//que sera validada a permissão nos formulários
		var c4 = DatasetFactory.createConstraint("userSecurityId", user, user, ConstraintType.MUST);
		
		var constraintsFilhos = new Array(c1, c2, c3, c4);
		
		//Busca o dataset
		var datasetFilhos = DatasetFactory.getDataset("dsExemploPaiFilho", null, constraintsFilhos, null);
		for (var j = 0; j < datasetFilhos.rowsCount; j++) {
			//Utiliza os campos do Dataset. Exibindo como exemplo.
			log.info("CAMPO 1: " + documentId);
			log.info("CAMPO 2: " + datasetFilhos.getValue(j, "wdk_sequence_id"));
			log.info("CAMPO 3: " + datasetFilhos.getValue(j, "peca"));
			log.info("CAMPO 4: " + datasetFilhos.getValue(j, "qtde"));
		}
	}

}

Utilizando um dos modelos acima, é possível recuperar os valores "filhos" dos formulários ativos, ou seja, a última versão criada. Existem alguns parâmetros obrigatórios que devem ser passados através de constraints, onde o valor inicial e final devem ser iguais. A forma de recuperar esses valores é opcional. Segue abaixo a nomenclatura obrigatória de cada parâmetro:

...

Atributo utilizado para nomear cada tabela filha do HTML. Exemplo:

Bloco de código
languagejs
themeEclipse
linenumberstrue
<table border="1" tablename="tabelaPecas" addbuttonlabel="Adicionar Peça">
	<!-- Campos Filhos -->
</table>

...

Código do usuário que será validada a permissão no formulário

Nota
titleObservação

Esse parâmetro não será validado na Visualização de Datasets, visto que nessa opção é um exemplo de visualização dos dados.

450

Para saber mais

...

Page Tree
rootDesenvolvimento de Datasets

Também é possível exibir a ordem dos campos filhos, para isso deve-se utilizar o campo wdk_sequence_id, sendo que este não poderá ser utilizado como nome de algum campo do formulário.

Resultado final do Dataset do exemplo 1:

Image Removed

Guia de Referência de Datasets

Dataset Factory

...

Cria uma nova constraint para a seleção de registros do Dataset.

...

Retorna uma lista de todos os Datasets disponíveis no sistema.

...

Carrega os dados de um Dataset.

Dataset

...

Adiciona uma coluna ao Dataset.

...

Adiciona uma linha ao Dataset.

...

Retorna o nome de uma coluna do Dataset.

...

Retorna um array com os nomes das colunas do Dataset.

...

Retorna a quantidade de colunas de um Dataset.

...

Retorna os valores do Dataset na forma de uma lista contendo mapas, onde cada registro do Dataset corresponde a um mapa com o nome da coluna como chave.

...

Retorna a quantidade de linhas disponíveis no Dataset.

...

Retorna um subconjunto dos dados do Dataset, na forma de um novo Dataset.

...

Retorna o valor armazenado no Dataset, na linha e coluna passadas por parâmetro.

...

Retorna o valor armazenado no Dataset, na linha passada e campo passados por parâmetro.

...

Retorna todos os valores de um Dataset, na forma de um array bidimensional.

...


Informações
titleVídeos How To

Veja mais vídeos how to sobre datasets em: Datasets - Consulta, criação e registros.