    importPackage(Packages.de.elo.ix.client);

    //@include lib_Class.js
    //@include lib_sol.common.WfUtils.js
    //@include lib_sol.common.ix.RfUtils.js
    //@include lib_sol.common.ix.FunctionBase.js

    var logger = sol.create("sol.Logger", { scope: "sol.common.ix.functions.CheckFromService" });

    /**
     * Checks if a workflow was started by a service.
     *
     * To perform the check, this class uses {@link sol.common.WfUtils#isServiceWf}
     *
     * Can be used as node exit script. It updates the ELO_WF_STATUS field as configured.
     *
     * # As workflow node
     *
     * Following configuration can be applied to the comments field.
     *
     *     {
     *       "wfStatus": { "fromService": "CREATED_FROM_SERVICE", "noneService": "NOT_CREATED_FROM_SERVICE" }
     *     }
     *
     * @author PZ, ELO Digital Office GmbH
     * @version 1.1
     *
     * @eloix
     * @requires  sol.common.WfUtils
     * @requires  sol.common.ix.RfUtils
     * @requires  sol.common.ix.FunctionBase
     *
     */
    sol.define("sol.common.ix.functions.CheckFromService", {
      extend: "sol.common.ix.FunctionBase",

      requiredConfig: ["wfDiagram"],

      /**
       * @cfg {de.elo.ix.client.WFDiagram} wfDiagram (required)
       * The workflow which should be checked.
       */

      /**
       * @cfg {Object} wfStatus
       *
       *     "wfStatus": { "fromService": "yaaay", "noneService": "ohNooo" }
       *
       * This object can override the default workflow states which will be set after the check, if ths was used in a workflow node.
       * If the is `undefined`, the unction will throw an exception in case the checke fails.
       *
       * - `fromService`: set as ELO_WF_STATUS after a successfull check
       * - `noneService`: set as ELO_WF_STATUS after a check failure
       */

      /**
       * @private
       * @property {String} [DEFAULT_PASSED_STATUS="FROM_SERVICE"] Default workflow status in case of a successful check
       */
      DEFAULT_PASSED_STATUS: "FROM_SERVICE",

      /**
       * @private
       * @property {String} [DEFAULT_FAILED_STATUS="FROM_USER"] Default workflow status in case of a check failure
       */
      DEFAULT_FAILED_STATUS: "FROM_USER",

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

      /**
       * Performs the check.
       */
      process: function () {
        var me = this,
            isServiceWf, status;

        isServiceWf = sol.common.WfUtils.isServiceWf(me.wfDiagram);

        if (isServiceWf) {
          status = (me.wfStatus && me.wfStatus.fromService) ? me.wfStatus.fromService : me.DEFAULT_PASSED_STATUS;
        } else {
          status = (me.wfStatus && me.wfStatus.noneService) ? me.wfStatus.noneService : me.DEFAULT_FAILED_STATUS;
        }

        sol.common.WfUtils.setWorkflowStatus(me.wfDiagram, status);
      }

    });

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

      logger.enter("onExitNode_FromServiceCheck", { flowId: wFDiagram.id, nodeId: nodeId });

      params = sol.common.WfUtils.parseAndCheckParams(wFDiagram, nodeId);
      params.wfDiagram = wFDiagram;
      module = sol.create("sol.common.ix.functions.CheckFromService", params);

      module.process();

      logger.exit("onExitNode_FromServiceCheck");
    }