    //@include lib_Class.js

    /**
     * This class contains convinience methods for working with templateSord formatted sord objects
     *
     * The structure of a templateSord object is the following:
     *
     *  {
     *    objKeys: {
     *        INDEXFIELD_A: "value",
     *        INDEXFIELD_B: "34"
     *    },
     *    mapKeys: {},
     *    wfMapKeys: {}
     *  }
     *
     *  @requires sol.common.ObjectUtils
     */
    sol.define("sol.common.TemplateSordUtils", {
      singleton: true,

      /**
       * @private
       */
      TYPES: {
        GRP: "getObjKey",
        MAP: "getMapKey",
        WFMAP: "getWfMapKey"
      },

      /**
       *
       */
      create: function (objKeys, mapKeys) {
        return {
          objKeys: objKeys || {},
          mapKeys: mapKeys || {},
          wfMapKeys: {}
        };
      },

      /**
       *
       * @param {*} templateSord
       * @param {*} key
       * @returns
       */
      getObjKey: function (templateSord, key) {
        return sol.common.ObjectUtils.getProp(templateSord, "objKeys." + key) || "";
      },

      getMapKey: function (templateSord, key) {
        return sol.common.ObjectUtils.getProp(templateSord, "mapKeys." + key) || "";
      },

      getWfMapKey: function (templateSord, key) {
        return sol.common.ObjectUtils.getProp(templateSord, "wfMapKeys." + key) || "";
      },

      getValue: function (templateSord, typeDef) {
        var accessorFunction;
        if (!typeDef || !typeDef.type || !typeDef.key) {
          throw Error("type definition must not be null and have the structure of {type, key}");
        }

        // Delegate one of the templateSord getter methods
        accessorFunction = this.TYPES[typeDef.type.toUpperCase()];

        if (!accessorFunction) {
          throw Error("type " + typeDef.type + " is not supported");
        }

        return sol.common.TemplateSordUtils[accessorFunction].call(this, templateSord, typeDef.key);
      },

      /**
       * @requires sol.common.ObjectFormatter.MapTableToArray
       * @param {*} templateSord
       * @param {*} fields
       */
      getTable: function (templateSord, fields, tableKind) {
        var converter, outputDef,
          createOutputDef = function (key) {
            return { source: { key: key }, target: { prop: key } };
          };

        fields = sol.common.ObjectUtils.toArray(fields);

        // prepare output definition for ObjectFormatter.MapTableToArray
        // The class needs some special format of its output configurations
        outputDef = (fields || []).map(function (field) {
          return createOutputDef(field.key || field);
        });

        converter = sol.create("sol.common.ObjectFormatter.MapTableToArray", {
          kind: tableKind,
          output: outputDef
        });

        return converter.format(templateSord);
      }

    });