欧美vvv,亚洲第一成人在线,亚洲成人欧美日韩在线观看,日本猛少妇猛色XXXXX猛叫

新聞資訊

    流程實例

    1.什么是流程實例

    **流程實例()**代表流程定義的執行實例。

    一個流程實例包含了所有的運行節點。我們可以利用這個對象來了解當前流程實例的進度等信息。

    例如:用戶或程序按照流程定義內容發起一個流程,就是一個流程實例

    流程定義和流程實例的圖解:

    2.啟動流程實例

    流程定義部署后,就可以通過去管理流程的執行,執行流程表示流程的一次執行。

    比如部署出差流程后,某個用戶申請出差就需要執行這個出差流程,另一用戶同樣也可以執行這個出差流程,兩個流程實例之間是互不影響的,每個執行的都是單獨的流程實例。

    啟動流程實例時,指定,就會在表中存儲

    :業務標識,通常為業務表的主鍵,業務標識與流程實例對應。業務標識來源于業務系統,存儲的業務標識就是為了關聯查詢業務系統數據。

    比如:啟動一個出差流程實例,就可以將出差申請單的id作為業務標識存到中,將來查詢流程實例信息時,就可以查出業務標識,從而查詢出業務系統到中的出差單詳細信息。

    2.1啟動流程實例編碼

        /**
         * 啟動實例,添加業務標識businessKey
         */
        @Test
        public void addBusinessKey() {
            //得到processEngine
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //得到runtimeService
            RuntimeService runtimeService = processEngine.getRuntimeService();
            /**
             * 啟動實例,同時指定業務標識businessKey
             * startProcessInstanceByKey(String processDefinitionKey, String businessKey)
             * processDefinitionKey:流程定義的key
             * businessKey:業務標識,根據業務參數傳入
             */
            ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("evection", "1001");
            //輸出流程實例信息中的業務標識
            System.out.println("業務標識:" + processInstance.getBusinessKey());
        }
    

    2.2啟動流程實例操作表說明

    啟動流程實例,操作表如下:

    流程實例執行表,記錄當前流程實例的執行情況,一個流程實例運行完成,此表的流程實例相關記錄也會刪除。

    該表中總會有一條記錄的主鍵id和流程實例id相同。

    任務參與者表,記錄當前參與任務的用戶或組

    流程實例歷史表

    流程啟動,會在此表插入一條記錄,流程實例運行完成不會刪除。

    任務歷史表,記錄所有任務

    開始一個任務,不僅在表插入記錄,也會在歷史任務表插入一條記錄,任務歷史表的主鍵就是任務id,任務完成此表記錄不刪除。

    活動歷史表,記錄所有活動

    活動包括任務,所以此表中不僅記錄了任務,還記錄了流程執行過程的其他活動,比如開始事件、結束事件。

    3.查詢流程實例

    流程在運行過程中可以查詢流程實例的狀態,當前運行節點等信息

        /**
         * 查詢流程實例
         */
        @Test
        public void queryTaskProcess() {
            //流程定義key
            String processDefinitionKey = "evection";
            //獲取ProcessEngine
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //獲取runtimeService
            RuntimeService runtimeService = processEngine.getRuntimeService();
            //獲取流程實例
            List<ProcessInstance> instanceList = runtimeService
                    .createProcessInstanceQuery()
                    .processDefinitionKey(processDefinitionKey)
                    .list();
            instanceList.forEach(instance -> {
                System.out.println("========================");
                System.out.println("流程實例id:" + instance.getId());
                System.out.println("所屬流程定義id:" + instance.getProcessDefinitionId());
                System.out.println("是否執行完成:" + instance.isEnded());
                System.out.println("是否暫停:" + instance.isSuspended());
                System.out.println("當前活動標識id:" + instance.getActivityId());
            });
        }
    

    4.關聯

    需求:

    在實際應用時,查詢流程實例列表時可能要顯示業務系統的一些相關信息,比如:查詢當前運行的出差流程列表需要列出出差單名稱、出差天數等信息,而出差天數等信息是由業務系統定義的,存在業務系統中,并沒有在數據庫中存儲,所以無法通過查詢到出差天數信息。

    實現:

    當查詢流程實例時,通過(業務標識)關聯查詢業務系統的出差單表,查詢出出差天數等信息。但是前提是,在啟動流程實例的時候,需要將存儲到中,一般存相關業務操作表的主鍵id。

    添加方式為:

    ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("evection", "1001");
    

    之后可以從中獲取,再通過去獲取對應業務表中的數據。

    獲取方式為:

    String businessKey = processInstance.getBusinessKey();
    

    在的表中沒有任務的實例在運行,字段就是存放業務KEY的

    5.掛起/激活流程實例

    在某些情況下,由于流程變更需要將當前運行的流程暫停而不是直接刪除,就需要暫停流程,不再繼續執行。

    5.1全部流程實例掛起/激活

    操作流程定義為掛起狀態,該流程定義下邊所有的流程實例全部暫停。

    流程定義為掛起狀態,該流程定義將不允許啟動新的流程實例沒有任務的實例在運行,同時該流程定義下所有的流程實例將全部掛起暫停執行,完成流程定義下的流程實例將會拋異常

        /**
         * 全部流程實例掛掛起===》直接將對應的流程定義掛起,該流程定義下的所有流程實例掛起
         * 全部流程實例掛激活===》直接將對應的流程定義激活,該流程定義下的所有流程實例激活
         */
        @Test
        public void suspendAllProcessInstance() {
            //獲取processEngine
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //獲取RepositoryService
            RepositoryService repositoryService = processEngine.getRepositoryService();
            //查詢流程定義對象
            ProcessDefinition processDefinition = repositoryService
                    .createProcessDefinitionQuery()
                    .processDefinitionKey("evection")
                    .singleResult();
            //得到當前流程定義是否為掛起狀態
            boolean suspended = processDefinition.isSuspended();
            //流程定義id
            String processDefinitionId = processDefinition.getId();
            //判斷是否掛起
            if (suspended) {
                //如果是掛起,執行激活操作
                //參數1:流程定義id 參數2:是否激活 參數3:激活時間
                repositoryService.activateProcessDefinitionById(processDefinitionId, true, null);
                System.out.println("流程定義:" + processDefinitionId + ",已激活");
            } else {
                //如果是激活,執行掛起操作
                //參數1:流程定義id 參數2:是否掛起 參數3:掛起時間
                repositoryService.suspendProcessDefinitionById(processDefinitionId, true, null);
                System.out.println("流程定義:" + processDefinitionId + ",已掛起");
            }
        }
    

    5.2單個流程實例掛起/激活

    操作流程實例對象,針對單個流程執行掛起/激活操作,當某個流程實例掛起后則此流程不再繼續執行,完成該流程實例將會拋出異常。

        /**
         * 單個流程實例掛起與激活
         */
        @Test
        public void suspendSingleProcessInstance() {
            //獲取processEngine
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //獲取RuntimeService
            RuntimeService runtimeService = processEngine.getRuntimeService();
            //查詢流程實例對象
            ProcessInstance processInstance = runtimeService
                    .createProcessInstanceQuery()
                    //流程實例id根據自己的數據填寫
                    .processInstanceId("30001")
                    .singleResult();
            //得到當前流程實例是否是掛起狀態
            boolean suspended = processInstance.isSuspended();
            //流程實例id
            String processInstanceId = processInstance.getId();
            //判斷是否掛起
            if (suspended) {
                //如果是掛起,執行激活操作
                //參數1:流程實例id
                runtimeService.activateProcessInstanceById(processInstanceId);
                System.out.println("流程實例:" + processInstanceId + ",已激活");
            } else {
                //如果是激活,執行掛起狀態
                //參數1:流程實例id
                runtimeService.suspendProcessInstanceById(processInstanceId);
                System.out.println("流程實例:" + processInstanceId + ",已掛起");
            }
    

    當流程定義或者某個流程實例掛起,完成流程實例將會拋出異常。

網站首頁   |    關于我們   |    公司新聞   |    產品方案   |    用戶案例   |    售后服務   |    合作伙伴   |    人才招聘   |   

友情鏈接: 餐飲加盟

地址:北京市海淀區    電話:010-     郵箱:@126.com

備案號:冀ICP備2024067069號-3 北京科技有限公司版權所有