一.簡介
上一篇中學習了Flowable 中的流程模板(流程定義)的部署問題,這一篇來學習什么叫流程實例。
部署之后的流程模板,還不能直接運行,例如我們部署了一個請假流程,現(xiàn)在 張三想要請假,他就需要開啟一個請假流程,李四 想請假,他也需要開啟一個請假流程,這開啟的請假流程就是流程實例,**而我們一開始部署的請假流程,則類似于一個模版,基于此模版,我們可以開啟很多個具體的流程實例。
**從這個角度來看,之前定義的 ProcessDefinition 就類似于一個 Java 類,今天要學習的 ProcessInstance 則相當于一個 Java 對象。
二.捋清概念:
首先我們需要先捋清三個概念:
流程定義 ProcessDefinition
流程實例 ProcessInstance
執(zhí)行實例 Execution
1.流程定義 ProcessDefinition
流程定義 ProcessDefinition 。將一個流程 XML 文件部署到 flowable 中,這就是一個定義好的流程了,基于這個定義好的流程,我們可以開啟很多流程實例。
2.流程實例 ProcessInstance
流程實例 ProcessInstance 就是通過流程定義啟動的一個流程,他表示一個流程從開始到結束的最大的流程分支,流程實例和流程定義的關系就類似于 Java 對象和 Java 類之間的關系。
3.執(zhí)行實例 Execution
執(zhí)行實例 Execution 稍微有點難以理解。
首先從類的關系上來看,ProcessInstance 就是 Execution 的子類。
流程實例通常是執(zhí)行實例的根結點,即在一個流程中,出口和入口可以算是一個流程實例的節(jié)點,而中間的過程則是執(zhí)行實例。
假如流程本身就是一條線,那么流程實例和執(zhí)行實例基本上是一樣的,但是如果流程中包含多條線,例如下圖:
這張圖中有并行網關,并行任務執(zhí)行的時候,每一個并行任務就是一個執(zhí)行實例,這樣大家就好理解了。
結論就是:在一個流程實例中,除了開始和結束之外,其他的都是執(zhí)行實例。即使流程只有一條線,中間的也都是執(zhí)行實例,只不過此時的執(zhí)行實例等于流程實例而已。
三.五種流程啟動方式
當我們將流程部署好之后,接下來啟動流程,我們有五種不同的方式去啟動一個流程。
1.通過流程定義的 id 去啟動
首先就是通過流程定義的 id 去啟動一個流程,對應的方法名稱就是 RuntimeService#startProcessInstanceById,該方法有好幾個重載的方法,不同的重載方法只是傳遞的參數(shù)不同而已,其他基本上都是一樣的。
2.通過流程的 key 去啟動
也可以通過流程定義的 key 去啟動一個流程,這個流程定義的 key 其實就是流程 XML 文件中的 id,這個對應的方法名是 RuntimeService#startProcessInstanceByKey。
3.通過流程的 key+tenantId 去啟動
有這樣一種情況,例如我有兩個子系統(tǒng) A 和 B,A 和 B 中都有一個請假流程的定義,現(xiàn)在當我想要啟動一個流程的時候,怎么知道是啟動 A 的請假流程還是啟動 B 的請假流程呢?此時我們可以通過租戶 ID 即 tenantId 去區(qū)分,所以,流程啟動就還有一個方法 RuntimeService#startProcessInstanceByKeyAndTenantId。文章來源:http://www.zghlxwxcb.cn/news/detail-430596.html
4.通過流程的 message 去啟動
通過消息去啟動一個流程,對應的方法是 RuntimeService#startProcessInstan文章來源地址http://www.zghlxwxcb.cn/news/detail-430596.html
到了這里,關于Springboot +Flowable,詳細解釋啥叫流程實例(二)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!