importPackage(Packages.de.elo.ix.client); //@include lib_Class.js //@include lib_sol.common.ix.FunctionBase.js var logger = sol.create("sol.Logger", { scope: "sol.common.ix.functions.ChangeColor" }); /** * Changes the color of an archive element. * * Additionally the old color can be saved to a map field, from where is can be restored later * * { color: "red", save: "OLD_COLOR" } * { color: "blue", restore: "OLD_COLOR" } * * `save` and `restore` are both optional, but if `restore` is defined, it always wins over `color`. * If there is no color found in the map field `OLD_COLOR` the `color` will be used as fallback. * * # 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. * * { * "color": "blue" * } * * # As IX function call * * In addition to the workflow node configuration the objId must be passed. * * sol.common.IxUtils.execute("RF_sol_function_ChangeColor", { * objId: "4711", * color: "blue" * }); * * @author Pascal Zipfel, ELO Digital Office GmbH * @version 1.06.000 * * @eloix * * @requires sol.Logger * @requires sol.common.JsonUtils * @requires sol.common.WfUtils * @requires sol.common.ix.RfUtils * @requires sol.common.ix.FunctionBase * */ sol.define("sol.common.ix.functions.ChangeColor", { extend: "sol.common.ix.FunctionBase", requiredConfig: ["objId"], /** * @cfg {String} objId (required) */ /** * @cfg {String} color Tries to find a color which was defined in ELO */ /** * @cfg {String} save Saves the old color to a map field */ /** * @cfg {String} restore Restores the old color from a map filed */ /** * @private * @property {de.elo.ix.client.ColorData[]} colorCache */ initialize: function (config) { var me = this; me.$super("sol.common.ix.FunctionBase", "initialize", [config]); }, /** * Changes the color of the element. */ process: function () { var me = this, sord, oldColorId, newColorId, lookupColor, lookedupColor; sord = ixConnect.ix().checkoutSord(me.objId, SordC.mbMin, LockC.NO); oldColorId = sord.kind; newColorId = 0; lookupColor = me.restoreFromMap() || me.color; if (lookupColor) { lookedupColor = me.getColor(lookupColor); if (lookedupColor) { newColorId = lookedupColor.id; } } if (oldColorId != newColorId) { sord.kind = newColorId; ixConnect.ix().checkinSord(sord, SordC.mbMin, LockC.NO); me.logger.info(["changed object color from '{0}' to '{1}'", oldColorId, newColorId]); } me.saveToMap(me.getColor(oldColorId)); }, /** * @private * @return {de.elo.ix.client.ColorData[]} colorCache */ getColors: function () { var me = this; if (!me.colorCache) { me.colorCache = ixConnect.ix().checkoutColors(LockC.NO); } return me.colorCache; }, /** * @private * @param {String|Number} color Name or ID of the color * @return {de.elo.ix.client.ColorData} */ getColor: function (color) { var me = this, colors = me.getColors(), ignoreCase = !!color.toUpperCase, result = null; colors.some(function (c) { var hit = ((c.id == color) || ((ignoreCase) ? (c.name.toUpperCase() == color.toUpperCase()) : (c.name == color))); if (hit) { result = c; } return hit; }); return result; }, /** * @private * @return {String} */ restoreFromMap: function () { var me = this, color = null, mapdata; if (me.restore) { try { mapdata = ixConnect.ix().checkoutMap(MapDomainC.DOMAIN_SORD, me.objId, [me.restore], LockC.NO); if (!mapdata || !mapdata.items || (mapdata.items.length <= 0)) { throw "no map entry found"; } color = mapdata.items[0].value; me.logger.debug(["restore color '{0}' from map", color]); ixConnect.ix().checkinMap(MapDomainC.DOMAIN_SORD, me.objId, me.objId, [new KeyValue(me.restore, null)], LockC.NO); } catch (ex) { me.logger.warn(["could not restore color from map field '{0}'", me.restore], ex); } } return color; }, /** * @private * @param {String} color */ saveToMap: function (color) { var me = this; if (me.save && color) { try { ixConnect.ix().checkinMap(MapDomainC.DOMAIN_SORD, me.objId, me.objId, [new KeyValue(me.save, color.name)], LockC.NO); me.logger.debug(["saved color to map field '{0}' -> '{1}'", color, me.save]); } catch (ex) { me.logger.warn(["could not save color to map field '{0}'", me.restore], ex); } } } }); /** * @member sol.common.ix.functions.ChangeColor * @static * @inheritdoc sol.common.ix.FunctionBase#onEnterNode */ function onEnterNode(clInfo, userId, wFDiagram, nodeId) { logger.enter("onEnterNode_ChangeColor", { flowId: wFDiagram.id, nodeId: nodeId }); var params = sol.common.WfUtils.parseAndCheckParams(wFDiagram, nodeId), module; params.objId = wFDiagram.objId; module = sol.create("sol.common.ix.functions.ChangeColor", params); module.process(); logger.exit("onEnterNode_ChangeColor"); } /** * @member sol.common.ix.functions.ChangeColor * @static * @inheritdoc sol.common.ix.FunctionBase#onExitNode */ function onExitNode(clInfo, userId, wFDiagram, nodeId) { logger.enter("onExitNode_ChangeColor", { flowId: wFDiagram.id, nodeId: nodeId }); var params = sol.common.WfUtils.parseAndCheckParams(wFDiagram, nodeId), module; params.objId = wFDiagram.objId; module = sol.create("sol.common.ix.functions.ChangeColor", params); module.process(); logger.exit("onExitNode_ChangeColor"); } /** * @member sol.common.ix.functions.ChangeColor * @method RF_sol_function_ChangeColor * @static * @inheritdoc sol.common.ix.FunctionBase#RF_FunctionName */ function RF_sol_function_ChangeColor(iXSEContext, args) { logger.enter("RF_sol_function_ChangeColor", args); var params = sol.common.ix.RfUtils.parseAndCheckParams(iXSEContext, arguments.callee.name, args, "objId"), module = sol.create("sol.common.ix.functions.ChangeColor", params); module.process(); logger.exit("RF_sol_function_ChangeColor"); }