Histórico da Página
...
Índice | ||||||
---|---|---|---|---|---|---|
|
Datasets
O fluig é um produto uma plataforma que permite disponibilizar informações provindas de várias fontes de dados através de formas variadas de apresentação. É comum que, dependendo da necessidade de cada cliente, seja necessário apresentar ou processar informações referentes a dados do próprio produto da própria plataforma (como usuários, grupos, papéis, tarefas, etc.), dados criados pelo usuário mas gerenciados pelo produto pela plataforma (dados de formulários), dados externos (como entidades de um ERP) ou ainda valores fixo fixos (como uma lista de estados ou unidades de medida).
O fluig possui o componente Dataset que permite padronizar o acesso às informações, independente da origem dos dados, ou seja, é possível acessar informações provenientes de vários locais, como aplicativos externos, banco de dados ou mesmo dos próprios recursos do fluig através de um mesmo componente. Isto significa que, uma vez que um Dataset esteja disponível no sistema, ele poderá ser invocado de qualquer parte do sistema e de forma consistente, independente da sua origem.
Um Dataset disponibiliza operações que permitem visualizar o seu conteúdo, como: consultar quais são as colunas disponíveis, quantas linhas existem ou o valor de cada campo, em cada coluna, e também filtrar os valores de retorno.
O diagrama abaixo apresenta um modelo conceitual sobre os Datasets.
Nota |
---|
Para garantir um melhor desempenho na utilização de datasets consulte Constraints Avançadas e utilize o parâmetro sqlLimit. |
Informações |
---|
A partir da atualização 1.5.11 é possível recuperar a constraint sqlLimit dentro de seus datasets customizados. |
...
Tipos de Datasets
Atualmente existem três tipos de Datasets gerenciados pelo produtopela plataforma:
- Built-in Datasets: Este tipo de Dataset permite navegar em dados das entidades do próprio fluig, como usuários, grupos, processos ou tarefas por exemplo. Esses datasets são pré-definidos no produto e na plataforma e não podem ser alterados pelo usuário;
Para ver detalhes dos datasets internos disponbilizados disponibilizados pelo Fluigfluig, acesse Datasets internos fluig - CardIndex Datasets: Este tipo de Dataset permite navegar nos dados existentes em formulários de uma determinada definição de formulário publicada no fluig. Para que uma definição de formulário seja disponibilizada como Dataset, é necessário preencher o campo Nome Dataset na publicação da definição de formulário. O valor informado será utilizado para a busca do Dataset no fluig;
- Customized Dataset: Este tipo de Dataset permite navegar nos dados retornados por uma customização, onde é possível definir as colunas do Dataset e os valores de cada um dos registros, através da codificação em JavaScript. Os Datasets customizados podem ser utilizados em uma grande gama de situações, como para por exemplo: definição de uma lista de valores fixos (como estados de um país) ou para extração de dados de um serviço externo (via WebServices, por exemplo).
...
Em um terceiro momento, pode-se optar por migrar o Dataset novamente para o tipo customizado, mas 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 campos.
Visualizando Datasets
Via fluig Studio
Nota | ||
---|---|---|
| ||
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 na aba "Gerais" do Painel de Controle do fluig. Saiba como realizar esse procedimento clicando aqui. |
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 customizados.
O exemplo abaixo apresenta um exemplo de Dataset sendo visualizado:
Neste exemplo, é possível visualizar os campos disponíveis (conta, titulotí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.
...
O exemplo abaixo apresenta um exemplo de Dataset sendo visualizado pela widget:
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:
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. |
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.
...
- Campo: Nome do campo que será filtrado;
- Valor Inicial: Valor inicial da faixa de valores do filtro
- Valor Final: Valor final da faixa de valores do filtro
- Tipo: Tipo da condição, podendo ser:
- MUST: indica que todos os registros do Dataset devem satisfazer a esta condição.
- SHOULD: indica que os registros do Dataset podem ou não atender à condição. Esse tipo é mais comum quando se necessita que um mesmo campo tenha valores A ou B (onde cada um será uma condição de busca com tipo SHOULD).
- MUST_NOT: indica que nenhum dos registros pode satisfazer a condição.
...
Após a criação da constraint, é possível informar que esta será utilizada na consulta em formato de LIKE, ou seja, o valor retornado poderá conter qualquer letra ou sequência de letras no lugar do símbolo '%'. Isso é feito chamando o método setLikeSearch(true) para a constraint que se deseja este comportamento, conforme exemplificado na implementação abaixo, na constraint c5, onde pretende-se retornar todos os registros que NÃO possuam (pois é uma constraint MUST_NOT) a palavra "teste" na descrição do documento.
...
Considere os valores da tabela abaixo sendo utilizadas como um serviço de dados a partir de uma definição de formulário para exemplificação dos exemplos:
Código | Nome | Cidade |
---|---|---|
1 | Javier Spiva | São Paulo |
2 | Cody Ballow | Rio de Janeiro |
3 | Javier Naramore | São Paulo |
4 | Max Nevius | Rio de Janeiro |
5 | Noemi Roiger | São Paulo |
6 | Lonnie Cadwallader | Rio de Janeiro |
7 | Lorrie Spece | Brasília |
Verifique os exemplos de retorno de dados abaixo:
Deck of Cards | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Via JavaScript em formulário
...
O fluig permite especificar um Dataset em um campo select (combo-box). Quando isto é feito, as opções do combo são automaticamente criadas de acordo com os dados do Dataset. Para isso, é necessário adicionar três propriedades adicionais à tag:
Propriedade | Descrição |
---|---|
dataset | Determina o Dataset utilizado |
datasetkey | Determina qual coluna do Dataset será utilizada como valor do campo |
datasetvalue | Determina qual coluna do Dataset será utilizada como rótulo das opções do combo |
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".
...
O fluig disponibiliza um conjunto de WebServices que permitem integrar aplicações de terceiros ao produtoà plataforma. Dentre os serviços disponibilizados, o serviço ECMDatasetService permite fazer o acesso a um Dataset. Para verificar a lista de serviços disponíveis no fluig, acesso a URL http://<servidor>:<porta>/webdesk/services.
...
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 customizado. 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:
Propriedade | Descrição |
---|---|
fieldName | Nome do campo |
initialValue | Valor inicial para filtro neste campo |
finalValue | Valor final para filtro neste campo |
contraintType | 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 |
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 | ||||||
---|---|---|---|---|---|---|
| ||||||
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 versã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 | ||||
---|---|---|---|---|
| ||||
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 customizado com dados fíxos.
...
Bloco de código | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
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 | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
<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 customizado de definição de formulário "pai-filho"
...
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
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:
Parâmetro | Descrição | |||||||||
---|---|---|---|---|---|---|---|---|---|---|
tablename | Atributo utilizado para nomear cada tabela filha do HTML. Exemplo:
| |||||||||
metadata#id | Número do formulário. | |||||||||
metadata#version | Número da versão do formulário | |||||||||
userSecurityId | Código do usuário que será validada a permissão no formulário
|
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:
Customização de dataset via integração
...
Guia de Referência de Datasets
Dataset Factory
Retorno | Método e Descrição |
---|---|
SearchConstraint | createConstraint(java.lang.String field, java.lang.String initialValue, java.lang.String finalValue, ConstraintType type) Cria uma nova constraint para a seleção de registros do Dataset. |
java.util.List<java.lang.String> | getAvailableDatasets() Retorna uma lista de todos os Datasets disponíveis no sistema. |
DefaultDataset | getDataset(java.lang.String name, java.lang.String[] fields, SearchConstraint[] constraints, java.lang.String[] order) Carrega os dados de um Dataset. |
Dataset
Retorno | Método e Descrição |
---|---|
void | addColumn(java.lang.String colName) Adiciona uma coluna ao Dataset. |
void | addRow(java.lang.Object[] values) Adiciona uma linha ao Dataset. |
java.lang.String | getColumnName(int colNum) Retorna o nome de uma coluna do Dataset. |
java.lang.String[] | getColumnsName() Retorna um array com os nomes das colunas do Dataset. |
int | getColumnsCount() Retorna a quantidade de colunas de um Dataset. |
java.util.ArrayList<java.util.HashMap<java.lang.String,java.lang.Object>> | getMap() 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. |
int | getRowsCount() Retorna a quantidade de linhas disponíveis no Dataset. |
DefaultDataset | getSubDataset(java.lang.String field, java.lang.Object value) Retorna um subconjunto dos dados do Dataset, na forma de um novo Dataset. |
java.lang.Object | getValue(int row, int col) Retorna o valor armazenado no Dataset, na linha e coluna passadas por parâmetro. |
java.lang.Object | getValue(int row, java.lang.String colName) Retorna o valor armazenado no Dataset, na linha passada e campo passados por parâmetro. |
java.lang.Object[][] | getValues() Retorna todos os valores de um Dataset, na forma de um array bidimensional. |
java.sql.ResultSet | toResultSet() Retorna um ResultSet contendo os dados do Dataset. |
...
Informações | ||
---|---|---|
| ||
Veja mais vídeos how to sobre datasets em: Datasets - Consulta, criação e registros. |
...