Skip to content

Instantly share code, notes, and snippets.

@brunogasparetto
Created August 8, 2023 14:55
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save brunogasparetto/21a6d6c2abbbe1d4ea584b2df31f160f to your computer and use it in GitHub Desktop.
Save brunogasparetto/21a6d6c2abbbe1d4ea584b2df31f160f to your computer and use it in GitHub Desktop.
Fluig: dataset para pegar os usuários ativos permitindo filtrar por Grupos e Papeis
/**
* 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.
*
* Se informar uma constraint para roleId (indiferente do tipo, pois sempre vai considerar SHOULD)
* ele filtrará somente os usuários desse papel. Pode-se enviar essa constraint para vários papéis
* ao mesmo tempo.
*
* @param {string[]} fields Campos para retornar
* @param {Constraint[]} constraints Filtros
* @param {string[]} sortFields Campos para ordenar
*/
function createDataset(fields, constraints, sortFields) {
/**
* As constraints que serão realmente enviadas para a consulta
*
* Por padrão não trará o usuário admin.
*
* @type {Constraint[]}
*/
var filters = [
DatasetFactory.createConstraint("active", "true", "true", ConstraintType.MUST),
DatasetFactory.createConstraint("login", "admin", "admin", ConstraintType.MUST_NOT)
];
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) {
filters.push(DatasetFactory.createConstraint(
"colleaguePK.colleagueId",
usersIds[j],
usersIds[j],
ConstraintType.SHOULD
));
}
continue;
} else if (constraints[i].fieldName == "roleId") {
var usersIds = getUsersIdFromRoleId(constraints[i].initialValue);
if (!usersIds.length) {
continue;
}
for (var j = 0; j < usersIds.length; ++j) {
filters.push(DatasetFactory.createConstraint(
"colleaguePK.colleagueId",
usersIds[j],
usersIds[j],
ConstraintType.SHOULD
));
}
continue;
}
filters.push(constraints[i]);
}
}
return DatasetFactory.getDataset("colleague", fields, filters, sortFields);
}
/**
* Pega a matrícula dos usuários do grupo indicado
*
* @param {string} groupId Código do Grupo
* @returns {string[]}
*/
function getUsersIdFromGroupId(groupId) {
var usersIds = [];
var groupService = fluigAPI.getGroupService();
var usuarios = groupService.findUsersByGroup(groupId, null, 10000, 0, "");
for (var i = 0; i < usuarios.size(); ++i) {
usersIds.push([usuarios.get(i).getCode()]);
}
return usersIds;
}
/**
* Pega a matrícula dos usuários do papel indicado
*
* @param {string} roleId Código do Papel
* @returns {string[]}
*/
function getUsersIdFromRoleId(roleId) {
var usersIds = [];
var dataset = DatasetFactory.getDataset(
"workflowColleagueRole",
["workflowColleagueRolePK.colleagueId"],
[
DatasetFactory.createConstraint("workflowColleagueRolePK.colleagueId", "admin", "admin", ConstraintType.MUST_NOT),
DatasetFactory.createConstraint("workflowColleagueRolePK.roleId", roleId, roleId, ConstraintType.MUST)
],
null
);
for (var i = 0; i < dataset.rowsCount; ++i) {
usersIds.push(dataset.getValue(i, "workflowColleagueRolePK.colleagueId"));
}
return usersIds;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment