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。