Olá,
Alguém sabe se existe uma forma de excluir os dados de um Dataset (Limpar todos os registros) ?
Gostaria de fazer isso dentro do onSync dele (limpar e inserir dados novamente).
Obrigado !
Olá,
Alguém sabe se existe uma forma de excluir os dados de um Dataset (Limpar todos os registros) ?
Gostaria de fazer isso dentro do onSync dele (limpar e inserir dados novamente).
Obrigado !
Obrigado pelas respostas,
Resolvi da seguinte forma:
//Funcao testa se existem registros no dataset
function testaDataset() {
var dataset = DatasetFactory.getDataset("getConsignados", null, null, null);
return dataset.rowsCount;
}
Caso exista, eu chamo o dataset e passo as linhas como parametro para o deleteRow
newDataset.deleteRow(new Array("coluna1DoDataSet", "coluna2DoDataSet", "coluna3DoDataSet"....));
Legal que você já resolveu, Jairo!
Costumo fazer algo assim:
function onSync(lastSyncDate) {
var dataset = DatasetBuilder.newDataset();
clearDataset("codigoDataset"); //apaga os registros antes de republica-los
dataset.addRow(new Array(1, "primeiro"));
dataset.addRow(new Array(2, "segundo"));
dataset.addRow(new Array(3, "terceiro"));
return dataset;
}
function clearDataset(codDataset) {
log.info("#### limpando dataset " + codDataset);
var dataset = DatasetFactory.getDataset(codDataset, null, null, null); // busca o dataset completo
if(dataset != null && dataset.rowsCount > 0){ //se o dataset tem registros
var values = dataset.getValues();
for(var row in values){ // para cada linha retornada no seu dataset
dataset.deleteRow([values[row][0], values[row][1]]); // apaga a linha (ajustar colunas de acordo com seu dataset)
}
}
}
Infelizmente creio que não exista uma maneira fácil de fazer isso via código. A forma fácil é usando opção de apagar dados na gestão de dataset.
Existe um endpoint REST que faz a limpeza, que é a função na gestão de dataset, você poderia abrir chamado para tornarem essa API pública. (Usar API não pública implica em não ter suporte caso pare de funcionar)
Outra opção, seria você tentar consultar o próprio dataset verificando se não é nulo e então iterar nos registros aplicando a função deleteRow.
Vide documentação em http://tdn.totvs.com/pages/releaseview.action?pageId=212899013.
Na documentação ele mostra montando o array com todos os valores de campos, porém na teoria, apenas os campos da chave deveriam ser obrigatório, o resto poderia ser nulo. (não confirmado)
---EDITADO---
Conforme você editou a pergunta, para apagar dados do dataset sincronizado, no onSync, basta usar o deleteRow vide: http://tdn.totvs.com/pages/releaseview.action?pageId=212899013#SincronizaçãodeDatasets-Sincronizaçãodeinformações
Fera, bom dia
Nesse link http://tdn.totvs.com/x/xZSwD tem exemplo de como realizar esse procedimento usando sincronização de datasets e com ele vc consegue inserir, atualizar e deletar linhas do dataset através da sicronização jornalizada.