Olá pessoal.
Tenho um dataset customizado e preciso aplicar um filtro em uma coluna, pesquisei e vi que tenho que criar constraints. Estou tendo um problema na criação de constraints para o dataset. Estou seguindo os exemplos do site, mas não estou conseguindo que as coisas funcionem corretamente. Antes de criar a constraint meu dataset retorna os valores corretamentes, sem problema algum. Após a criação das constraints meu dataset passa a não retornar mais nenhuma entrada. Inclusive já copiei colei exatamente como está no site e acontece o mesmo problema: sem as constraints tudo OK, mas quando adiciono-as não retorna mais nada. Estou disponibilizando os códigos abaixo:
//Retorna todas as entradas, sem constraints
function createDataset(fields, constraints, sortFields) {
var newDataset = DatasetBuilder.newDataset();
newDataset.addColumn("id");
newDataset.addColumn("Nome");
newDataset.addColumn("Grupo");
var _c = DatasetFactory.createConstraint("workflowColleagueRolePK.roleId", "Coordenador", "Coordenador", ConstraintType.MUST);
var tmpConstraint = new Array(_c);
var roleDataset = DatasetFactory.getDataset("workflowColleagueRole", null, tmpConstraint, null);
for (var i = 0; i < roleDataset.rowsCount; i++) {
var colleague_id = roleDataset.getValue(i, "workflowColleagueRolePK.colleagueId");
//pega o nome do coordenador
var _c1 = DatasetFactory.createConstraint("colleaguePK.colleagueId", colleague_id, colleague_id, ConstraintType.MUST);
var colConstraints = new Array(_c1);
var colleagueDataset = DatasetFactory.getDataset("colleague", null, colConstraints, null);
//peguei o primeiro pois pesquisei com o ID, resultando em apenas 1 entrada
var colleagueName = colleagueDataset.getValue(0, "colleagueName");
//pega o grupo do coordenador
var _c2 = DatasetFactory.createConstraint("colleagueGroupPK.colleagueId", colleague_id, colleague_id, ConstraintType.MUST);
var _tmpConstraint = new Array(_c2);
var groupDataset = DatasetFactory.getDataset("colleagueGroup", null, _tmpConstraint, null);
for (var j = 0; j < groupDataset.rowsCount; j++) {
var groupName = groupDataset.getValue(j, "colleagueGroupPK.groupId");
if(groupName != "DefaultGroup-1")
newDataset.addRow(new Array(colleague_id, colleagueName, groupName));
}
}
return newDataset;
}
Gerando a seguinte saída.
//Tentativa de filtro
function createDataset(fields, constraints, sortFields) {
var newDataset = DatasetBuilder.newDataset();
newDataset.addColumn("id");
newDataset.addColumn("Nome");
newDataset.addColumn("Grupo");
var filter = false;
if (constraints.length > 0)
filter = true;
var _c = DatasetFactory.createConstraint("workflowColleagueRolePK.roleId", "Coordenador", "Coordenador", ConstraintType.MUST);
var tmpConstraint = new Array(_c);
var roleDataset = DatasetFactory.getDataset("workflowColleagueRole", null, tmpConstraint, null);
for (var i = 0; i < roleDataset.rowsCount; i++) {
var colleague_id = roleDataset.getValue(i, "workflowColleagueRolePK.colleagueId");
//pegar o nome do coordenador
var _c1 = DatasetFactory.createConstraint("colleaguePK.colleagueId", colleague_id, colleague_id, ConstraintType.MUST);
var colConstraints = new Array(_c1);
var colleagueDataset = DatasetFactory.getDataset("colleague", null, colConstraints, null);
//peguei o primeiro pois pesquisei com o ID, resultando em apenas 1 entrada
var colleagueName = colleagueDataset.getValue(0, "colleagueName");
//pegar o grupo do coordenador
var _c2 = DatasetFactory.createConstraint("colleagueGroupPK.colleagueId", colleague_id, colleague_id, ConstraintType.MUST);
var _tmpConstraint = new Array(_c2);
var groupDataset = DatasetFactory.getDataset("colleagueGroup", null, _tmpConstraint, null);
for (var j = 0; j < groupDataset.rowsCount; j++) {
var groupName = groupDataset.getValue(j, "colleagueGroupPK.groupId");
if(filter == false) {
if(groupName != "DefaultGroup-1")
newDataset.addRow(new Array(colleague_id, colleagueName, groupName));
}
else{
if (constraints[0].constraintType==ConstraintType.MUST) {
if(constraints[0].fieldName == "id"){
if(constraints[0].initialValue == colleague_id){ // se o valor inicial da constraint for igual ao valor do campo na constraint adiciona a linha
newDataset.addRow(new Array(colleague_id, colleagueName, groupName));
}
}
}
}
}
}
return newDataset;
}
Gerando a saída abaixo
Não faço a mínima ideia de isso estar acontecendo. Alguém já passou por algo parecido? De qualquer forma, obrigado pela ajuda!