Existe alguma forma de ao carregar um dataset sincronizado, apagar todos os registros realizar uma nova carga?
@Ariberto você pode criar uma função antes do seu DatasetBuilder.newDataset() e verificar tudo o que você vai ter que remover, depois você você sincroniza o seu dataset.
O exemplo abaixo é de um dataset sincronizado que usa outros dois datasets de formulário no meu ambiente.
function defineStructure() { addColumn("CODIGO", DatasetFieldType.STRING); addColumn("DESCRICAO", DatasetFieldType.STRING); setKey(["CODIGO"]); addIndex(["CODIGO"]); addIndex(["CODIGO", "DESCRICAO"]); }
function onSync(lastSyncDate) {
var resultsClear = clearDataset();//retorna um array de linhas que serão excluídas
var dataset = DatasetBuilder.newDataset();
for (var i = 0; i < resultsClear.length; i++) {
dataset.deleteRow([resultsClear[i][0], resultsClear[i][1]]);
}
var documents = getDocumentsSGQ();
var tiposGenericos = getTiposGenericos();
for (var i = 0; i < documents.rowsCount; i++) {
dataset.addOrUpdateRow([parseInt(documents.getValue(i, "CODIGO")) + "", documents.getValue(i, "DESCRICAO")]);
}
for (var i = 0; i < tiposGenericos.rowsCount; i++) {
dataset.addOrUpdateRow([tiposGenericos.getValue(i, "documentid"), tiposGenericos.getValue(i, "tipo")]);
}
return dataset;
}function getDocumentsSGQ() {
return DatasetFactory.getDataset("documentosSGQ", null, null, ["CODIGO"]);
}function getTiposGenericos() {
var filters = ;
filters.push(DatasetFactory.createConstraint("metadata#active", "true", "true", ConstraintType.MUST));
return DatasetFactory.getDataset("dsTiposGenericosRiscos", null, filters, null);
}function clearDataset() {
var documentos = getDocumentsSGQ();
var tiposGenericos = getTiposGenericos();
var isDelete;
var documentId;
var allRegisters = ;
var results = ;
var descricao;
var bb;
for (var i = 0; i < documentos.rowsCount; i++) {
allRegisters.push(parseInt(documentos.getValue(i, "CODIGO").toString()));
}
for (var j = 0; j < tiposGenericos.rowsCount; j++) {
allRegisters.push(parseInt(tiposGenericos.getValue(j, "documentid")));
}
log.info(">>> >>> allRegisters: " + allRegisters);
allRegisters.sort(function (a, b) {
return a - b;
});
log.info(">>> >>> allRegisters: " + allRegisters);
var dataset = DatasetFactory.getDataset("dsDocumentosSGQRiscos", null, null, null);
if (dataset != null && dataset.rowsCount > 0) {
for (var k = 0; k < dataset.rowsCount; k++) {
documentId = dataset.getValue(k, "CODIGO");
descricao = dataset.getValue(k, "DESCRICAO");
bb = buscaBinaria(allRegisters, documentId);
isDelete = bb == -1 ? true : false;
if (isDelete) {
results.push([documentId, descricao]);
}
}
}
return results;
}
function buscaBinaria(array, id) {
var posicao;
var min = 0;
var max = array.length - 1;
var element;
var _return = -1;
var documentId;
while (min <= max) {
posicao = Math.floor((min + max) / 2);
documentId = parseInt(id);
element = parseInt(array[posicao]);
if (element == parseInt(documentId)) {
_return = posicao;
break;
} else if (element < documentId) {
min = posicao + 1;
} else {
max = posicao - 1;
}
}
return _return;
}
Espero ter ajudado.
Abç
Implementei por esse caminho, pensei que existia um caminho mais elegante, contudo muito obrigado pela ajuda.
Você pode usar isso aqui também: Remover dados de um Dataset