importPackage(Packages.de.elo.ix.client); //@include lib_Class.js //@include lib_sol.common.IxUtils.js //@include lib_sol.common.RepoUtils.js //@include lib_sol.common.WfUtils.js //@include lib_sol.common.Map.js //@include lib_sol.common.ix.ServiceBase.js var logger = sol.create("sol.Logger", { scope: "sol.common.ix.services.ActionCancelForm" }); /** * Forwards a workflow to the next cancel node. * * This service is called by the clients if a user closes a workflow form dialog in order to cancel an action. * * Please note that cancel nodes should be defined by using a localization key `sol.common.wf.node.cancel`. * * @author MW, ELO Digital Office GmbH * @version 1.03.000 * * @eloix * @requires sol.common.IxUtils * @requires sol.common.WfUtils * @requires sol.common.ix.ServiceBase */ sol.define("sol.common.ix.services.ActionCancelForm", { extend: "sol.common.ix.ServiceBase", wfMapSavedFlag: "FORM_SAVED", /** * @cfg {String} flowId (required) * Flow ID */ /** * @cfg {String} nodeId (required) * Node ID */ /** * @cfg {Array} cancelNodeNameTranslationKeys * Translation keys for the node name of cancel nodes */ cancelNodeNameTranslationKeys: [ "sol.common.wf.node.cancel", "sol.common.wf.node.abort", "sol.common.wf.node.abbort" ], /** * @cfg {Array} cancelIconNames * Icon names of cancel nodes */ cancelIconNames: [ "sol.common.Cancel", "sol.common.Abort", "sol.common.Abbort" ], initialize: function (config) { var me = this; me.$super("sol.common.ix.ServiceBase", "initialize", [config]); }, /** * Forwards a workflow to the next cancel node * @return {Object} */ process: function () { var me = this, result = false, saveClicked, workflow, succNode; saveClicked = me.determineAndResetSavedState(); if (!saveClicked) { workflow = sol.common.WfUtils.getWorkflow(me.flowId); succNode = sol.common.WfUtils.getSuccessorNode(workflow, me.nodeId, { nameTranslationKeys: me.cancelNodeNameTranslationKeys, iconNames: me.cancelIconNames }); if (succNode) { sol.common.WfUtils.forwardWorkflow(me.flowId, me.nodeId, [succNode.id]); result = true; } } return { result: result }; }, /** * @private * Determines, if the 'saved flag' (wf map field `FORM_SAVED`) is set to '1'. * If that's the case it returns `true` and resets the flag, else it returns `false` and leaves the entry untouched. * @return {Boolean} */ determineAndResetSavedState: function () { var me = this, wfMap, savedFlag; wfMap = sol.create("sol.common.WfMap", { flowId: me.flowId, objId: me.nodeId }); wfMap.read([me.wfMapSavedFlag]); savedFlag = (wfMap.getValue(me.wfMapSavedFlag) === "1"); if (savedFlag === true) { wfMap.setValue(me.wfMapSavedFlag, null); wfMap.write(); } return savedFlag; } }); /** * @member sol.common.ix.services.ActionCancelForm * @method RF_sol_common_service_ActionCancelForm * @static * @inheritdoc sol.common.ix.ServiceBase#RF_ServiceBaseName */ function RF_sol_common_service_ActionCancelForm(ec, args) { logger.enter("RF_sol_common_service_ActionCancelForm", args); var params, result = {}, resultString, service; params = sol.common.ix.RfUtils.parseAndCheckParams(ec, arguments.callee.name, args); if (params.flowId && params.nodeId) { service = sol.create("sol.common.ix.services.ActionCancelForm", params); result = service.process(); } logger.exit("RF_sol_common_service_ActionCancelForm", result); resultString = JSON.stringify(result); return resultString; }