    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.ObjectUtils.js
    //@include lib_sol.common.CounterUtils.js
    //@include lib_sol.common.Template.js
    //@include lib_sol.common.TranslateTerms.js
    //@include lib_sol.common.ObjectFormatter.js
    //@include lib_sol.common.ix.FunctionBase.js

    var logger = sol.create("sol.Logger", { scope: "sol.common.ix.functions.ChangeWfName" }); // eslint-disable-line one-var

    /**
     * Changes the workflow name
     *
     * # 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 for a field update:
     *
     * ## Examples
     * Workflow name based on the sord name and a counter:
     *
     *     {
     *       "name": "{{sord.name}} - {{count 'MY_WF_COUNTER'}}"
     *     }
     *
     * Workflow name based on an index, a map and a wf-map field
     *
     *     {
     *       "name": "{{{sord.objKeys.CUSTOMER_NAME}}} - {{{sord.mapKeys.REF_NO}}} - {{{sord.wfMapKeys.FLOW_ID}}}"
     *     }
     *
     * # As IX function call
     *
     * In addition to the workflow node configuration the objId must be passed.
     *
     *     sol.common.IxUtils.execute("RF_sol_function_ChangeWfName", {
     *       flowId: "222",
     *       name: "{{sord.name}} - {{count 'MY_WF_COUNTER'}}"
     *     });
     *
     * @author MW, ELO Digital Office GmbH
     * @version 1.0
     *
     * @eloix
     * @requires sol.Logger
     * @requires sol.common.SordUtils
     * @requires sol.common.JsonUtils
     * @requires sol.common.RepoUtils
     * @requires sol.common.ObjectUtils
     * @requires sol.common.CounterUtils
     * @requires sol.common.Template
     * @requires sol.common.TranslateTerms
     * @requires sol.common.ObjectFormatter.TemplateSord
     * @requires sol.common.WfUtils
     * @requires sol.common.ix.RfUtils
     * @requires sol.common.ix.FunctionBase
     *
     */
    sol.define("sol.common.ix.functions.ChangeWfName", {
      extend: "sol.common.ix.FunctionBase",

      requiredConfig: ["objId"],

      /**
       * @cfg {string} objId (required)
       * Object ID
       */

      /**
       * @cfg {string} flowId
       * Flow ID
       */

      /**
       * @cfg {string} name
       * Workflow name
       */

      initialize: function (config) {
        var me = this;
        me.$super("sol.common.ix.FunctionBase", "initialize", [config]);
      },

      /**
       * Changes the workflow name
       */
      process: function () {
        var me = this,
            wfName;

        if (!me.wfDiagram && me.flowId) {
          me.wfDiagram = sol.common.WfUtils.getWorkflow(me.flowId);
        }

        me.sord = sol.common.RepoUtils.getSord(me.objId, { sordZ: SordC.mbAllIndex });
        me.tplSord = sol.common.WfUtils.getTemplateSord(me.sord, me.wfDiagram.id);
        wfName = sol.create("sol.common.Template", { source: me.name }).apply(me.tplSord);

        me.wfDiagram.name = wfName;
        me.wfDiagram.nameTranslationKey = "";
      }
    });

    /**
     * @member sol.common.ix.functions.ChangeWfName
     * @static
     * @inheritdoc sol.common.ix.FunctionBase#onEnterNode
     */
    function onEnterNode(clInfo, userId, wfDiagram, nodeId) {
      var params, module;

      logger.enter("onEnterNode_ChangeWfName", { flowId: wfDiagram.id, nodeId: nodeId });
      params = sol.common.WfUtils.parseAndCheckParams(wfDiagram, nodeId, "name");

      params.objId = wfDiagram.objId;
      params.wfDiagram = wfDiagram;
      module = sol.create("sol.common.ix.functions.ChangeWfName", params);

      module.process();

      logger.exit("onEnterNode_ChangeWfName");
    }

    /**
     * @member sol.common.ix.functions.ChangeWfName
     * @static
     * @inheritdoc sol.common.ix.FunctionBase#onExitNode
     */
    function onExitNode(clInfo, userId, wfDiagram, nodeId) {
      var params, module;

      logger.enter("onExitNode_ChangeWfName", { flowId: wfDiagram.id, nodeId: nodeId });
      params = sol.common.WfUtils.parseAndCheckParams(wfDiagram, nodeId, "name");

      params.objId = wfDiagram.objId;
      params.wfDiagram = wfDiagram;
      module = sol.create("sol.common.ix.functions.ChangeWfName", params);

      module.process();

      logger.exit("onExitNode_ChangeWfName");
    }

    /**
     * @member sol.common.ix.functions.ChangeWfName
     * @method RF_sol_function_ChangeWfName
     * @static
     * @inheritdoc sol.common.ix.FunctionBase#RF_FunctionName
     */
    function RF_sol_function_ChangeWfName(ec, args) {
      var params, module;

      logger.enter("RF_sol_function_ChangeWfName", args);

      params = sol.common.ix.RfUtils.parseAndCheckParams(ec, arguments.callee.name, args, "flowId", "name");

      module = sol.create("sol.common.ix.functions.ChangeWfName", params);
      module.process();

      ixConnect.ix().checkinWorkFlow(module.wfDiagram, WFDiagramC.mbAll, LockC.NO);

      logger.exit("RF_sol_function_ChangeWfName");
    }