阅读 2

说说在 jBPM 中,如何利用流程变量设置候选人、候选组或办理人

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。

关注下面的标签,发现更多相似文章
评论