/** * @abstract * * Base class for AS actions. * * # Implementation example * * Actions must be provided as DIRECT rules. * * sol.define("sol.my.as.actions.MyAction", { * extend: "sol.common.as.ActionBase", * * requiredConfig: ["objId"], * * initialize: function (config) { * var me = this; * me.$super("sol.common.ix.ActionBase", "initialize", [config]); * // some other initialization * }, * * getName: function () { * return "MyAction"; * }, * * process: function () { * // do your stuff * // add some events / data * } * }); * * <ruleset> * <base> * ... * </base> * <rule> * <name>Regel1</name> * <condition></condition> * <script> * sol.common.as.Utils.requiresUserSession(this); * var myAction = sol.create("sol.my.MyAction", {objId: "4711"}); * ruleset.setStatusMessage(myAction.execute()); * sol.common.as.Utils.cleanupUserSession(this); * </script> * </rule> * </ruleset> * * # Executing AS actions from clients * * Actions can be executed thanks to handler implementations in the Java Client and Web Client. Refer to * sol.common.jc.ActionHandler#execute and sol.common.web.ActionHandler#execute for more information. * * sol.common.jc.ActionHandler.executeAS("sol.pubsec.as.actions.PrepareDocument", { ...ELOas config... }, "", params); * * @author PZ, ELO Digital Office GmbH * @version 1.03.006 * * @eloas * @requires sol.common.JsonUtils * @requires sol.common.SordUtils * @requires sol.common.IxUtils * @requires sol.common.CounterUtils * @requires sol.common.TranslateTerms * @requires sol.common.WfUtils */ sol.define("sol.common.as.ActionBase", { extend: "sol.common.ActionBase", initialize: function (config) { var me = this, renderedConfig; if (me.$className === "sol.common.as.ActionBase") { throw "can not create instance of abstract class 'sol.common.as.ActionBase'"; } if (!(config._$disableParamsTemplating === true)) { renderedConfig = me.renderConfig(config); Object.keys(renderedConfig).forEach(function (prop) { if ((Object.prototype.toString.call(config[prop]) !== "[object JavaObject]") || config[prop] instanceof java.lang.String) { config[prop] = renderedConfig[prop]; } }); config.$templating = undefined; } me.$super("sol.common.ActionBase", "initialize", [config]); }, /** * @abstract * Name of the action. Has to be implemented by subclass. */ getName: function () { throw "cannot call 'name' of abstract class 'sol.common.as.ActionBase'"; }, /** * @abstract * Implementation of the action. Has to be implemented by subclass. */ process: function () { throw "cannot call 'process' of abstract class 'sol.common.as.ActionBase'"; }, /** * @protected * @inheritdoc sol.common.ActionBase#addActionEvent */ addActionEvent: function (directRule, params, on) { var me = this, eventCfg = { directRule: directRule, params: params, solution: me.solution }; me._registeredEvents.push(me.createEvent(sol.common.IxUtils.CONST.EVENT_TYPES.ACTION, eventCfg, on)); }, /** * @private * @inheritdoc sol.common.ActionBase#createEvent */ createEvent: function (type, params, on) { var event = { ID: type, COMPONENT: sol.common.IxUtils.CONST.COMPONENTS.AS, obj: {} }, param; if (on) { event.ON = on; } for (param in params) { if (params.hasOwnProperty(param)) { event.obj[param] = params[param]; } } return event; } });