    //@include lib_Class.js
    //@include lib_sol.common.JsonUtils.js
    //@include lib_sol.common.RepoUtils.js
    //@include lib_sol.common.SordUtils.js
    //@include lib_sol.common.CounterUtils.js
    //@include lib_sol.common.Template.js
    //@include lib_sol.common.WfUtils.js
    //@include lib_sol.common.ix.RfUtils.js
    //@include lib_sol.common.ix.FunctionBase.js
    //@include lib_sol.common.ix.functions.GenerateIdentifier.js
    //@include lib_sol.contract.mixins.Configuration.js
    //@include lib_sol.common.Injection.js

    var logger = sol.create("sol.Logger", { scope: "sol.contract.ix.functions.generators.GenerateClauseId" });

    /**
     * @author ELO Digital Office GmbH
     * @version 1.0
     *
     * Generates an ID for a document
     *
     * @requires sol.common.JsonUtils
     * @requires sol.common.RepoUtils
     * @requires sol.common.SordUtils
     * @requires sol.common.CounterUtils
     * @requires sol.common.Template
     * @requires sol.common.WfUtils
     * @requires sol.common.ix.RfUtils
     * @requires sol.common.ix.FunctionBase
     * @requires sol.common.ix.functions.GenerateIdentifier
     * @requires sol.contract.mixins.Configuration
     * @requires sol.common.Injection
     */
    sol.define("sol.contract.ix.functions.generators.GenerateClauseId", {
      extend: "sol.common.ix.functions.GenerateIdentifier",

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

      mixins: ["sol.contract.mixins.Configuration", "sol.common.mixins.Inject"],

      inject: {
        templateField: { config: "contract", prop: "clauses.functions.generateClauseId.generatorTemplateField" },
        templateFolder: { config: "contract", prop: "clauses.functions.generateClauseId.templatesFolder" },
        targetField: { config: "contract", prop: "clauses.functions.generateClauseId.targetField" }
      },

      /**
       * @inheritdoc sol.common.ix.functions.GenerateIdentifier#getIdentifierTemplateId
       */
      getIdentifierTemplateId: function () {
        var me = this;
        return me.getTemplateId("Clause ID", me.templateField, me.templateFolder);
      },

      /**
       * @inheritdoc sol.common.ix.functions.GenerateIdentifier#getIdentifier
       */
      getIdentifier: function () {
        var me = this;
        if (!me.targetField) {
          throw "getIdentifier(): Clause ID field name must not be empty.";
        }
        return sol.common.SordUtils.getObjKeyValue(me.sord, me.targetField);
      },

      /**
       * @inheritdoc sol.common.ix.functions.GenerateIdentifier#setIdentifier
       */
      setIdentifier: function (No) {
        var me = this;
        if (!me.targetField) {
          throw "setIdentifier(): Clause ID. field name must not be empty.";
        }
        sol.common.SordUtils.setObjKeyValue(me.sord, me.targetField, No.trim());
      }
    });

    /**
     * @member sol.common.ix.functions.generators.GenerateFileReference
     * @static
     * @inheritdoc sol.common.ix.FunctionBase#onEnterNode
     */
    function onEnterNode(clInfo, userId, wFDiagram, nodeId) {
      logger.enter("onEnterNode_GenerateClauseId", { flowId: wFDiagram.id, nodeId: nodeId });
      var params = sol.common.WfUtils.parseAndCheckParams(wFDiagram, nodeId),
          genProc;

      params.objId = wFDiagram.objId;
      params.flowId = wFDiagram.id;
      genProc = sol.create("sol.contract.ix.functions.generators.ClauseId", params);

      genProc.process();

      logger.exit("onEnterNode_GenerateClauseId");
    }

    /**
     * @member sol.common.ix.functions.generators.GenerateFileReference
     * @static
     * @inheritdoc sol.common.ix.FunctionBase#onExitNode
     */
    function onExitNode(clInfo, userId, wFDiagram, nodeId) {
      logger.enter("onExitNode_GenerateClauseId", { flowId: wFDiagram.id, nodeId: nodeId });
      var params = sol.common.WfUtils.parseAndCheckParams(wFDiagram, nodeId),
          genProc;

      params.objId = wFDiagram.objId;
      params.flowId = wFDiagram.id;
      genProc = sol.create("sol.contract.ix.functions.generators.GenerateClauseId", params);

      genProc.process();

      logger.exit("onExitNode_GenerateClauseId");
    }