Boa tarde!
Preciso criar uma widget para geração de relatório que pegue os dados de um dataset e tenha saída em .csv.
Não sei nem por onde começar.
Por exemplo: Criei várias solicitações do Fluxo e preciso que todas as solicitações saiam no arquivo
A sua dúvida está em pegar os dados do dataset na Widget, quais datasets consultar, gerar o arquivo CSV ou algum outro item específico?
Pegar os dados do dataset na widget em formato csv
Pra puxar os dados de um dataset na Widget você primeiro precisa importar a biblioteca vcXMLRPC.js.
No seu arquivo view.ftl basta inserir esse código no início ou final do arquivo:
Para trazer os valores de um Dataset basta usar a função DatasetFactory.getDataset
no seu JavaScript.
Por exemplo, para pegar todos os nomes e logins dos usuários ativos do Fluig:
DatasetFactory.getDataset(
"colleague",
["colleagueName", "login"],
[new DatasetFactory.createConstraint("active", true, true, ConstraintType.MUST)],
["colleagueName"],
{
// Chama a função para criar o CSV
success: downloadCsvFile,
// Exibe o erro
error: function (error) {
console.log("Erro");
}
}
);
Um modo de criar o arquivo e já fazer o download:
function downloadCsvFile(data) {
// dados será uma string contendo tudo que terá no arquivo csv.
// Não sei o limite de informações que é possível salvar assim.
let dados = "Nome,Login\n";
const colleagues = data.values;
// Percorro os valores do dataset pra montar os dados
for (let i = 0; i < colleagues.length; ++i) {
dados += `${colleagues[i].colleagueName},${colleagues[i].login}\n`;
}
// Criando o Blob pra gerar o arquivo
let arquivo = new Blob([dados], {type: "text/csv"});
// Criar um link pra fazer a ação de download
let link = document.createElement("a");
// O nome que será dado ao arquivo no momento do download
link.setAttribute("download", "arquivo.csv");
// Aqui crio o conteúdo que será baixado pelo navegador como arquivo
link.setAttribute("href", URL.createObjectURL(arquivo));
// Adiciono o link na página
document.body.appendChild(link);
// disparo o click
link.click();
// removo o link, pois não terá mais utilidade
document.body.removeChild(link);
}
O ideal é tratar os campos, pois o CSV é separado por vírgulas e podem ter vírgulas no conteúdo dos campos né?
Provavelmente existe alguma biblioteca pra trabalhar especificamente com exportação de dados em CSV, mas não cheguei a
pesquisar por algo. Até recomendo pesquisar, pois essa minha solução talvez não atenda se for uma quantidade alta de dados.
Então sei que tenho que usar um dataset interno que tem todas as fases do processo, o processHistory, ele funciona normalmente nessa função?
Pow, Bruno, bacana demais o código e a organização! Parabéns! Natasha, não tem pq não dá certo funciona com qualquer dataset, a manipulação da informação é uma tarefa a parte, mas mais mastigado que isso aí? Só o trabalho feito! Kkkkkkkkkk Parabéns, Bruno! Lembrando, Natasha, sempre que uma resposta lhe for satisfatória, marque-a como correta, isso ajuda outros usuários. Boa sorte!
Obrigada Bruno! Estou tentando adaptar ainda, mas já foi uma ótima ajuda.