Índice

 

Conceito

A sincronização de datasets tem como objetivo reduzir o número de acessos a serviços de dados fornecidos por produtos externos ao Fluig. É uma prática comum trazer dados de sistemas externos para complementar informações do formulário de um processo ou realizar validações em eventos com base nas informações retornadas por este dataset. Em um exemplo mais específico vamos supor que o usuário precisa informar no formulário de seu processo o centro de custo e que a lista dos centros de custo válidos está disponível em um sistema externo. Para que este usuário consiga informar um centro de custo válido ele deverá através de um formulário acessar um campo com pesquisas que por sua vez solicita informações para o dataset que quando executado através do fluig faz acesso ao serviço de dados do sistema externo. Se este workflow possuir uma média de cinco mil abertura de processo por dia teremos pelo menos cinco mil acessos a este sistema externo que em muitos casos acaba retornando sempre as mesmas informações ou tendo uma variação muito pequena de informações entre uma consulta e outra . O desenho abaixo ilustra como funciona o ciclo de acesso do usuário a uma informação externa ao fluig.

 

Contudo como trata-se de  sistemas externos não é possível para o fluig garantir tanto a performance quanto a disponibilidade desses serviços de dados. Em eventuais de problemas de performance ou disponibilidade impactarão o desempenho do fluig e podem até mesmo inviabilizar o uso de determinado processo workflow como um todo. 

No modelo de dados sincronizados o fluig através de uma tarefa agendada realiza a consulta do sistema externo e copia os dados retornados para uma tabela espelho criada dentro do banco de dados do fluig.

 

Uma vez que a primeira sincronização tenha sido concluída com sucesso todas as consultas realizadas neste dataset não irão mais consultar o sistema externo e sim a tabela que foi espelhada pela tarefa agendada. Em nosso cenário hipotético caso o administrador do sistema opte por agendar a tarefa que atualiza a lista de centros de custo uma vez por dia. Após a sincronização a performance e a disponibilidade do sistema externo não afetarão mais a performance do fluig e dos sistemas workflow como um todo. 

Observação¹: A Sincronização de datasets em tabelas do fluig só pode ser utilizada em datasets do tipo customizados .

Tipos de Sincronização de datasets

Atualmente existem três tipos de sincronização com datasets.

Desenvolvendo um Dataset com Sincronização Jornalizada.

Definindo a Estrutura

Para definir a estrutura de um dataset jornalizado é necessário definir a estrutura fixa da tabela no código do dataset. Para isso deverá ser criado o método defineScructure dentro do código do dataset. Exclusivamente dentro desta função estão disponíveis os seguintes métodos para definição da tabela.

 

RetornoMétodo e Descrição
AddColumnAddColumn(String field, DatasetFieldType type) 
Cria um campo na tabela com o nome e tipo informados. O tipo de campo pode ser omitido e neste caso o campo será criado com o tipo String. Os tipos disponíveis são :
DatasetFieldType.NUMBER
DatasetFieldType.DATE
DatasetFieldType.BOOLEAN
DatasetFieldType.STRING
setKeysetKey(Object[] fields) 
Determina quais são os campos chaves para o dataset. No banco de dados será criado um indice utilizando os campos informados neste método. Esses campos serão utilizados na localização dos registros para atualização ou remoção das linhas através dos métodos updateRow e deleteRow. Importante informar apenas campos que foram previamente definidos coma função addColumn.
addIndexaddIndex(Object[] fields) 
Permite adicionar mais índices para obtenção de maior performance nas consultas do dataset.

Exemplo:

function defineStructure() {
	
	addColumn("Sigla");
	addColumn("Estado");
	addColumn("Capital");
	addColumn("Area", DatasetFieldType.NUMBER);
	addColumn("Fundacao", DatasetFieldType.DATE);
	addColumn("Logico", DatasetFieldType.BOOLEAN);
	setKey(["Sigla","Estado"]);
 	addIndex(["Estado"]);
	addIndex(["Estado","Capital","Area"]);
	
}

Na atualização do dataset caso ocorra qualquer alteração neste método que indique alteração da estrutura da tabela ocorrerá o drop da tabela antiga e todos os dados anteriores a esta alteração serão perdidos . A alteração de estrutura da tabela ocorrerá na próxima execução da tarefa agendada de sincronização do dataset.

Sincronização de informações.

Para a transferência de dados do dataset para a tabela deverá ser definida a função onSync que será executada toda vez que a tarefa agendada for executada . Dentro desta função deverá ser criado um objeto do tipo dataset aonde deverão ser adicionas as linhas novas no método addRow e linhas a serem manutenidas nos métodos updateRow e deleteRow. Os métodos updateRow e deleteRow recebem uma lista de objetos que são os valores das linhas da mesma forma que o addRow já funciona hoje. 

Exemplo:

function onSync() {
	
	var dataset = DatasetBuilder.newDataset();
     
    //Cria os registros
    dataset.addRow(new Array("AM", "Amazonas", "Manaus", 1570746, new java.util.Date(), false));
    dataset.addRow(new Array("PA", "Pará", "Belém", 1247690, new java.util.Date(), false));
    dataset.addRow(new Array("MT", "Mato Grosso", "Cuiabá", 903358, new java.util.Date(), false));
    dataset.addRow(new Array("TO", "Tocantins", "Palmas", 277621, new java.util.Date(), false));
    dataset.addRow(new Array("PI", "Piauí", "Teresina", 251529, new java.util.Date(), false));
    
    dataset.updateRow(new Array("PI", "Piauí", "ABC", 251529, new java.util.Date(), false));
    dataset.deleteRow(new Array("TO", "Tocantins"));
  
     
    log.info("Total de linhas adicionadas " + dataset.getRowsCount() );
    
    return dataset;
}

Na atualização do dataset caso ocorra qualquer alteração neste método que indique alteração da estrutura da tabela ocorrerá o drop da tabela antiga e todos os dados anteriores a esta alteração serão perdidos . A alteração de estrutur

Cache de dados no mobile

Para realização de cópia de dados em dispositivos mobile é necessário criar a função onMobileSync que recebe o usuário logado no dispositivo como parâmetro. Neste método é possível criar constraints, definir os campos pelo qual a consulta será ordenada e definir quais campos do dataset serão armazendos no dispositivo mobile. O objetivo deste método é filtrar as informações do dataset para que seja armazenado apenas as informações relevantes para a execução do processo em dispositivo mobile.

Exemplo:

 function onMobileSync(user) {
   
    var sortingFields = new Array();
    var constraintColleague2 = DatasetFactory.createConstraint('adminUser', 'true', 'true', ConstraintType.MUST);
    var constraints   = new Array(constraintColleague2);
    var colunasColleague = new Array('adminUser', 'colleagueName', 'colleaguePK.colleagueId', 'login');
    
    var result = {'fields':colunasColleague, 'constraints':constraints, 'sortingFields':sortingFields};
	
     return result;
} 

 

Acessando um Dataset com sincronização 

O acesso a datasets sincronizados seja ele jornalizado ou não permance exatamente igual ao acesso de qualquer dataset não sendo necessário passar nenhum parâmetro extra .

Configurando a sincronização de datasets 

No painel de controle existe uma opção chamada datasets na aba "gerais" . Acessando essa tela temos uma listagem de todos os datasets cadastrados no produto. Neta tela é possível :

Configurando comportamento de acesso a datasets em dispositivos mobile

Clicando no lápis ao lado do valor da coluna "Offline mobile" é possível definir como será o comportamento do dispositivo mobile para realização do cache de informações bem como o acesso a essas informações de acordo com o estado do dispositivo.

Nesta tela temos as seguintes opções :

Utilize os botão salvar para confirmar as alterações. 

Configurando sincronização de dados para o servidor do flug.

Clicando no lápis ao lado do valor da coluna "Sincronizar Dataset" é possível definir que determinado dataset customizado irá sincronizar as linhas obtidas para dentro de uma tabela Fluig.

A opção "Sincronizar com o servidor?" irá ativar o modo de sincronia de dados no servidor.

Editando agendamentos

Após definir que determinado dataset é sincronizado no servidor do fluig deverá ser agendada pelo menos uma execução da tarefa de sincroniza de datasets para isso será necessário acessar o menu lateral ao lado da coluna ultima sincronização e escolha a opção "Editar Agendamentos" .

 

Nesta tela deverão ser preenchidos obrigatoriamente os seguintes campos :

As outras informações se referem a frequência e horário de execução da tarefa e segue o mesmo padrão dos outros tipos de tarefa agendada que existe no fluig.

Consultando o dataset

Essa função é apenas um facilitador para o administrador do sistema verificar rapidamente o código do dataset. É importante o administrador do fluig se sertificar se os métodos onSync, defineStructure, createDataset e onSyncmobile estão implementadas para que ele possa decidir se liga ou desliga a geração de cache e sinicronização de informações. Esta função pode ser alcançada através do menu lateral ao lado da coluna ultima sincronização e escolha a opção "Consultar Dataset" .

Consultar dados.

Essa função é apenas um facilitador para o administrador do sistema verificar rapidamente o código do dataset. É importante o administrador do fluig se sertificar se os métodos onSync, defineStructure, createDataset e onSyncmobile estão implementadas para que ele possa decidir se liga ou desliga a geração de cache e sinicronização de informações. Esta função pode ser alcançada através do menu lateral ao lado da coluna ultima sincronização e escolha a opção "Consultar Dados" .

Nesta tela também é possível definir o número de linhas a serem retornadas na consulta e é possível fazer um busca com os dados que aparecem na tela.

Apagar os dados.

Essa opção permite ao administrador dropar a tabela que contem os dados sincronizados com o servidor. Na próxima execução da tarefa de sincronização será criada uma nova tabela aonde os registros retornados pela tarefa aonde os registros serão incluidos.