Árvore de páginas

Versões comparadas

Chave

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

...

Nota
titleAtenção

Para que um usuário que não é administrador da empresa possa visualizar acessar os 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.

...

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 à a 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 construir 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.

A partir da atualização 1.6.5, os administradores do sistema conseguem editar o código fonte do Dataset pela plataforma, acessando a opção "Editar em modo avançado", na tela de Datasets no Painel de Controle.


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();
	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 adiciona a linha
				if(constraints[0].initialValue==tempDataset[a][constraints[0].fieldName]){ 
					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"
			}];
}

...

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

Exemplo Zoom Dataset customizado
Painel
Deck of Cards
idExemplo 1
Card
id1
labelImplementação da Busca Composta

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
title
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;
}
Card
id2
labelImplementação do Zoom

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

Deck of Cards
idExemplos
Card
idAvançado 1
labelExemplo 1
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;
}
Card
idAvançado 2
labelExemplo 2
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:

...