Limpar DataSet no sincronismo

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ç

Tomei como base esse tópico

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