工作流會籤或籤的實現(基於flowable6.8.0)
一、 任務分配和流程變數
Flowable使用UEL進行表示式解析。UEL代表Unified Expression Language,是EE6規範的一部分.Flowable支援兩種UEL表示式: UEL-value 和UEL-method。
1. 值表示式 Value expression: 解析為一個值。預設情況下,所有流程變數都可以使用。(若使用Spring)所有的Spring bean也可以用在表示式裡。例如
1.流程例項相關變數:
${processInstanceId}: 當前流程例項的唯一識別符號。
${processDefinitionId}: 當前流程例項所基於的流程定義的唯一識別符號。
${businessKey}: 流程例項的業務鍵,用於關聯外部系統的業務物件。
2.任務(Task)相關變數:
${taskId}: 當前任務的唯一識別符號。
${taskDefinitionKey}: 任務的定義鍵(Task Definition Key),用於標識任務型別。
${executionId}: 當前任務所屬的執行例項(Execution)的唯一識別符號。
${task.name}: 當前任務的名稱。
${task.description}: 當前任務的描述。
- 方法表示式
方法表示式 Method expression: 呼叫一個方法,可以帶或不帶引數。當呼叫不帶引數的方法時,要確保在方法名後新增空括號(以避免與值表示式混淆)。傳遞的引數可以是字面值(literal value),也可以是表示式,它們會被自動解析。例如:
${printer.print()}
${myBean.addNewOrder('orderName')}
${myBean.doSomething(myVar, execution)}
${bpmnModelInstance.getModelElementsByType(UserTask.class)}: 獲取流程定義中的所有UserTask元素。
myBean是Spring容器中的個Bean物件,表示呼叫的是bean的addNewOrder方法
二、 或籤會籤實現
在flowable框架中,他會自行維護一些系統變數,這些變數是可以用值表示式直接呼叫的,例如以下三個值:
關鍵:結合上面可以得出結論:
-
在bpmn中有一個usertask完成表示式completionCondition
-
會籤和或籤都是usertask的多例項,當會籤和或籤時都會生成對應人數的例項
-
會籤時的邏輯是需要所有人都進行審批,所以可以設定完成表示式為"${nrOfCompletedInstances >= nrOfInstances}"
-
或籤時的邏輯是選定的人裡只要有一個complete那就完成當前節點,所以可以設定完成表示式為$
-
這兩個表示式可以後期用來判斷當前這個task是會籤的例項還是或籤的例項,具體程式碼如下
<!-- 會籤 -->
<bpmn2:completionCondition xsi:type=\"bpmn2:tFormalExpression\">${nrOfCompletedInstances >= nrOfInstances}</bpmn2:completionCondition>\n
<!-- 或籤 -->
<bpmn2:completionCondition xsi:type=\"bpmn2:tFormalExpression\">${nrOfCompletedInstances > 0}</bpmn2:completionCondition>