工作流會籤或籤的實現(基於flowable6

chief_y發表於2024-04-18

工作流會籤或籤的實現(基於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}: 當前任務的描述。
  1. 方法表示式

方法表示式 Method expression: 呼叫一個方法,可以帶或不帶引數。當呼叫不帶引數的方法時,要確保在方法名後新增空括號(以避免與值表示式混淆)。傳遞的引數可以是字面值(literal value),也可以是表示式,它們會被自動解析。例如:

${printer.print()}
${myBean.addNewOrder('orderName')}
${myBean.doSomething(myVar, execution)}
${bpmnModelInstance.getModelElementsByType(UserTask.class)}: 獲取流程定義中的所有UserTask元素。

myBean是Spring容器中的個Bean物件,表示呼叫的是bean的addNewOrder方法

二、 或籤會籤實現

​ 在flowable框架中,他會自行維護一些系統變數,這些變數是可以用值表示式直接呼叫的,例如以下三個值:


關鍵:結合上面可以得出結論:
  1. 在bpmn中有一個usertask完成表示式completionCondition

  2. 會籤和或籤都是usertask的多例項,當會籤和或籤時都會生成對應人數的例項

  3. 會籤時的邏輯是需要所有人都進行審批,所以可以設定完成表示式為"${nrOfCompletedInstances >= nrOfInstances}"

  4. 或籤時的邏輯是選定的人裡只要有一個complete那就完成當前節點,所以可以設定完成表示式為$

  5. 這兩個表示式可以後期用來判斷當前這個task是會籤的例項還是或籤的例項,具體程式碼如下

<!-- 會籤 -->
<bpmn2:completionCondition xsi:type=\"bpmn2:tFormalExpression\">${nrOfCompletedInstances &gt;= nrOfInstances}</bpmn2:completionCondition>\n   

<!-- 或籤 -->
<bpmn2:completionCondition xsi:type=\"bpmn2:tFormalExpression\">${nrOfCompletedInstances &gt; 0}</bpmn2:completionCondition>

相關文章