2.3 工作流状态(流程节点)处理人设置详解

在设计和定义工作流时,每个状态(流程节点)的处理人可以指定为以下形式:

1. 变量或变量表达式(兼容常量)

变量只能使用与当前用户相关的服务器端变量,比如 @USER_ID@, @USER_NAME@, @DEPARTMENT@。为方便逻辑处理,可以根据业务需要,在用户登录时,提前查询出跟用户相关的信息作为变量,比如上级主管,具体方法参考教程《Enhancer变量体系》第 5 节

以下为几种正确的设置示例:

  • @USER_ID@
  • @USER_NAME@
  • @SUPERIOR_ID@
  • 123 // 常量 数字
  • 'A001' // 常量 字符串
  • '张英' // 常量 字符串
  • '总经理' // 常量 字符串

2. 函数计算

可以通过函数求出状态的处理人,参数结构如下:

  • context {Object} 上下文对象:

    • workflow_id // 工作流 ID
    • workflow_name // 工作流名称
    • version // 版本号
    • status_no // 上一个状态编号
    • status_name // 上一个状态名称
    • action // 上一个执行动作
    • params // 执行动作时,由API传入的外部参数键值对
    • instance_id // 工作流实例 ID。
  • callback {Function} // 回调函数,第一个参数用来传入错误对象(无则设置为 null),第二个参数传入计算结果,需要包含 id, name, title 三个字段属性。

注意:Enhancer 作为全局对象可以在函数中使用。参考 Enhancer 服务端 API

【例 1】找出上一个状态执行人(当前操作人)的上级主管作为当前状态的审批人:

function(context, callback) {
    // 获取当前操作人ID (上一个状态的执行人 ID)。
    var user_id = Enhancer.getVariable('USER_ID'); 

    // 获取当前操作人
    var sql = `SELECT e2.id, e2.name 
                 FROM employee e1, department d, employee e2
                 WHERE e1.department_id = d.id AND d.principal_id = e2.id
                 AND e1.id = ?`;
    var db = Enhancer.getDatabaseService();
    db.execute(sql, [user_id], function(err, result) {
        if (err) {
            return callback(err);
        }
        var sup = result.rows[0] || {};
        callback(null, {id: sup.id, name: sup.name, title: '上级主管'});
    })
}

【例 2】将用户创建(或执行)流程时,从界面操作指定的负责人作为当前状态的审批人:

function (context, callback) {
    var params = context.params; // <-- 最初由API传入的外部参数键值对,里面包含有用户操作选定的负责人信息。
    callback(null, {
        id: params['负责人ID']
        , name: params['负责人姓名']
        , title: params['负责人职务']
    });
}

关于 context.params 最初是如何传入的,后续 3.2 章节会讲到。如需提前了解,可以参考 API WorkflowManager.createInstanceAndDoNext 的 params 参数定义。

3. 流程发起人

4. 无

若流程节点属于属于完结状态,无需处理人,则选择可以设置为无。

results matching ""

    No results matching ""