Árvore de páginas

Versões comparadas

Chave

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

...

O exemplo abaixo apresenta um exemplo de Dataset sendo visualizado:

Image Modified

Neste exemplo, é possível visualizar os campos disponíveis (conta, titulo, 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.

...

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

Image Modified

Filtro em Datasets - Widget

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

Image Modified

Nota

Observação¹: Em Built-in Datasets ou CardIndex Datasets o filtro por campos metadata funcionarão apenas se forem únicos, ou seja, se deseja filtrar por "metadata#parent_id", o filtro deve estar ativado apenas para ele.

Observação²: Em Datasets customizados, a busca deve ser implementada junto ao seu código de criação.

...

O exemplo abaixo apresenta um exemplo simples de chamada a um Dataset:

Bloco de código
languagejavascript
themeEclipse
firstline1
linenumberstrue
function doTest1() {
	var dataset = DatasetFactory.getDataset("group", null, null, null);
	return dataset.rowsCount;
}

...

Exemplo:

Bloco de código
languagejavascriptjs
themeEclipsefirstline1
linenumberstrue
function doTest2() {
	//Monta as constraints para consulta
	var c1 = DatasetFactory.createConstraint("activeVersion", "true", "true", ConstraintType.MUST);
	var c2 = DatasetFactory.createConstraint("publisherId", "adm", "adm", ConstraintType.MUST_NOT);
	var c3 = DatasetFactory.createConstraint("documentType", "1", "1", ConstraintType.SHOULD);
	var c4 = DatasetFactory.createConstraint("documentType", "2", "2", ConstraintType.SHOULD);
	var c5 = DatasetFactory.createConstraint("documentDescription", "%teste%", "%teste%", ConstraintType.MUST_NOT);
    c5.setLikeSearch(true);
    var constraints   = new Array(c1, c2, c3, c4, c5);
	
	//Define os campos para ordenação
	var sortingFields = new Array("documentPK.documentId");
	
	//Busca o dataset
	var dataset = DatasetFactory.getDataset("document", null, constraints, sortingFields);
	
	for(var i = 0; i < dataset.rowsCount; i++) {
		log.info(dataset.getValue(i, "documentPK.documentId"));
	}
}

...

Existe uma constraint em especial que é utilizada para limitar o número de registros na consulta SQL chamada de sqlLimit. Então é possível definir o número máximo de registros que uma consulta SQL pode retornar, porém o número de registros pode ser menor que o esperado, devido algumas validações que são feitas após o retorno dos dados. Por exemplo: O sqlLimit tem um valor 100 e é feita uma consulta em um serviço de dados de uma definição de formulário, esta consulta retornará os 100 registros, porém após isso são executadas validações para verificar se o formulário está ativo e se o usuário corrente tem permissão para visualizar os dados fazendo com que o retorno possa ser menor que 100. Para o sqlLimit é utilizada a seguinte sintaxe:

Bloco de código
languagejavascriptjs
themeEclipse
firstline1
linenumberstrue
 DatasetFactory.createConstraint("sqlLimit", "10", "10", ConstraintType.MUST);

...

Existe outra constraint especial utilizada somente para acesso a datasets de definições de formulário, ela indica se ao buscar o serviço de dados devem ser retornados APENAS os dados dos formulários da definição de formulário principal. A constraint é a onlyMainCards e por padrão seu valor é false, ou seja, são retornados os dados dos formulários da definição de formulário principal e das definições de formulários filhas.

Bloco de código
languagejs
linenumberstrue
DatasetFactory.createConstraint("onlyMainCards", "true", "true", ConstraintType.MUST);

...

Deck of Cards
startHiddenfalse
effectDuration0.5
historyfalse
idconstraintsamples
effectTypefade
Card
defaulttrue
id1
labelExemplo 1

Para retornar somente as linhas que os códigos estejam entre 1 á 4 usar a seguinte constraint:

Bloco de código
languagejavascriptjs
themeEclipsefirstline1
linenumberstrue
var c1 = DatasetFactory.createConstraint("Código", "1", "4", ConstraintType.MUST);

Retorno:

CódigoNomeCidade
1Javier SpivaSão Paulo
2Cody BallowRio de Janeiro
3Javier NaramoreSão Paulo
4Max NeviusRio de Janeiro
Card
id2
labelExemplo 2

Para retornar somente as linhas que os nomes sejam "Noemi Roiger", "Javier Naramore" e "Lonnie Cadwallader" ou que a cidade seja Brasília, usar as seguintes constraints:

Bloco de código
languagejavascriptjs
themeEclipse
firstline1
linenumberstrue
var c1 = DatasetFactory.createConstraint("nome", "Noemi Roiger", "Noemi Roiger", ConstraintType.SHOULD);
var c2 = DatasetFactory.createConstraint("nome", "Javier Naramore", " Javier Naramore", ConstraintType.SHOULD);
var c3 = DatasetFactory.createConstraint("nome", "Lonnie Cadwallader", "Lonnie Cadwallader", ConstraintType.SHOULD);
var c4 = DatasetFactory.createConstraint("cidade", "Brasília", "Brasília", ConstraintType. SHOULD);

Retorno:

CódigoNomeCidade
3Javier NaramoreSão Paulo
5Noemi RoigerSão Paulo
6Lonnie CadwalladerRio de Janeiro
7Lorrie SpeceBrasília
Card
id3
labelExemplo 3

Para retornar todas as linhas exceto onde a cidade seja Brasília, usar a seguinte constraint:

Bloco de código
languagejavascriptjs
themeEclipse
firstline1
linenumberstrue
var c1 = DatasetFactory.createConstraint("cidade", "Brasília", "Brasília", ConstraintType.MUST_NOT);

Retorno:

CódigoNomeCidade
1Javier SpivaSão Paulo
2Cody BallowRio de Janeiro
3Javier NaramoreSão Paulo
4Max NeviusRio de Janeiro
5Noemi RoigerSão Paulo
6Lonnie CadwalladerRio de Janeiro

...

O fluig permite acessar os Datasets via código JavaScript no HTML de uma definição de formulário utilizando a biblioteca vcXMLRPC.js. Para isto, basta incluir a linha abaixo antes da tag body do HTML:

Bloco de código
languagehtml/xmljs
themeEclipse
linenumberstrue
<script type="text/javascript" src="../vcXMLRPC.js"></script>

...

Exemplo:

Bloco de código
languagejavascriptjs
themeEclipsefirstline1
linenumberstrue
function showNewDatasetFull() {
	var div = document.getElementById("datasetDiv");
  	
	//Busca o dataset
  	try {
    	var dataset = DatasetFactory.getDataset("colleague");
    	div.innerHTML = showDataset(dataset);
  	} catch(erro) {
  	  	div.innerHTML = erro;
  	}
}

function showDataset(dataset) {
	var tabela = "<table>";
  	
	//Monta o cabeçalho
  	tabela += "<tr>";
  	for (var i = 0; i < dataset.columns.length; i++) {
    	tabela += "<th>" + dataset.columns[i] + "</th>";
	}
  	tabela += "</tr>";

  	//Monta os registros  	
  	for (var x = 0; x < dataset.values.length; x++) {
  		tabela += "<tr>";
    	var row = dataset.values[x];
    	for (var y = 0; y < dataset.columns.length; y++) {
    		tabela += "<td>" + row[dataset.columns[y]] + "</td>";
		}
    	tabela += "</tr>";
  	}
  	
	tabela += "</table>";
	return tabela;
}

...

Assim como no método via pontos de customização, quando é preciso filtrar um Dataset é preciso criar as constraints que serão utilizadas na busca. Os argumentos utilizados no método getDataset também são os mesmos que apresentados anteriormente:

Bloco de código
languagejavascriptjs
themeEclipsefirstline1
linenumberstrue
function showNewDatasetPartial() {
	var div = document.getElementById("datasetDiv");
			
	var c1 = DatasetFactory.createConstraint("parentDocumentId", "5", "5", ConstraintType.MUST);
	var c2 = DatasetFactory.createConstraint("documentType", "1", "1", ConstraintType.MUST_NOT);
	var c3 = DatasetFactory.createConstraint("activeVersion", "true", "true", ConstraintType.MUST);
	var constraints   = new Array(c1, c2, c3);
	
	//Define os campos para ordenação
	var fields = new Array("documentPK.documentId", "documentDescription", 
			"documentType", "publisherId", "accessCount");
	var sortingFields = new Array("accessCount", "documentDescription");
	
	//Busca o dataset
  	try {
    	var dataset = DatasetFactory.getDataset("document", fields, constraints, sortingFields);
    	div.innerHTML = showDataset(dataset);
  	} catch(erro) {
  	  	div.innerHTML = erro;
  	}
}

...

No exemplo abaixo, o campo "estado" foi configurado para que as opções do combo sejam criadas a partir do Dataset "estadosBR". Como valor do campo será utilizado o campo "Sigla", embora para o usuário será apresentado o campo "Estado". 

Bloco de código
languagehtml/xmljs
themeEclipse
linenumberstrue
<select name="estado" dataset="estadosBR" datasetkey="Sigla" datasetvalue="Estado"></select>

...

Bloco de código
languagejs
linenumberstrue
<script type="text/javascript" src="/webdesk/vcXMLRPC.js"></script>

...

Bloco de código
languagejs
linenumberstrue
	loadTable: function() {
		var that = this;
		var datasetReturned = DatasetFactory.getDataset("colleague", null, null, null);
		if (datasetReturned != null && datasetReturned.values != null && datasetReturned.values.length > 0) {
			var records = datasetReturned.values;
			for ( var index in records) {
				var record = records[index];
				that.mydata.push({
					id: record.userTenantId,
					name: record.colleagueName,
					email: record.mail
				});
			}
		}
		that.myTable = FLUIGC.datatable('#idtable' + "_" + that.instanceId, {
			dataRequest: that.mydata,
			renderContent: ['id', 'name', 'email'],
			header: [{
				'title': 'Code',
				'dataorder': 'name',
				'size': 'col-md-4'
			}, {
				'title': 'Name',
				'standard': true,
				'size': 'col-md-4'
			}, {
				'title': 'EMAIL',
				'size': 'col-md-4',
				'dataorder': 'ASC'
			}],
			search: {
				enabled: false,
			},
			scroll: {
				target: ".target",
				enabled: true
			},
			actions: {
				enabled: false,
			},
			navButtons: {
				enabled: false,
			},
			draggable: {
				enabled: false
			},
		}, function(err, data) {
			if (err) {
				FLUIGC.toast({
					message: err,
					type: 'danger'
				});
			}
		});
		that.myTable.on('fluig.datatable.loadcomplete', function() {
			if (!that.tableData) {
				that.tableData = that.myTable.getData();
			}
		});
	},

...

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

Bloco de código
languagejavascriptjs
themeEclipsefirstline1
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;
}

...


Veja aqui um exemplo de implementação de um dataset customizado que considere a utilização de uma constraint:

Bloco de código
languagejavascriptjs
themeEclipsefirstline1
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
languagejavascriptjs
themeEclipsefirstline1
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;
}

...

Bloco de código
languagejs
themeEclipse
firstline1
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;
}

...

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
firstline
languagexmljs
themeEclipse
1titleExemplo 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>

...

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 customizado (Exemplo 1), ou ainda um evento de processo ou definição de formulário (Exemplo 2). 

Bloco de código
languagejavascriptjs
themeEclipsefirstline1
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
languagejavascript
themeEclipsefirstline1
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"));
		}
	}

}

...

ParâmetroDescrição
tablename

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

Bloco de código
languagehtml/xmljs
themeEclipsefirstline1
linenumberstrue
<table border="1" tablename="tabelaPecas" addbuttonlabel="Adicionar Peça">
	<!-- Campos Filhos -->
</table>
metadata#idNúmero do formulário.
metadata#versionNúmero da versão do formulário
userSecurityId

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.

...