Existe alguma forma de ao carregar um dataset sincronizado, apagar todos os registros realizar uma nova carga?
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.
— Ariberto Montibeller Junior 18 de Oct de 2018Você pode usar isso aqui também: https://forum.fluig.com/937-remover-dados-de-um-dataset
— Daniel Cabral Santos 16 de Nov de 2018