說說在 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。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章