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. 无
若流程节点属于属于完结状态,无需处理人,则选择可以设置为无。