importPackage(Packages.de.elo.ix.client); //@include lib_Class.js //@include lib_sol.common.JsonUtils.js //@include lib_sol.common.ix.RfUtils.js //@include lib_sol.common.ix.ServiceBase.js //@include lib_sol.common.HttpUtils.js //@include lib_sol.common.Config.js //@include lib_sol.common.Template.js var logger = sol.create("sol.Logger", { scope: "sol.common.ix.services.ExecuteAsAction" }); /** * Executes an ELO AS Business Solution action without the need of running an ELO AS instance in the DMZ. * * This service is useful if AS actions should be executed from web applications (e.g. ELO Web Client). * * # Configuration * * requires the solution name and rule name. A configuration object can be passed * as defined by the action. e.g. * * sol.common.IxUtils.execute('RF_sol_common_service_ExecuteAsAction', { * solution: 'pubsec', * action: 'sol.pubsec.as.actions.CreateFilesReport', * config: { * templateId: templateId, * fileId: fileId, * targetId: targetId * }, * connParams: { * language: 'de' * } * }, function(data) { * // process result * }, function (err) { * // error handling * }); * * In addition the client language should be passed. (connParams) This is required if localization information is processed by ELO AS. * * @author NM, ELO Digital Office GmbH * @version 1.0 * * @eloix * @requires sol.common.JsonUtils * @requires sol.common.ix.RfUtils * @requires sol.common.ix.ServiceBase */ sol.define("sol.common.ix.services.ExecuteAsAction", { extend: "sol.common.ix.ServiceBase", requiredConfig: ["action", "config"], /** * @cfg {String} solution * Name of the solution, which the as rule is part of. * This is used for handling several elo as configurations. */ solution: "common", /** * @cfg {String} action * Name of the action that should be called. Usually the name of the ELO AS rule. */ /** * @cfg {Object} config * Configuration for the action as defined by the action. */ /** * @cfg {Object} connParams (optional) * Configuration of the current connection. This includes localization information. * * { * language: 'en' * } */ /** * @private * @property {String} eloAsUrlTemplate */ eloAsUrlTemplate: "{{asCfg.protocol}}://{{asCfg.serverName}}:{{asCfg.port}}/{{asCfg.serviceName}}/as?cmd=get&name={{action.rule}}¶m2={{action.config}}¶m3={{connParams}}&ticket={{ticket}}", initialize: function (config) { var me = this; me.$super("sol.common.ix.ServiceBase", "initialize", [config]); }, getRuleConfig: function (config) { var tplData, strConfig; strConfig = sol.common.JsonUtils.stringifyAll(config); tplData = JSON.parse(strConfig); if (tplData.$templating) { tplData.type = tplData.$templating.$type; tplData.tree = tplData.$templating.$tree; tplData.preconditions = tplData.$templating.$preconditions; } return (sol.create("sol.common.Template", { source: strConfig })).apply(tplData); }, /** * Executes an ELO AS Business Solution action without the need of running an ELO AS instance in the DMZ * @return {Object} */ process: function () { var me = this, asCfg, asUrlTpl, asUrl, asUrlParamsObj, asUrlParamsLogObj, readTimeout, result; asCfg = sol.create("sol.common.Config").loadEloAsConfig(me.solution || "common"); readTimeout = asCfg.readTimeout || 60000; me.connParams = me.connParams || {}; me.connParams.language = me.connParams.language || me.ci.language + ""; me.connParams.timeZone = me.connParams.timeZone || me.ci.timeZone + ""; asUrlParamsObj = { ticket: me.ci.ticket + "", asCfg: asCfg, action: { rule: encodeURIComponent(me.action), config: encodeURIComponent(me.getRuleConfig(me.config)) }, connParams: encodeURIComponent(sol.common.JsonUtils.stringifyAll(me.connParams)) }; if (logger.debugEnabled) { asUrlParamsLogObj = JSON.parse(JSON.stringify(asUrlParamsObj)); asUrlParamsLogObj.ticket = asUrlParamsLogObj.ticket.substring(0, 6) + "..."; logger.debug("Build AS URL: asUrlTemplate=" + me.eloAsUrlTemplate + ", asUrlParams=" + JSON.stringify(asUrlParamsLogObj)); logger.debug("readTimeout=" + readTimeout); } asUrlTpl = sol.create("sol.common.Template", { source: me.eloAsUrlTemplate }); asUrl = asUrlTpl.apply(asUrlParamsObj); if (me.objId) { asUrl += "¶m1=" + me.objId; } logger.info("Executing ELO AS action.", asUrl); result = sol.common.HttpUtils.sendGet(asUrl, { connectTimeout: 30000, readTimeout: readTimeout, contentType: "application/json;charset=UTF-8" }); if (result.responseOk === false) { throw result.errorMessage; } return result; } }); /** * @member sol.common.ix.services.ExecuteAsAction * @method RF_sol_common_service_ExecuteAsAction * @static * @inheritdoc sol.common.ix.ServiceBase#RF_ServiceBaseName */ function RF_sol_common_service_ExecuteAsAction(ec, configAny) { var config, module, result; logger.enter("RF_sol_common_service_ExecuteAsAction", configAny); config = sol.common.ix.RfUtils.parseAndCheckParams(ec, arguments.callee.name, configAny, "action", "config"); config.ci = ec.ci; module = sol.create("sol.common.ix.services.ExecuteAsAction", config); result = sol.common.JsonUtils.stringifyAll(module.process()); logger.exit("RF_sol_common_service_ExecuteAsAction", result); return result; }