Como listar os usuários de um Grupo dentro de outro Grupo?

Quando queremos listar os usuários de um grupo basta simplesmente utilizar o dataset colleagueGroup. Ele nos retorna todos os usuários vinculados a grupos.

Mas como listar os usuários quando colocamos um grupo dentro de outro grupo?

Aqui temos a seguinte situação:

Os usuários do Grupo Analista podem iniciar um processo (A Solicitação de Pauta). Porém querem aceitar exceções, pessoas que não são Analista e mesmo assim podem iniciar a solicitação.

Encontramos essa solução do Fluig. Criamos um Grupo específico que indica quem pode iniciar a Solicitação, nele colocamos o grupo Analistas e também colocamos individualmente os usuários exceções.

Mas quando usamos o dataset colleagueGroup só é retornado o usuário testedepaginapublica, ignorando todos os usuários do grupo Analistas.

Tem algum jeito de conseguir pegar os usuários do “subgrupo”?

olá!

Não sei se entendi, seria para listar em uma consulta tipo a “Zoom”?

Se for isso poderia criar um dataset avançado com um select nas tabelas, unindo a tabela de usuários e usuários de grupos.

@allan.reichert , a ideia é criar um Dataset mesmo. Mas não encontrei referência de onde o Fluig faz essa ligação que há um grupo dentro de outro grupo.

Os únicos datasets com group no nome são o group e o colleagueGroup, mas eles não indicam que há um grupo dentro de outro.

Eu evito ao máximo ficar fazendo consultas SQL no Fluig, tentando utilizar os datasets. Mas acho que pra algumas coisas do próprio Fluig (que não seja tabela de formulário ou coisas do tipo) tem que apelar pra isso né

Só pra ficar documentado:

A tabela FDN_GROUPUSERROLE lista os relacionamentos de grupos com usuários, grupos e papeis.

A tabela FDN_USERROLE faz o relacionamento de usuário com papeis.

image

Aí é só tratar pra retornar os casos de ter vários grupos aninhados e também caso tenha ligação com papel.

Outra opção, utilizando as ferramentas do Fluig ao invés de fazer a consulta direta na base, é utilizar o serviço GroupService.

/**
 * Teste de pegar usuários de um grupo
 *
 * @param {string[]} fields Campos Solicitados
 * @param {Constraint[]} constraints Filtros
 * @param {string[]} sorts Campos da Ordenação
 * @returns {Dataset}
 */
function createDataset(fields, constraints, sorts) {
    var dataset = DatasetBuilder.newDataset();
    dataset.addColumn("matricula");

    var groupService = fluigAPI.getGroupService();
    var usuarios = groupService.findUsersByGroup(
        "SolicitaPautaDIREX", // Código do Grupo
        null, // Pattern (não sei o que é e não testei)
        1000, // Quantos usuários retornará.
        0, // Offset
        "" // Order
    );

    for (var i = 0; i < usuarios.size(); ++i) {
        dataset.addRow([usuarios.get(i).getCode()]);
    }

    return dataset;
}

3 curtidas

Só complementando: esse método só busca em grupos. Se colocou um Papel dentro do grupo ele não retornará os usuários daquele Papel.

Então se for utilizar grupos misturando com papeis é importante apelar pra uma consulta SQL mesmo.