importPackage(Packages.de.elo.ix.client); //@include lib_Class.js //@include lib_sol.common.SordUtils.js //@include lib_sol.common.UserUtils.js //@include lib_sol.common.ix.FunctionBase.js var logger = sol.create("sol.Logger", { scope: "sol.common.ix.functions.Inherit" }); /** * This module handles the initial inheritance of index fields from the parent. * * The configuration, which fields should be inherited is done via {@link #fields}. * * If inherited fields already have a value, they will not be overridden by default. * This behaviour can be altered via an `override` flag in each field configuration. * * # As workflow node * * ObjId is set based on the element that the workflow is attached to. * Following configuration should be applied to the comments field and would inherit the name of the parent, * the field 'MY_INHERITED' and the map field 'MY_INHERITED_MAP' (existing values will not be overridden). * Additionally the field MY_INHERITED_2 will be <i>inherited</i> from the field 'MY_OTHER' from the parent * * { * "fields": [ * { "type": "SORD", "key": "name" }, * { "type": "GRP", "key": "MY_INHERITED" }, * { "type": "MAP", "key": "MY_INHERITED_MAP" }, * { "type": "GRP", "key": "MY_INHERITED_2", source: { "type": "GRP", "key": "MY_OTHER" } } * ] * } * * # As IX function call * * In addition to the workflow node configuration the objId must be passed. * The following example would inherit the field 'MY_INHERITED' from the parent and override an exiting value. * * sol.common.IxUtils.execute("RF_sol_function_Inherit", { * objId: "4711", * fields: [ * { "type": "GRP", "key": "MY_INHERITED", "override": true } * ] * }); * * @author PZ, ELO Digital Office GmbH * @version 1.02.003 * * @eloix * * @requires sol.common.Config * @requires sol.common.ConfigMixin * @requires sol.common.ObjectUtils * @requires sol.common.StringUtils * @requires sol.common.JsonUtils * @requires sol.common.SordUtils * @requires sol.common.RepoUtils * @requires sol.common.WfUtils * @requires sol.common.ix.RfUtils * @requires sol.common.ix.FunctionBase */ sol.define("sol.common.ix.functions.Inherit", { extend: "sol.common.ix.FunctionBase", requiredConfig: ["objId", "fields"], /** * @cfg {String} objId (required) * Object ID */ /** * @cfg {Object[]} fields (required) * Object containing the configuration for the inherited fields: * * [ * { type: "SORD", key: "name" }, * { type: "GRP", key: "MY_FIELD", "override": true } * ] * * Currently only "SORD" and "GRP" are supported as `type`. */ /** * @private * @property {de.elo.ix.client.Sord} sord */ /** * @private * @property {de.elo.ix.client.Sord} parentSord */ /** * @private * @property {Object[]} updates */ initialize: function (config) { var me = this; me.$super("sol.common.ix.FunctionBase", "initialize", [config]); me.logger.debug("initialize"); me.sord = ixConnectAdmin.ix().checkoutSord(me.objId, SordC.mbAllIndex, LockC.FORCE); me.parentSord = ixConnectAdmin.ix().checkoutSord(me.sord.parentId, SordC.mbAllIndex, LockC.NO); me.updates = []; }, /** * This module handles inheritance of index fields from the parent. */ process: function () { var me = this, mapitems; me.fields.forEach(me.inheritField, me); me.logger.info("initial inheritance values initialized"); if (me.updates.length > 0) { mapitems = sol.common.SordUtils.updateSord(me.sord, me.updates); ixConnectAdmin.ix().checkinSord(me.sord, SordC.mbAllIndex, LockC.YES); if (mapitems && (mapitems.length > 0)) { ixConnectAdmin.ix().checkinMap(MapDomainC.DOMAIN_SORD, me.objId, me.objId, mapitems, LockC.NO); } } else { ixConnectAdmin.ix().checkinSord(me.sord, SordC.mbOnlyUnlock, LockC.YES); } me.logger.info("initial inheritance successfull"); }, /** * @private * @param {Object} cfg Configuration */ inheritField: function (cfg) { var me = this, parentValue, targetValue, override; try { parentValue = sol.common.SordUtils.getValue(me.parentSord, (cfg.source) ? cfg.source : cfg); targetValue = sol.common.SordUtils.getValue(me.sord, cfg); override = (cfg.override === true) ? true : false; if (me.checkUpdate(parentValue, targetValue, override)) { cfg.value = parentValue; me.updates.push(cfg); } } catch (ex) { me.logger.error("error inheriting", ex); } }, /** * @private * @param {String} parentValue Parent value * @param {String} targetValue Target value * @param {Boolean} override Override value * @return {String} */ checkUpdate: function (parentValue, targetValue, override) { if (parentValue) { parentValue += ""; } if (targetValue) { targetValue += ""; } return (!targetValue || override) && (parentValue !== targetValue); } }); /** * @member sol.common.ix.functions.Inherit * @static * @inheritdoc sol.common.ix.FunctionBase#onEnterNode */ function onEnterNode(ci, userId, wfDiagram, nodeId) { var params, module; logger.enter("onEnterNode_Inherit", { flowId: wfDiagram.id, nodeId: nodeId }); params = sol.common.WfUtils.parseAndCheckParams(wfDiagram, nodeId); params.objId = wfDiagram.objId; module = sol.create("sol.common.ix.functions.Inherit", params); module.process(); logger.exit("onEnterNode_Inherit"); } /** * @member sol.common.ix.functions.Inherit * @static * @inheritdoc sol.common.ix.FunctionBase#onExitNode */ function onExitNode(ci, userId, wfDiagram, nodeId) { var params, module; logger.enter("onExitNode_Inherit", { flowId: wfDiagram.id, nodeId: nodeId }); params = sol.common.WfUtils.parseAndCheckParams(wfDiagram, nodeId); params.objId = wfDiagram.objId; module = sol.create("sol.common.ix.functions.Inherit", params); module.process(); logger.exit("onExitNode_Inherit"); } /** * @member sol.common.ix.functions.Inherit * @method RF_sol_function_Inherit * @static * @inheritdoc sol.common.ix.FunctionBase#RF_FunctionName */ function RF_sol_function_Inherit(ec, configAny) { var params, module; logger.enter("RF_sol_function_Inherit", configAny); params = sol.common.ix.RfUtils.parseAndCheckParams(ec, arguments.callee.name, configAny, "objId", "fields"); sol.common.ix.RfUtils.checkMainAdminRights(ec.user, params); module = sol.create("sol.common.ix.functions.Inherit", params); module.process(); logger.exit("RF_sol_function_Inherit"); }