1 定义
首先要在流程定义文件中,设置好候选人、候选组或办理人变量表达式。
参数名 | 说明 |
---|---|
candidate-users | 候选人,多个以逗号分隔。一般设置为账号 ID。 |
candidate-groups | 候选组,多个以逗号分隔。一般设置为部门 ID 或角色 ID。 |
assignee | 办理人,一般设置为账号 ID。 |
在 *.jpdl.xml 中,形如:
...
<task g="131,45,92,52" name="值班长审核" assignee="#{chiefTelephoneAuditor}">
<transition g="-23,-25" name="给派单员" to="派单员派单"/>
</task>
<task name="话务员审核" g="133,137,92,52"
candidate-users="#{telephoneAuditors}" candidate-groups="#{telephoneAuditorGroups}">
<transition name="给值班长审核" to="值班长审核" g="-81,-22"/>
</task>
...
2 设置
**(1)**启动流程时,设置变量
...
//传入下一节点候选办理者(工单创建者)与候选办理组 ID(话务员群组)
Map<String, Object> variables = new HashMap<>(1);
variables.put(VAR_TELEPHONE_AUDITORS, telephoneAuditorId);
variables.put(VAR_TELEPHONE_AUDITOR_GROUPS, telephoneAuditorGroup);
//启动流程实例
Execution processInstance = executionService.startProcessInstanceByKey
(PROCESS_DEFINITION_KEY, variables, orderId);
...
executionService.startProcessInstanceByKey() 的第二个入参,就可以传入 Map 形式的流程变量。
**(2)**在处理任务时,设置变量
//以流程变量形式设定下一节点办理人
Map<String, Object> variables = new HashMap<>(1);
variables.put(VAR_CHIEF_TELEPHONE_AUDITOR, chiefAuditorId);
taskService.setVariables(taskId, variables);
//完成任务
taskService.completeTask(task.getId());
这里利用 taskService.setVariables() 来设置变量。设置后,完成任务。
3 利用变量查询流程实例
**(1)**查询指定候选人或候选组在某个流程节点下的流程实例
-- 查询某个账号 ID 下、并且在某个流程节点下的所有流程实例
SELECT e.ID_
FROM jbpm4_task t, jbpm4_execution e, jbpm4_participation p
WHERE t.EXECUTION_ID_ = e.ID_
AND t.DBID_ = p.TASK_
AND e.ACTIVITYNAME_ = '[流程节点名称]'
AND p.USERID_ = '1';
-- 查询某个角色 ID 下、并且在某个流程节点下的所有流程实例
SELECT e.ID_
FROM jbpm4_task t, jbpm4_execution e, jbpm4_participation p
WHERE t.EXECUTION_ID_ = e.ID_
AND t.DBID_ = p.TASK_
AND e.ACTIVITYNAME_ = ''[流程节点名称]'
AND p.GROUPID_ = '101';
- 表 jbpm4_participation 以多行的形式存放着多个候选人或候选组的 ID 信息。
- 表 jbpm4_execution 的 ID_ 是流程实例 ID,其格式为“[流程定义文件KEY].[工单ID] ”。
**(2)**查询指定办理人在某个流程节点下的的流程实例
SELECT e.ID_
FROM jbpm4_task t, jbpm4_execution e
WHERE t.EXECUTION_ID_ = e.ID_
AND e.ACTIVITYNAME_ = '[流程节点名称]
AND t.ASSIGNEE_ = '2';
表 jbpm4_task 的 ASSIGNEE_ 存放的就是办理人 ID。