Histórico da Página
...
- Sincronização Comum: Este tipo de sincronização pode ser feita com qualquer dataset já implementado na plataforma. Neste modelo de sincronização toda vez que a tarefa agendada de sincronização de datasets for executada será criada uma nova tabela e todos os registros retornados pelo método createDataset serão copiados para esta nova tabela. A tabela anterior será removida do banco. Esse modelo não é recomendado para datasets que retornam muitos registros.
- Sincronização Jornalizada: Este tipo de sincronização permite a atualização e cópia incremental de registros de acordo com o retorno do método onSync do dataset. Através do método defineScructure é possível definir de forma mais detalhada quais são os campos da tabela bem como seus tipos. Também é possível criar índices e uma chave principal para obter ainda mais performance durante as consultas aos dados do dataset. No método OnSync é possível determinar quais são as linhas novas a serem adicionadas na tabela como na sincronização comum. Com os métodos updateRow e deleteRow através da configuração da chave é possível atualizar registros já existentes bem como eliminar registros. Esse modelo é o recomendado para situações em que há uma grande quantidade de dados.
- Sincronização mobile: Este modelo de sincronização pode ser utilizado com qualquer dataset, seja ele sincronizado no servidor ou não, e permite a cópia local dos registros de um dataset em um dispositivo mobile que sincronize de forma offline com o fluig. Os prazos de sincronização são configurados no aplicativo fluig Mobile.
Como funciona a sincronização das informações
É importante ter em mente como funciona a sincronização e gravação de informações do dataset para tabelas de banco de dados. A forma como os dados são inseridos na base de dados é gerida pelo fluig e desta forma o momento em que os registros são inseridos, editados ou excluídos no código do dataset não é o mesmo momento que na prática essas operações serão realizadas.
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 são alimentadas de acordo com o comando utilizado pelo desenvolvedor :
(Andressa montar uma tabela aqui)
Registros Novos - addrow
Eliminados - deleteRow
Modificados - updateRow
Modificados Ou Criados - AddOrUpdateRow
Com essas coleções montadas a ordem que o fluig usa para efetivar no banco é esta :
(Andressa - outra tabela talvez com uma numeração na frente).
Registros eliminados
Linhas Alteradas
Linhas Alteradas ou criadas
Novas linhas .
Isso se fez necessário para que as alterações e efetivações de registros no banco sejam gerenciadas pelo fluig afim de garantir uma boa performance e obter um tempo reduzido na sincronização de informações.
Desenvolvendo um dataset com sincronização jornalizada
Definindo a estrutura do dataset
Para definir a estrutura de um dataset jornalizado é necessário definir a estrutura fixa da tabela no código do dataset. Para isso no código do dataset deverá ser criado o método defineScructure.
Exclusivamente dentro desta função estão disponíveis os seguintes métodos para definição da tabela:
Retorno | Método | Descrição |
---|---|
AddColumn | AddColumn(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 DatasetFieldType.TEXT |
setKey | setKey(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. |
addIndex | addIndex(Object[] fields) Permite adicionar mais índices para obtenção de maior performance nas consultas do dataset. |
Exemplo:
Desenvolvendo um dataset com sincronização jornalizada
Definindo a estrutura do dataset
Para definir a estrutura de um dataset jornalizado é necessário definir a estrutura fixa da tabela no código do dataset. Para isso no código do dataset deverá ser criado o método defineScructure.
Exclusivamente dentro desta função estão disponíveis os seguintes métodos para definição da tabela:
Retorno | Método | Descrição |
---|---|
AddColumn | AddColumn(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 DatasetFieldType.TEXT |
setKey | setKey(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. |
addIndex | addIndex(Object[] fields) Permite adicionar mais índices para obtenção de maior performance nas consultas do dataset. |
Exemplo:
Bloco de código | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
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 | ||||||||
Bloco de código | ||||||||
| ||||||||
function defineStructure() { addColumn("CE_CODIGO", DatasetFieldType.NUMBER); addColumn("CE_LOJAPIS"); addColumn("CE_NUMTITCOFINS", DatasetFieldType.NUMBER); addColumn("CE_PARCELA"Logico", DatasetFieldType.BOOLEAN); addColumn(setKey([ "CE_CODIGO", "CE_PEFIXONUMTIT" ]); addColumnaddIndex([ "CE_TIPOCODIGO" ]); addColumnaddIndex([ "CE_VALORCODIGO", DatasetFieldType.NUMBER); addColumn("CE_INSS"); addColumn(LOJA", "CE_ISSNUMTIT"); addColumn("CE_IRRF"); addColumn("DT_TITULO", DatasetFieldType.DATE); addColumn("CE_PIS"); addColumn("CE_COFINS"); addColumn("Logico", DatasetFieldType.BOOLEAN); setKey([ "CE_CODIGO", "CE_NUMTIT" ]); addIndex([ "CE_CODIGO" ]); addIndex([ "CE_CODIGO", "CE_LOJA", "CE_NUMTIT" ]); } | ||||||||
Nota | ||||||||
|
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á chamado à cada execução da tarefa agendada.
Para que a sincronização aconteça deve ser criada uma tarefa no 'Agendador de tarefas' do fluig com o tipo 'Sincronização de dataset', selecionando qual dataset deverá ser sincronizado e em que período.
Dentro da função onSync deverá ser criado um objeto do tipo dataset onde as novas linhas deverão ser adicionadas pelo método addRow e linhas a serem atualizadas ou removidas pelos métodos updateRow e deleteRow, respectivamente.
Os métodos updateRow e deleteRow recebem uma lista de objetos que são os valores das linhas (da mesma forma que já ocorre com o método addRow).
Exemplo:
]);
} |
Nota | ||
---|---|---|
| ||
|
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á chamado à cada execução da tarefa agendada.
Para que a sincronização aconteça deve ser criada uma tarefa no 'Agendador de tarefas' do fluig com o tipo 'Sincronização de dataset', selecionando qual dataset deverá ser sincronizado e em que período.
Dentro da função onSync deverá ser criado um objeto do tipo dataset onde as novas linhas deverão ser adicionadas pelo método addRow e linhas a serem atualizadas ou removidas pelos métodos updateRow e deleteRow, respectivamente.
Os métodos updateRow e deleteRow recebem uma lista de objetos que são os valores das linhas (da mesma forma que já ocorre com o método addRow).
Exemplo:
Bloco de código | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
function onSync(lastSyncDate) {
var dataset = DatasetBuilder.newDataset();
| ||||||||
Bloco de código | ||||||||
| ||||||||
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; } .getCE_PIS(), r.getCE_COFINS())); } } return dataset; } |
Como funciona a sincronização das informações
É importante saber como funciona a sincronização e gravação de informações do dataset para tabelas de banco de dados. A forma como os dados são inseridos na base de dados é gerida pelo fluig e desta forma o momento em que os registros são inseridos, editados ou excluídos no código do dataset, não é o mesmo momento em que na prática, essas operações serão realizadas.
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.
Registros Novos | addrow |
Eliminados | deleteRow |
Modificados | updateRow |
Modificados ou Criados | AddOrUpdateRow |
Com as coleções montadas, a ordem que o fluig utiliza para fazer a efetivação no banco é a seguinte.
1 - Registros eliminados |
---|
2 - Linhas Alteradas |
3 - Linhas Alteradas ou criadas |
4 - Novas 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
...