importPackage(Packages.de.elo.ix.client); //@include lib_Class.js //@include lib_handlebars.js //@include lib_sol.common.Template.js //@include lib_sol.common.StringUtils.js //@include lib_sol.common.SordUtils.js //@include lib_sol.common.RepoUtils.js //@include lib_sol.common.UserUtils.js //@include lib_sol.common.Map.js //@include lib_sol.common.Config.js //@include lib_sol.common.WfUtils.js //@include lib_sol.common.Roles.js //@include lib_sol.common.ix.FunctionBase.js //@include lib_sol.common.ix.DynAdHocFlowUtils.js var logger = sol.create("sol.Logger", { scope: "sol.common.ix.functions.UserRolesToMap" }); // eslint-disable-line one-var /** * Analyze the user roles config and writes the user list to a map field * * @author MW, ELO Digital Office GmbH * @version 1.03.000 * * @requires handlebars * @requires sol.common.Config * @requires sol.common.Template * @requires sol.common.Roles * @requires sol.common.WfUtils * @requires sol.common.ix.FunctionBase * */ sol.define("sol.common.ix.functions.UserRolesToMap", { extend: "sol.common.ix.FunctionBase", /** * @cfg {String} objId * Object ID */ /** * @cfg {de.elo.ix.client.WFDiagram} wfDiagram * Workflow diagram */ /** * @cfg {String} userRolesConfigObjId * Repository path of the user roles configuration */ /** * @cfg {String|Object} role * Role name. If this is defined as an object, a `type` and a `key` has to be defined to load the role from the sords metadata (see {@link sol.common.SordUtils#getValue}). * It's also possible to define an object with a `template` property which contains a Handlebars template string. */ /** * @cfg {String} defaultRole (optional) * If `role` is defined as an object with a `type` and a `key` property, but there is no role definition for the read value, this will be used. */ /** * @cfg {String} userNamekey (optional) * Workflow map key name of the user name */ /** * @cfg {String} userNamekey (optional) * Workflow map key name of the user ID */ /** * @cfg {String} mandatoryKey (optional) * Workflow map key name of the "mandatory" flag */ /** * @cfg {Boolean} [mandatory=true] (optional) * Users should be mandatory */ initialize: function (config) { var me = this; me.params = config; me.$super("sol.common.ix.FunctionBase", "initialize", [config]); }, process: function () { var me = this, conn, userEntries; conn = (typeof ixConnectAdmin !== "undefined") ? ixConnectAdmin : ixConnect; if (me.objId && !me.wfDiagram) { me.wfDiagram = sol.common.WfUtils.getLastActiveWorkflow(me.objId); } if (!me.wfDiagram) { throw "The workflow diagram is empty"; } if (!me.userRolesConfigObjId) { throw "The object ID for the user roles configuration is empty"; } if (!me.role) { throw "The role name is empty"; } me.rolesConfig = sol.create("sol.common.Config", { compose: me.userRolesConfigObjId }).config; if (!me.rolesConfig.roles) { throw "In the workflow user roles configuration are no roles defined"; } me.objId = me.wfDiagram.objId; me.sord = conn.ix().checkoutSord(me.objId, SordC.mbAllIndex, LockC.NO); if (((me.role.type && me.role.key) || (me.role.template)) && !sol.common.Roles.retrieveRole(me.role, me.rolesConfig.roles, me.sord) && me.defaultRole) { // 'defaultRole' just used if role should be read from sord me.role = me.defaultRole; } if (!sol.common.Roles.retrieveRole(me.role, me.rolesConfig.roles, me.sord)) { throw "Role '" + me.role + "' is not defined in the configuration"; } userEntries = sol.common.Roles.getUsers2(me.role, me.sord, me.rolesConfig.roles); sol.common.ix.DynAdHocFlowUtils.clearCurrentUser(me.wfDiagram.id, me.objId, me.params); sol.common.ix.DynAdHocFlowUtils.createDynAdHocFlow(me.wfDiagram.id, me.objId, userEntries, me.params); } }); /** * @member sol.common.ix.functions.UserRolesToMap * @static * @inheritdoc sol.common.ix.FunctionBase#onEnterNode */ function onEnterNode(clInfo, userId, wfDiagram, nodeId) { var params, module; logger.enter("onEnterNode_UserRolesToMap", { flowId: wfDiagram.id, nodeId: nodeId }); params = sol.common.WfUtils.parseAndCheckParams(wfDiagram, nodeId); params.wfDiagram = wfDiagram; sol.common.WfUtils.checkMainAdminWf(wfDiagram); module = sol.create("sol.common.ix.functions.UserRolesToMap", params); module.process(); logger.exit("onEnterNode_UserRolesToMap"); } /** * @member sol.common.ix.functions.UserRolesToMap * @static * @inheritdoc sol.common.ix.FunctionBase#onExitNode */ function onExitNode(clInfo, userId, wfDiagram, nodeId) { var params, module; logger.enter("onExitNode_UserRolesToMap", { flowId: wfDiagram.id, nodeId: nodeId }); params = sol.common.WfUtils.parseAndCheckParams(wfDiagram, nodeId); params.wfDiagram = wfDiagram; sol.common.WfUtils.checkMainAdminWf(wfDiagram); module = sol.create("sol.common.ix.functions.UserRolesToMap", params); module.process(); logger.exit("onExitNode_UserRolesToMap"); } /** * @member sol.common.ix.functions.UserRolesToMap * @method RF_sol_common_function_UserRoleToMap * @static * @inheritdoc sol.common.ix.FunctionBase#RF_FunctionName */ function RF_sol_common_function_UserRoleToMap(iXSEContext, args) { var params, module; logger.enter("RF_sol_common_function_UserRoleToMap", args); params = sol.common.ix.RfUtils.parseAndCheckParams(iXSEContext, arguments.callee.name, args, "objId", "userRolesConfigObjId", "role"); sol.common.ix.RfUtils.checkMainAdminRights(iXSEContext.user, params); module = sol.create("sol.common.ix.functions.UserRolesToMap", params); module.process(); logger.exit("RF_sol_common_function_UserRoleToMap"); }