Activiti工作流之业务标识和流程的挂起激活
1.Businesskey(業務標識)
啟動流程實例時,指定的businesskey,就會在act_ru_execution 流程實例的執行表中存儲businesskey。
Businesskey:業務標識,通常為業務表的主鍵,業務標識和流程實例一一對應。業務標識來源于業務系統。存儲業務標識就是根據業務標識來關聯查詢業務系統的數據。 比如:請假流程啟動一個流程實例,就可以將請假單的 id 作為業務標識存儲到 activiti 中,將來查詢 activiti 的流程實例信息就可以獲取請假單的 id 從而關聯查詢業務系統數據庫得到請假單信息。
/*** 啟動流程實例,添加進businessKey** 本質:act_ru_execution表中的businessKey的字段要存入業務標識*/ public class BusinessKeyAdd { ? ?public static void main(String[] args) {//1.得到ProcessEngine對象ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); ?//2.得到RuntimeService對象RuntimeService runtimeService = processEngine.getRuntimeService(); ?//3.啟動流程實例,同時還要指定業務標識businessKey 它本身就是請假單的id//第一個參數:是指流程定義key//第二個參數:業務標識businessKeyProcessInstance processInstance = runtimeService.startProcessInstanceByKey("holiday", "1001"); ?//4.輸出processInstance相關的屬性,取出businessKey使用:processInstance.getBusinessKey()System.out.println(processInstance.getBusinessKey()); ?} }啟動流程實例,查看當前實例的執行情況
SELECT * FROM act_ru_execution
?
說明: 流程實例執行,如果當前只有一個分支時,一個流程實例只有一條記錄且執行表的主鍵 id 和流程實例 id 相同,如果當前有多個分支正在運行則該執行表中有多條記錄,存在執行表的主鍵和流程實例id 不相同的記錄。不論當前有幾個分支總會有一條記錄的執行表的主鍵和流程實例 id 相同 一個流程實例運行完成,此表中與流程實例相關的記錄刪除。
2.關聯Businesskey
需求: 在 activiti 實際應用時,查詢流程實例列表時可能要顯示出業務系統的一些相關信息,比如:查詢當前運行的請假流程列表需要將請假單名稱、請假天數等信息顯示出來,請假天數等信息在業務系統中存在,而并沒有在 activiti 數據庫中存在,所以是無法通過 activiti 的 api 查詢到請假天數等信息。
實現:
在查詢流程實例時,通過 businessKey關聯查詢業務系統的請假單表,查詢出請假天 數等信息。
3.掛起/激活流程實例
某些情況可能由于流程變更需要將當前運行的流程暫停而不是直接刪除,流程暫停后將不會繼續執行 。
(1)全部流程實例掛起
操作流程定義為掛起狀態,該流程定義下邊所有的流程實例全部暫停: 流程定義為掛起狀態該流程定義將不允許啟動新的流程實例,同時該流程定義下所有的流程實例將全部掛起暫停執行。
/*** 全部流程實例掛起與激活*/ public class SuspendProcessInstance { ? ?public static void main(String[] args) {//1.得到ProcessEngine對象ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); ?//2.得到RepositoryServiceRepositoryService repositoryService = processEngine.getRepositoryService(); ?//3.查詢流程定義的對象ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionKey("holiday").singleResult(); ?//4.得到當前流程定義的實例是否都為暫停狀態boolean suspended = processDefinition.isSuspended(); ?String processDefinitionId = processDefinition.getId();//5.判斷if(suspended){//說明是暫停,就可以激活操作repositoryService.activateProcessDefinitionById(processDefinitionId,true,null);System.out.println("流程定義:"+processDefinitionId+"激活");}else{repositoryService.suspendProcessDefinitionById(processDefinitionId,true,null);System.out.println("流程定義:"+processDefinitionId+"掛起");} ?} }(2)單個流程實例掛起
操作流程實例對象,針對單個流程執行掛起操作,某個流程實例掛起則此流程不再繼續執行,完成該流程實例的當前任務將報異常。
/*** 全部流程實例掛起與激活*/ public class SuspendProcessInstance { ? ?public static void main(String[] args) {//1.得到ProcessEngine對象ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); ?//2.得到RepositoryServiceRepositoryService repositoryService = processEngine.getRepositoryService(); ?//3.查詢流程定義的對象ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionKey("holiday").singleResult(); ?//4.得到當前流程定義的實例是否都為暫停狀態boolean suspended = processDefinition.isSuspended(); ?String processDefinitionId = processDefinition.getId();//5.判斷if(suspended){//說明是暫停,就可以激活操作repositoryService.activateProcessDefinitionById(processDefinitionId,true,null);System.out.println("流程定義:"+processDefinitionId+"激活");}else{repositoryService.suspendProcessDefinitionById(processDefinitionId,true,null);System.out.println("流程定義:"+processDefinitionId+"掛起");} ?} }?
總結
以上是生活随笔為你收集整理的Activiti工作流之业务标识和流程的挂起激活的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在SpringBoot中使用redis实
- 下一篇: Activiti工作流之个人任务分配模式