importPackage(Packages.de.elo.ix.client); //@include lib_Class.js //@include lib_sol.common.SordUtils.js //@include lib_sol.common.RepoUtils.js //@include lib_sol.common.ix.FunctionBase.js var logger = sol.create("sol.Logger", { scope: "sol.common.ix.functions.CopySordData" }); /** * Copies index values and map data to another ELO object. * * # 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. * * { * "source": "1234", * "suppressedFields": ["FIELD1", "FIELD2"], * "suppressedMapFields": ["MAPFIELD1", "MAPFIELD2"] * } * * # As IX function call * * sol.common.IxUtils.execute("RF_sol_function_CopySordData", { * source: "1111", * objId: "2222", * suppressedFields: ["FIELD1", "FIELD2"], * suppressedMapFields: ["MAPFIELD1", "MAPFIELD2"], * suppressedFieldsDelete: true * }); * * # Prerequisites * * @author MW, ELO Digital Office GmbH * @version 1.04.000 * * @eloix * * @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.CopySordData", { extend: "sol.common.ix.FunctionBase", requiredConfig: ["source", "objId"], /** @cfg {String} source (required) * Object ID of the source ELO object. */ /** @cfg {String} objId (required) * Object ID of the destination ELO object. */ /** @cfg {Array} suppressedFields * Field names of the fields that should not be copied. */ /** @cfg {Array} suppressedMapFields * Map field names of map fields that should not be copied. */ /** @cfg {boolean} suppressedFieldsDelete * If `true`, the suppressedFields will delete. */ /** * @cfg {boolean} [overwriteWithEmptyString=false] * If `true`, the destination field will be overwritten with an empty string */ initialize: function (config) { var me = this; me.$super("sol.common.ix.FunctionBase", "initialize", [config]); }, /** * @private * Converts a string array to an object * @param {Array} arr * @return {Object} */ convertStringArrayToObject: function (arr) { var obj = {}; if (arr) { arr.forEach(function (element) { obj[element] = true; }, this); } return obj; }, /** * Performs copying Sord data */ process: function () { var me = this, suppressedFieldsObj, suppressedMapFieldsObj, sordZ, srcSord, dstSord, srcKeyValues, i, objKey, value, dstKeyValues = []; suppressedFieldsObj = me.convertStringArrayToObject(me.suppressedFields); suppressedMapFieldsObj = me.convertStringArrayToObject(me.suppressedMapFields); sordZ = new SordZ(SordC.mbObjKeys); srcSord = ixConnect.ix().checkoutSord(me.source, new EditInfoZ(0, sordZ), LockC.NO).sord; dstSord = ixConnect.ix().checkoutSord(me.objId, new EditInfoZ(0, sordZ), LockC.NO).sord; for (i = 0; i < dstSord.objKeys.length; i++) { objKey = dstSord.objKeys[i]; if ((objKey.id <= DocMaskLineC.MAX_ID_DOCMASK_LINE) && !suppressedFieldsObj[objKey.name]) { value = sol.common.SordUtils.getObjKeyValue(srcSord, objKey.name) || ""; if (value || me.overwriteWithEmptyString) { objKey.data = [value]; } } else { if (me.suppressedFieldsDelete && suppressedFieldsObj[objKey.name]) { objKey.data = [""]; } } } ixConnect.ix().checkinSord(dstSord, sordZ, LockC.NO); srcKeyValues = ixConnect.ix().checkoutMap(MapDomainC.DOMAIN_SORD, me.source, null, LockC.NO).items; srcKeyValues.forEach(function (keyValue) { keyValue = me.prepareMapItem(keyValue); if (!suppressedMapFieldsObj[String(keyValue.key).replace(/\d+$/, "")]) { dstKeyValues.push(keyValue); } else { keyValue.value = null; dstKeyValues.push(keyValue); } }, this); ixConnect.ix().checkinMap(MapDomainC.DOMAIN_SORD, me.objId, me.objId, dstKeyValues, LockC.NO); }, /** * Prepares a map item that should be copied to a new sord depending on the used IX version. * @param {de.elo.ix.client.KeyValue|de.elo.ix.client.MapValue} srcMapItem * @return {de.elo.ix.client.KeyValue|de.elo.ix.client.MapValue} */ prepareMapItem: function (srcMapItem) { var me = this, dstMapItem; me.ixSupportsMapValue = (typeof me.ixSupportsMapValue === "undefined") ? sol.common.RepoUtils.checkVersion(ixConnect.clientVersion, "10.00.020.007") : me.ixSupportsMapValue; if (me.ixSupportsMapValue) { dstMapItem = srcMapItem; } else { dstMapItem = new KeyValue(srcMapItem.key, srcMapItem.value); } return dstMapItem; } }); /** * @member sol.common.ix.functions.CopySordData * @static * @inheritdoc sol.common.ix.FunctionBase#onEnterNode */ function onEnterNode(clInfo, userId, wFDiagram, nodeId) { var params, module; logger.enter("onEnterNode_CopySordData", { flowId: wFDiagram.id, nodeId: nodeId }); params = sol.common.WfUtils.parseAndCheckParams(wFDiagram, nodeId); params.objId = wFDiagram.objId; module = sol.create("sol.common.ix.functions.CopySordData", params); module.process(); logger.exit("onEnterNode_CopySordData"); } /** * @member sol.common.ix.functions.CopySordData * @static * @inheritdoc sol.common.ix.FunctionBase#onExitNode */ function onExitNode(clInfo, userId, wFDiagram, nodeId) { var params, module; logger.enter("onExitNode_CopySordData", { flowId: wFDiagram.id, nodeId: nodeId }); params = sol.common.WfUtils.parseAndCheckParams(wFDiagram, nodeId); params.objId = wFDiagram.objId; module = sol.create("sol.common.ix.functions.CopySordData", params); module.process(); logger.exit("onExitNode_CopySordData"); } /** * @member sol.common.ix.functions.CopySordData * @method RF_sol_function_CopySordData * @static * @inheritdoc sol.common.ix.FunctionBase#RF_FunctionName */ function RF_sol_function_CopySordData(iXSEContext, args) { var params, module; logger.enter("RF_sol_function_CopySordData", args); params = sol.common.ix.RfUtils.parseAndCheckParams(iXSEContext, arguments.callee.name, args, "source", "objId"); module = sol.create("sol.common.ix.functions.CopySordData", params); module.process(); logger.exit("RF_sol_function_CopySordData"); }