Usuários de um Grupo - colleagueGroup x Colleague

O relacionamento de usuário e grupos é muitos-para-muitos, então você tem essa tabela pivot colleagueGroup para relacionar os usuários e grupos.

Você precisa pesquisar em colleague os usuários que foram listados nessa colleagueGroup.

Aqui criamos um dataset que busca os usuários ativos podendo filtrar pelo grupo. Pode tentar usá-lo como exemplo para o que precisa.

/**
 * Usuários ativos no Fluig
 *
 * Dataset para facilitar a busca por usuários ativos que possam ser utilizados
 * como responsáveis/destinatários de tarefas.
 *
 * Se informar uma constraint para groupId (indiferente do tipo, pois sempre vai considerar SHOULD)
 * ele filtrará somente os usuários desse grupo. Pode-se enviar essa constraint para vários grupos
 * ao mesmo tempo.
 *
 * @param {string[]} fields Campos para retornar
 * @param {Constraint[]} constraints Filtros
 * @param {string[]} sortFields Campos para ordenar
 */
function createDataset(fields, constraints, sortFields) {
    var filtros = [];

    if (constraints != null) {
        for (var i = 0; i < constraints.length; ++i) {
            if (constraints[i].fieldName == "groupId") {
                var usersIds = getUsersIdFromGroupId(constraints[i].initialValue);

                if (!usersIds.length) {
                    continue;
                }

                for (var j = 0; j < usersIds.length; ++j) {
                    filtros.push(DatasetFactory.createConstraint(
                        "colleaguePK.colleagueId",
                        usersIds[j],
                        usersIds[j],
                        ConstraintType.SHOULD
                    ));
                }

                continue;
            } else if (constraints[i].fieldName == "colleagueName") {
                var c = DatasetFactory.createConstraint(
                    "colleagueName",
                    constraints[i].initialValue,
                    constraints[i].finalValue,
                    ConstraintType.MUST
                );
                c.setLikeSearch(true);
                filtros.push(c);

                continue;
            }

            filtros.push(constraints[i]);
        }
    }

    if (sortFields == null) {
        sortFields = ["colleagueName"];
    }

    filtros.push(
        DatasetFactory.createConstraint("active", "true", "true", ConstraintType.MUST)
    );

    return DatasetFactory.getDataset("colleague", fields, filtros, sortFields);
}

function getUsersIdFromGroupId(groupId) {
    var usersIds = [];
    var dataset = DatasetFactory.getDataset(
        "colleagueGroup",
        ["colleagueGroupPK.colleagueId"],
        [
            DatasetFactory.createConstraint("colleagueGroupPK.groupId", groupId, groupId, ConstraintType.MUST)
        ],
        null
    );

    for (var i = 0; i < dataset.rowsCount; ++i) {
        usersIds.push(dataset.getValue(i, "colleagueGroupPK.colleagueId"));
    }

    return usersIds;
}

1 curtida