Dataset customizado com constraint

Boa tarde pessoal, estou tentando fazer um dataset customizado, mas quando uso filtro, da o erro dataset invalido


function createDataset(fields, constraints, sortFields) {

    // Criação das colunas de retorno dataset
    var datasetRetorno = DatasetBuilder.newDataset();
    var tempDataset = DatasetBuilder.newDataset();
    tempDataset.addColumn("Id");
    tempDataset.addColumn("Nome");
    tempDataset.addColumn("Papel");
    tempDataset.addColumn("Grupo");
    datasetRetorno.addColumn("Id");
    datasetRetorno.addColumn("Nome");
    datasetRetorno.addColumn("Papel");
    datasetRetorno.addColumn("Grupo");

    var idC;
    var idP;
    var id;
    var grupo;
    var papel;
    var nome;
    var idF;
    var grupoF;
    var papelF;
    var nomeF;

   var filtro_1 = DatasetFactory.createConstraint("workflowColleagueRolePK.roleId", "user", "user", ConstraintType.MUST_NOT);
   var filtro_1_1 = DatasetFactory.createConstraint("workflowColleagueRolePK.roleId", "user_interno", "user_interno", ConstraintType.MUST_NOT);
   var filtro_1_2 = DatasetFactory.createConstraint("workflowColleagueRolePK.roleId", "admin", "admin", ConstraintType.MUST_NOT);
   var filtro_2 = DatasetFactory.createConstraint("active", true, true, ConstraintType.MUST);
   var filtro_3 = DatasetFactory.createConstraint("colleagueGroupPK.groupId", "DefaultGroup-1", "DefaultGroup-1", ConstraintType.MUST_NOT);
   var filtro_3_1 = DatasetFactory.createConstraint("colleagueGroupPK.groupId", "MEMBER", "", ConstraintType.MUST_NOT);

    // Buscando os datasets
    var dataset_1 = DatasetFactory.getDataset("workflowColleagueRole", null, Array(filtro_1, filtro_1_1, filtro_1_2), null);
    var dataset_2 = DatasetFactory.getDataset("colleague", null, Array(filtro_2), null);  
    var dataset_3 = DatasetFactory.getDataset("colleagueGroup", null, new Array(filtro_3, filtro_3_1), null);

    // A partir do dataset 1 busca todos relacionados no dataset 2
    for (var i = 0; i < dataset_1.rowsCount; i++) {

        papel = dataset_1.getValue(i, "workflowColleagueRolePK.roleId");
        idP = dataset_1.getValue(i, "workflowColleagueRolePK.colleagueId");

        for (var j = 0; j < dataset_2.rowsCount; j++) { 

            idC = dataset_2.getValue(j,"colleaguePK.colleagueId");
            nome = dataset_2.getValue(j,"colleagueName");

            for (var k = 0; k < dataset_3.rowsCount; k++){

                grupo = dataset_3.getValue(k, "colleagueGroupPK.groupId");
                id = dataset_3.getValue(k, "colleagueGroupPK.colleagueId");
                if(dataset_3.getValue(k, "colleagueGroupPK.colleagueId") == idP){
                    if(idP == idC){
                        idF = id;
                        nomeF = nome;
                        papelF = papel;
                        grupoF = grupo;
                    }                   
                }
            }
        }
        tempDataset.addRow(new Array(idF, nomeF, papelF, grupoF));
        if(constraints!=null && constraints.length){ //se tiver constraint filtra

            if(constraints[0].constraintType==ConstraintType.MUST) { 


                    if(constraints[0].initialValue==tempDataset[a][constraints[0].fieldName]){ 
                        datasetRetorno.addRow(new Array(idF, nomeF, papelF, grupoF));
                    }

            }
        } else {

                datasetRetorno.addRow(new Array(idF, nomeF, papelF, grupoF));

        }
    }
    return datasetRetorno;    
}


}

Bom dia Allan,

acho que o problema pode estar no seu if do filtro.

Tente alterar esse if:


if(constraints[0].initialValue==tempDataset[a][constraints[0].fieldName]){

por esse:


if (constraints[0].initialValue == tempDataset.getValue(i, constraints[0].fieldName)) {

Boa tarde Diogo,
eita agora parou de dar erro, mas quando entra no

if (constraints[0].initialValue == tempDataset.getValue(i, constraints[0].fieldName))

não puxa nenhum registro :frowning:

Qual a constraint que você está passando pro dataset?

Você está fazendo essa consulta pela tela de datasets ou pelo studio? Porque se for o caso, essas consultas por padrão mandam a constraint sqlLimit então sua constraint não seria a constraint[0]. Pra ter certeza coloque um log.dir(constraints) pra ver no log o que o dataset está recebendo

He he, era isso mesmo, exclui a constraint sqlLimit e funcionou :D, Vlw Diogo