Tempo aproximado para leitura: 00:05:00 min
Dúvida
Ao acessar o Dataset em painel de controle para ativar a sincronização retorna o aviso "Este Dataset não está completamente preparado para sincronização, sendo necessário implementar a estrutura padrão para utilizá-lo em cache ou Offline mobile."
Ambiente
TOTVS Fluig Plataforma - Desenvolvimento - Todas as versões
Solução
Para um Dataset estar disponível offline, é necessário implementar algumas funções padrões no desenvolvimento, mesmo que elas estejam vazias.
Na documentação, há um tópico que detalha essas exigências:
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.
Você pode acessar o link para mais informações: https://tdn.totvs.com/pages/viewpage.action?pageId=212899013#Sincroniza%C3%A7%C3%A3odedatasets-Definindoaestruturadodataset
Abaixo, segue um exemplo de como desenvolver um Dataset que pode ser configurado para funcionar offline.
/**
* Datasets
*
* O componente Dataset, padroniza o acesso as informações, independente da origem dos dados.
* É possível visualizar ou processar informações na própria plataforma ou através de integração
*
* Para maiores informações, acesse nossa documentação sobre Desenvolvimento de Datasets:
* https://tdn.totvs.com/display/fluig/Desenvolvimento+de+Datasets
*
* Dataset Simples: https://tdn.totvs.com/display/fluig/Dataset+Simples
* Dataset Avançado: https://tdn.totvs.com/pages/viewpage.action?pageId=412888219
*
*/
/**
* createDataset: função responsável criar a instrução que o Dataset irá executar.
* Nesse exemplo, está consultando o banco de dados da plataforma e retornando uma lista de usuários
*
* @param fields
* @param constraints
* @param sortFields
*
*/
function createDataset(fields, constraints, sortFields) {
log.info(" -------------------------------------------------------- ");
var newDataset = DatasetBuilder.newDataset();
log.info("Consulta para retornar os usuários da plataforma: " + myQuery);
var tenantId = getValue("WKCompany");
var dataSource = "/jdbc/AppDS";
var ic = new javax.naming.InitialContext();
var ds = ic.lookup(dataSource);
var created = false;
var myQuery = "select ut.email, ut.login from fdn_usertenant ut where ut.TENANT_ID = " + tenantId;
try {
var conn = ds.getConnection();
var stmt = conn.createStatement();
var rs = stmt.executeQuery(myQuery);
var columnCount = rs.getMetaData().getColumnCount();
while (rs.next()) {
if (!created) {
for (var i = 1; i <= columnCount; i++) {
newDataset.addColumn(rs.getMetaData().getColumnName(i));
}
created = true;
}
var Arr = new Array();
for (var i = 1; i <= columnCount; i++) {
var obj = rs.getObject(rs.getMetaData().getColumnName(i));
if (null != obj) {
Arr[i - 1] = rs.getObject(rs.getMetaData().getColumnName(i)).toString();
} else {
Arr[i - 1] = "null";
}
}
newDataset.addRow(Arr);
}
} catch (e) {
log.error("ERRO==============> " + e.message);
} finally {
if (rs != null) {
rs.close();
}
if (stmt != null) {
stmt.close();
}
if (conn != null) {
conn.close();
}
}
return newDataset;
}
/**
* A função onMobileSync é chamada apenas durante a atualização de um dataset offline já existente.
*
* @param user
*/
function onMobileSync(user) {
var sortingFields = [];
var columnCount = rs.getMetaData().getColumnCount();
var constraints = [];
var result = {
'fields': fields,
'constraints': constraints,
'sortingFields': sortingFields
};
return result;
}
/**
* Através do método defineStructure é 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.
*
* ATENÇÃO: A função defineStructure é OBRIGATÓRIA para configuração do dataset offline.
* Para mais informações sobre o defineStructure, acesse nossa documentação:
* https://tdn.totvs.com/pages/viewpage.action?pageId=212899013#Sincroniza%C3%A7%C3%A3odedatasets-Definindoaestruturadodataset
*
*/
function defineStructure() {
addColumn("EMAIL");
addColumn("LOGIN");
setKey(["EMAIL"]);
}
/**
* No método OnSync é possível determinar quais são as linhas novas a serem adicionadas na tabela como na sincronização comum.
* https://tdn.totvs.com/pages/viewpage.action?pageId=212899013#Sincroniza%C3%A7%C3%A3odedatasets-Sincroniza%C3%A7%C3%A3odeinforma%C3%A7%C3%B5es
*
* @param lastSyncDate
*/
function onSync(lastSyncDate) {
}
0 Comentários