Árvore de páginas

Versões comparadas

Chave

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

...

Índice
outlinetrue
exclude.*ndice
stylenone

 


Nota

Este recurso está disponível a partir da Atualização 1.5.5 da plataforma fluig.

...


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 tratam-se de sistemas externos não é possível para o fluig garantir tanto a performance quanto a disponibilidade desses serviços de dados. Eventuais problemas de performance ou disponibilidade impactarão o desempenho do fluig e podem até mesmo inviabilizar o uso de determinado processo workflow. 

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, mas 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. 

Nota
titleObservaçã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

...

Exclusivamente dentro desta função estão disponíveis os seguintes métodos para definição da tabela:

RetornoMétodo | Descrição
AddColumnAddColumn(String field, DatasetFieldType type)
Cria um campo na tabela com o nome e tipo informados. O nome sempre deve ser informado em caracteres maiúsculos. 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
DatasetFieldType.TEXT
setKeysetKey(Object[] fields) 
Determina quais são os campos chaves para o dataset. No banco de dados será criado um índice 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 com a função addColumn. Devem ser informados em caracteres maiúsculos.
addIndexaddIndex(Object[] fields) 
Permite adicionar mais índices para obtenção de maior performance nas consultas do dataset. Devem ser informados em caracteres maiúsculos.


Exemplo:

Bloco de código
languagejavascript
themeEclipse
firstline1
linenumberstrue
function defineStructure() {
	addColumn("CE_CODIGO", DatasetFieldType.NUMBER);
	addColumn("CE_LOJA");
	addColumn("CE_NUMTIT", DatasetFieldType.NUMBER);
	addColumn("CE_PARCELA");
	addColumn("CE_PEFIXO");
	addColumn("CE_TIPO");
	addColumn("CE_VALOR", DatasetFieldType.NUMBER);
	addColumn("CE_INSS");
	addColumn("CE_ISS");
	addColumn("CE_IRRF");
	addColumn("DT_TITULO", DatasetFieldType.DATE);
	addColumn("CE_PIS");
	addColumn("CE_COFINS");
	addColumn("LogicoLOGICO", DatasetFieldType.BOOLEAN);
	setKey([ "CE_CODIGO", "CE_NUMTIT" ]);
	addIndex([ "CE_CODIGO" ]);
	addIndex([ "CE_CODIGO", "CE_LOJA", "CE_NUMTIT" ]);
}
Nota
titleImportante
  • A função defineStructure é obrigatória para configuração do dataset offline. Dentro do defineStructure, os nomes informados nos métodos coluna (addColumn), chave (setKey) e índice (addIndex) devem ser sempre em maiúsculo.
  • O tipo de campo DatasetFieldType.TEXT foi introduzido na Atualização 1.6.1 da plataforma fluig. Este tipo foi desenvolvido especificamente para sincronização de datasets em ambientes que utilizam o banco de dados Oracle, onde o tipo DatasetFieldType.STRING é limitado a apenas 255 caracteres. O tipo de campo TEXT em Oracle suporta até 4000 caracteres. Em ambientes MySQL e SQL Server, não há distinção no comportamento dos tipos TEXT e STRING.
  • 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.

  • Lembre-se que os nomes das colunas dos datasets serão os nomes das colunas criadas em banco. Lembre-se de considerar as regras de nomenclatura de campos do seu banco. Não utilizar espaços em branco no nome ou caracteres especiais como (!@#$%-+=, etc) ou palavras reservadas do banco. Caso utilize a nomenclatura não permitida, não será possível sincronizar os dados na tabela.

  • Não definir um campo com o nome ID. Internamente a sincronização cria um campo com este nome para fins de paginação e gerenciamento de registros. Ao criar uma metalista com este nome ocorrerá um erro de campo duplicado ao tentar criar a tabela de sincronização.
  • Os comandos AddIndex e AddKey não irão gerar índices nas tabelas de bancos de Dados SQLServer. Os comandos podem ser implementados no código do porém os índices de tabela deverão ser criados via ferramenta de administração do banco. Os campos informados no comando addKey serão utilizados como campos para controle de registros duplicados e nas operação de adição, remoção e modificação de registros.

 


Sincronização de informações

...

Bloco de código
languagejavascript
themeEclipse
firstline1
linenumberstrue
function onSync(lastSyncDate) {
	var dataset = DatasetBuilder.newDataset();
	var integracao = ServiceManager.getService('FLUIG3');
	var serviceLocator = integracao
			.instantiate('pkgWkfSolicPagamento.FLUIGLocator');
	var service = serviceLocator.getFLUIGSOAP();
	var cdEmp = 1; // código empresa pagadora
	var cdFilial = 0; // todas as filiais
	var cdTitulo = 0; // todos os titulos
	var cdPrefixo = ""
	var cnpj = 0; // cnpj fornecedor
	var codForn = 0; // cod universal para todos os fornecedores
	var lojaForn = 0; // loja fornecedor
	// Invocando o servico passando a data da ultima sincronização com o fluig.
	// O webservice foi preparado para trazer apenas os dados desde a ultima
	// sincronização.
	var retorno = service.CONSPAG(cdEmp, cdFilial, cdTitulo, cdPrefixo, cnpj,
			codForn.toString(), lojaForn.toString(), lastSyncDate);
	var arrayListaTitulo = retorno.getLISTACPAG();
	for (var i = 0; i < arrayListaTitulo.length; i++) {
		var r = arrayListaTitulo[i];
		if (r.getCE_TIPO() == "ADD") {
			newDataset.addRow(new Array(r.getCE_CODIGO(), r.getCE_LOJA(), r
					.getCE_NUMTIT(), r.getCE_PARCELA(), r.getCE_PEFIXO(), r
					.getCE_TIPO(), r.getCE_VALOR(), r.getCE_INSS(), r
					.getCE_ISS(), r.getCE_IRRF(), new java.util.Date(r.getDT_TITULO()), r
					.getCE_PIS(), r.getCE_COFINS()));
		} else if (r.getCE_TIPO() == "MOD") {
			
			newDataset.updateRow(new Array(r.getCE_CODIGO(), r.getCE_LOJA(), r
					.getCE_NUMTIT(), r.getCE_PARCELA(), r.getCE_PEFIXO(), r
					.getCE_TIPO(), r.getCE_VALOR(), r.getCE_INSS(), r
					.getCE_ISS(), r.getCE_IRRF(), new java.util.Date(r.getDT_TITULO()), r
					.getCE_PIS(), r.getCE_COFINS()));
			
		} else if (r.getCE_TIPO() == "DEL") {
			
			newDataset.deleteRow(new Array(r.getCE_CODIGO(), r.getCE_LOJA(), r
					.getCE_NUMTIT(), r.getCE_PARCELA(), r.getCE_PEFIXO(), r
					.getCE_TIPO(), r.getCE_VALOR(), r.getCE_INSS(), r
					.getCE_ISS(), r.getCE_IRRF(), new java.util.Date(r.getDT_TITULO()), r
					.getCE_PIS(), r.getCE_COFINS()));
			
		} else {
			// Estado do registro é desconhecido no cache 
			newDataset.addOrUpdateRow(new Array(r.getCE_CODIGO(), r.getCE_LOJA(), r
					.getCE_NUMTIT(), r.getCE_PARCELA(), r.getCE_PEFIXO(), r
					.getCE_TIPO(), r.getCE_VALOR(), r.getCE_INSS(), r
					.getCE_ISS(), r.getCE_IRRF(), new java.util.Date(r.getDT_TITULO()), r
					.getCE_PIS(), r.getCE_COFINS()));
			
			
		}
	}

	return dataset;
}

...


Como funciona a sincronização das informações

...

Ao executar os métodos createDataset ou OnSync nas tarefas de sincronização o fluig irá montar inicialmente em memória quatro coleções de registros que serão alimentadas de acordo com o comando utilizado pelo desenvolvedor.

ColeçãoMétodo
Registros novosaddRow
Eliminados deleteRow
Modificados updateRow
Modificados ou CriadosaddOrUpdateRow

 


Com as coleções montadas, a ordem que o fluig utiliza para fazer a efetivação no banco é a seguinte.

1Registros eliminados
2Linhas alteradas
3Linhas alteradas ou criadas
4Novas linhas

Isso é necessário para que as alterações e efetivações de registros no banco sejam gerenciadas pelo fluig, afim de garantir melhor performance e obter um tempo reduzido na sincronização de informações.

 


Cache de dados no mobile

Quando se tem em mente um dispositivo móvel, imediatamente surge a questão do espaço ocupado por uma aplicação. A função onMobileSync é chamada apenas durante a atualização de um dataset offline já existente. Esta função recebe o usuário autenticado no dispositivo como parâmetro e retorna todos os campos.

Quando o aplicativo realiza a primeira sincronização, ao fazer o carregamento inicial dos dados, está função não será executada.

Lembre-se de que todas as colunas informadas no código devem estar em caracteres maiúsculos.

Exemplo:

Bloco de código
languagejavascript
themeEclipse
firstline1
linenumberstrue
 function onMobileSync(user) {
	var sortingFields = new Array();
	var constraintTitulo1 = DatasetFactory.createConstraint('CE_CODIGO',
			'1', '1', ConstraintType.MUST);
	var constraints = new Array(constraintTitulo1);
		
	var colunastitulo = new Array('CE_CODIGO', 'CE_LOJA', 'CE_NUMTIT', 'CE_PARCELA',
			'CE_PARCELA');
	var result = {
		'fields' : colunastitulo,
		'constraints' : constraints,
		'sortingFields' : sortingFields
	};
	return result;
} 

...


Acessando um Dataset com sincronização 

...

  • Ligar ou desligar a sincronização de datasets em tabelas do servidor fluig.
  • Ligar o desligar cache de informações de datasets em dispositivos mobile.
  • Editar agendamentos para os datasets sincronizados.
  • Consultar o dataset - consulta do código fonte do dataset.
  • Consultar os dados do dataset
  • Apagar todos os dados - Permite apagar os dados sincronizados para reiniciar a sincronização.

 


Configurando comportamento de acesso a datasets em dispositivos mobile

...

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

 


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

...

Este recurso é apenas um facilitador para o administrador verificar rapidamente o código do dataset. É importante o administrador do fluig se certificar 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 sincronização de informações. Esta função pode ser acessada através do menu lateral, ao lado da coluna ultima sincronização deve-se escolher a opção "Consultar Dataset" .

 


Apagar os dados

Essa opção permite ao administrador remover a tabela que contem os dados sincronizados com o servidor. Importante notar que os dados não serão apagados imediatamente após a confirmação da mensagem e sim na próxima execução da tarefa de sincronização. A próxima tarefa de sincronização criará uma nova tabela gravando os dados daquela execução. A tabela que abrigava os dados antes da ordem de eliminação de dados será removida junto com seus registros.