Skip to content

Instantly share code, notes, and snippets.

@brunogasparetto
Last active November 9, 2023 12:24
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/9565fb49101a1b33cb3106e9e665bb10 to your computer and use it in GitHub Desktop.
Save brunogasparetto/9565fb49101a1b33cb3106e9e665bb10 to your computer and use it in GitHub Desktop.
Fluig: exemplo de como copiar os grupos de um usuário para outro
/**
* Copia os grupos de um usuário para outros usuários
*
* Obrigatório passar a constraint "from" com o login do usuário a ser copiado.
* Obrigatório passar a constraint "to" com o login do usuário a adicionar nos grupos.
*
* Pode-se indicar vários usuários "to".
*
* @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("status");
dataset.addColumn("message");
if (!constraints || !constraints.length || constraints.length < 2) {
dataset.addRow([
"error",
"Necessário informar usuário de origem e usuários de destino."
]);
return dataset;
}
var userService = fluigAPI.getUserService();
var groupsFrom = null;
try {
groupsFrom = getGroupsFrom(userService, constraints);
} catch (error) {
dataset.addRow([
"error",
cleanMessageError(error)
]);
return dataset;
}
var tenantId = getValue("WKCompany");
for (var i = 0; i < constraints.length; ++i) {
if (constraints[i].fieldName != "to") {
continue;
}
var userTo = null;
try {
userTo = userService.findByLogin(constraints[i].initialValue);
} catch (error) {
dataset.addRow([
"error",
"Erro ao pesquisar usuário " + constraints[i].initialValue + ". " + cleanMessageError(error)
]);
continue;
}
var groupsTo = new java.util.ArrayList(groupsFrom);
groupsTo.removeAll(userService.listGroups(userTo.getLogin()));
if (groupsTo.isEmpty()) {
dataset.addRow([
"success",
userTo.getLogin() + " já está em todos os grupos."
]);
continue;
}
/*
* Esse trecho é estranho, mas é como funcionou.
*
* Usuário tem o método getGroups e setGroups, porém o getGroups vinha vazio
* e por isso precisei utilizar o método listGroups do UserService.
*
* Além disso não funcionou usar o setGroups e depois dar update no usuário.
* Só deu certo ir inserindo grupo a grupo.
*/
var it = groupsTo.iterator();
while (it.hasNext()) {
try {
var groupCode = it.next();
userService.addUserToGroup(tenantId, groupCode, userTo);
dataset.addRow([
"success",
userTo.getLogin() + " inserido no grupo " + groupCode
]);
} catch (error) {
dataset.addRow([
"error",
userTo.getLogin() + " - Erro ao inserir grupo " + groupCode + ". " + cleanMessageError(error)
]);
}
}
}
return dataset;
}
/**
* Pega o login do usuário "from"
*
* @param {Constraint[]} constraints
* @returns {string}
* @throws {Error}
*/
function getFromUserLogin(constraints) {
for (var i = 0; i < constraints.length; ++i) {
if (constraints[i].fieldName == "from") {
return constraints[i].initialValue;
}
}
throw "Necessário informar usuário de origem."
}
/**
* Pega os grupos do usuário de origem
*
* @param {com.fluig.sdk.service.UserService} userService
* @param {Constraint[]} constraints
* @returns {java.util.List<java.lang.String>}
* @throws {Error}
*/
function getGroupsFrom(userService, constraints) {
var groups = userService.listGroups(getFromUserLogin(constraints));
if (groups.isEmpty()) {
throw "Usuário de origem não possuí grupos."
}
return groups;
}
/**
* Remove a sujeira da mensagem de erro da exceção
*
* @param {{message: string}} error Exceção
* @returns {string}
*/
function cleanMessageError(error) {
if (!error.message) {
return error;
}
return (new java.lang.String(error.message)).replaceAll("^.*Exception: (.*)$", "$1");
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment