Olá a todos.
Sou novo por aqui e gostaria da ajuda de vcs.
Eu tenho que buscar informações em dois datasets. Pra ser mais específico, buscar documentos acessados por colaboradores. Porém, meu código não funciona. Ele fica carregando e não conclui, ou seja, fica processando infinitamente.
Podem me explicar o que posso estar fazendo de errado?
Coloquei apenas uma coluna de colaborador para teste.
Segue meu código:
function createDataset(fields, constraints, sortFields) {
var datasetRetorno = DatasetBuilder.newDataset();
datasetRetorno.addColumn("Colaborador");
var dataset1 = DatasetFactory.getDataset("AccessLog", null, null, null);
var dataset2 = DatasetFactory.getDataset("colleague", null, null, null);
for (var i = 0; i < dataset1.rowsCount; i++) {
var colleagueId = dataset1.getValue(i, "colleagueId");
for (var j = 0; j < dataset2.rowsCount; j++) {
if (dataset2.getValue(j, "colleagueId") == colleagueId) {
var colaborador = dataset2.getValue(j, "colleagueName");
datasetRetorno.addRow(new Array(colaborador));
}
}
}
return datasetRetorno;
}
Bom dia Alexandre,
o colleagueId faz parte da chave tanto do AccessLog, quanto do Colleague, então você precisa colocar a PK no nome do campo.
var colleagueId = dataset1.getValue(i, "accessLogPK.colleagueId");
if (dataset2.getValue(j, "colleaguePK.colleagueId") == colleagueId) {
Caso você tenha um grande volume de accessLog e colleagues você pode diminuar a quantidade de dados retornados usando constraints, por exemplo buscar apenas o colleagueName de um usuário passando o id dele como constraint:
var colleagueId = dataset1.getValue(i, "accessLogPK.colleagueId");
var returnFields = new Array("colleagueName");
var c1 = DatasetFactory.createConstraint("colleaguePK.colleagueId", colleagueId, colleagueId, ConstraintType.MUST);
var colConstraints = new Array(c1);
var dataset2 = DatasetFactory.getDataset("colleague", returnFields, colConstraints, null);
enter code here
Código completo:
function createDataset(fields, constraints, sortFields) {
var datasetRetorno = DatasetBuilder.newDataset();
datasetRetorno.addColumn("Documento");
datasetRetorno.addColumn("Colaborador");
var dataset1 = DatasetFactory.getDataset("AccessLog", null, null, null);
for (var i = 0; i < dataset1.rowsCount; i++) {
var colleagueId = dataset1.getValue(i, "accessLogPK.colleagueId");
var returnFields = new Array("colleagueName");
var c1 = DatasetFactory.createConstraint("colleaguePK.colleagueId", colleagueId, colleagueId, ConstraintType.MUST);
var colConstraints = new Array(c1);
var dataset2 = DatasetFactory.getDataset("colleague", returnFields, colConstraints, null);
var documento = dataset1.getValue(i, "accessLogPK.documentId");
var colaborador = dataset2.getValue(0, "colleagueName");
datasetRetorno.addRow(new Array(documento, colaborador));
}
return datasetRetorno;
}
Opa Diogo…blz?
mesmo colocando accessLogPK.colleagueId e colleaguePK.colleagueId ele não me traz os resultados. Tentei utilizar a constraint mas não consegui também, por nunca ter usado.
Alexandre, adicionei o codigo completo ali na resposta. Está ocorrendo algum erro no log? Podes consultar essa documentção de Datasets para mais exemplos e explicações: Desenvolvimento de Datasets - TOTVS Fluig - TDN
Diogo, consegui fazer aqui de acordo com o código que vc mandou e me surgiu uma dúvida. Eu consigo usar um terceiro dataset pra me retornar qual é o documento correspondente ao accessLogPK.documentId? Devo usar o próprio datasetRetorno pra me trazer esses dados?
Alexandre, seria só colocar a consulta para o terceiro dataset ali dentro do for. Algo assim: var docC1 = DatasetFactory.createConstraint(“documentPK.documentId”, accessLogPK.documentId, accessLogPK.documentId, ConstraintType.MUST);
var docConstraints = new Array(docC1);
var dataset3 = DatasetFactory.getDataset(“document”, null, docConstraints, null);
Você pode determinar que campo vai retornar do documento passando como parâmetro também.