91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

activiti部署、執行,完成簡單示例

發布時間:2020-07-26 06:18:56 來源:網絡 閱讀:1734 作者:亦輕塵 欄目:軟件技術

在工作流中,我們一切工作流的基本就是工作引擎(ProcessEngine),繼承于EngineService接口,包括流程部署,數據庫連接都是靠著ProcessEngine來實現的。而ProcessEngineConfiguration:流程引擎配置,可以設置數據庫等,默認的數據庫是h3,持久化實現使用的Mybatis,這里我們用的是mysql

       那么既然無論是jbpm或者是activiti都需要ProcessEngine來驅動,那么我們就說一下工作流引擎的使用吧。

       流程部署

       當我們將我們的業務畫成圖的時候,然后利用工作流引擎部署,也就是將我們的流程圖信息放到數據庫,圖和代碼如下:

         activiti部署、執行,完成簡單示例

[java] view plain copy

  1. /**部署流程定義*/  

  2.     @Test  

  3.     public void deploymentProcessDefinition(){  

  4.         Deployment deployment = processEngine.getRepositoryService()  //用于流程定義和部署相關對象的Service  

  5.                         .createDeployment()   //創建一個部署對象  

  6.                         .name("leaveBill部門程序")  

  7.                         .addClasspathResource("diagrams/LeaveBill.bpmn"//從ClassPath資源中加載,一次只能加載一個文件  

  8.                         .addClasspathResource("diagrams/LeaveBill.png")  //從ClassPath資源中加載,一次只能加載一個文件  

  9.                         .deploy();  

  10.           

  11.         System.out.println("deployment" + deployment.getId());   //1  

  12.         System.out.println("deployment" + deployment.getName());//部門程序  

  13.       

  14.     }  

      打印結果如下:

      deployment1
      deploymenthellworld部門程序

      數據庫(部署相關表)解析

      我們看一下數據庫的表會發現,每次部署都是涉及的那三張表,act_re_deployment(流程部署表)activiti部署、執行,完成簡單示例

      該表包含了流程部署的名稱,ID,和部署時間

         act_re_procdef(流程定義表)activiti部署、執行,完成簡單示例

      該表有流程定義的主鍵key,版本(version)源文件名和圖示,還有流程定義ID(key + 版本號+隨機生成的數字)

     act_ge_bytearray(資源文件表)     activiti部署、執行,完成簡單示例

       保存了資源的位置和存儲方式和部署ID,版本號ID等信息

      act_ge_property:主鍵生成策略表

activiti部署、執行,完成簡單示例

         定義了主鍵生成的策略信息

        執行流程

        顧名思義,就是當我們有一個人開始申請請假的時候我們就要執行該請假的流程實例了

[java] view plain copy

  1. /** 

  2.  * 執行流程實例 

  3.  */  

  4. @Test  

  5. public void startProcessInstance(){  

  6.     String processInstanceKey = "LeaveBill";  

  7.     ProcessInstance pi = processEngine.getRuntimeService()  

  8.                         .startProcessInstanceByKey(processInstanceKey);  

  9.     System.out.println("流程實例id:" + pi.getId());  //流程實例id  101  

  10.     System.out.println("流程定義id:" + pi.getProcessDefinitionId());   //流程定義ID helloworld:1:4  

  11. }  

        這樣我們的流程實例就啟動起來了,那么接下來我們看一下在啟動流程實例的時候我們涉及到的表信息

      數據庫分析(實例表)分析

       act_ru_execution: 正在執行的執行對象表,側重流程實例,對象,任務activiti部署、執行,完成簡單示例

       包含了實例ID,流程定義ID,要執行的任務名稱(usertask1)等信息

       act_ru_task:正在執行的任務表,對具體的任務而言,任務執行到哪里了

       activiti部署、執行,完成簡單示例

     act_ru_identitylink流程信息變量act_hi_taskinst:已經執行完的歷史任務信息
activiti部署、執行,完成簡單示例

act_hi_taskinst:已經執行完的歷史任務信息
act_hi_procinst:流程實例的歷史表,存放執行完畢的流程實例信息

act_hi_actinst:存放歷史所有完成的活動

           現在我們對表有一個大致的了解,那么接下來我們就按照我們既定的流程去執行我們的請假,例如第一個項目經理叫張三,那么這個流程實例已啟動,首先需要張三去執行操作,那么我們我們看一下張三的執行任務的詳情,代碼如下:

[java] view plain copy

  1. /** 

  2.      * 查找個人當前的要執行的任務 

  3.      */  

  4.     @Test  

  5.     public void findMyTaskInfo(){  

  6.         String assignee = "張三";  

  7.         List<Task> listTask = processEngine.getTaskService()  

  8.             .createTaskQuery()  

  9.             .taskAssignee(assignee)  

  10.             .list();  

  11.           

  12.         if (listTask!= null && listTask.size() >0) {  

  13.             for (Task task : listTask) {  

  14.                 System.out.println("任務ID:" + task.getId());  

  15.                 System.out.println("任務名稱:" + task.getName());  

  16.                 System.out.println("任務時間:" + task.getCreateTime());  

  17.                 System.out.println("任務的班里人:" + task.getAssignee());  

  18.                 System.out.println("任務的實例ID:" + task.getProcessDefinitionId());  

  19.                 System.out.println("執行對象的ID:" + task.getExecutionId());  

  20.                 System.out.println("任務的班里人:" + task.getAssignee());  

  21.                 System.out.println("流程定義ID:" + task.getProcessInstanceId());  

  22.             }  

  23.         }  

  24.               

  25.           

  26.     }  

       打印信息如下:任務ID:304,任務名稱:【項目經理】審批,任務時間:Sat Jan 23 14:54:35 CST 2016,任務的班里人:張三 任務的實例ID:LeaveBill:2:204     執行對象的ID:301   任務的班里人:張三  流程定義ID:301

       任務完成

        那么接下來我就把任務ID為304的一個流程結束,也就是項目經理同意請假,代碼如下:

[java] view plain copy

  1. /**完成任務*/  

  2. @Test  

  3. public void completeMyPersoinTask() {  

  4.     String taskId = "304";  

  5.     processEngine.getTaskService()  

  6.     .complete(taskId);  

  7.       

  8.     System.out.println("完成任務,任務ID:" + taskId);  

  9. }  

        然后我繼續執行查詢個人任務的時候,我們只能查到主任的任務了,因為項目經理已經執行完畢,所以當前執行的任務是看不到的,但是在歷史信息中是存在的。

       如果我們啟動了實例的話,查詢當前信息的話,實在act_ru_*的表中查詢,根據任務有關的服務,都是taskService,當然Activiti還有很多的服務,例如RepositoryService,RuntimeService, HistoryService等服務。

      大致總結一下,就是先部署,再啟動,個人登陸系統后,根據個人姓名,查到任務ID,完成個人任務,直到全部完成


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

广汉市| 汾西县| 临沭县| 桑日县| 六枝特区| 鲁甸县| 丰都县| 新昌县| 昌吉市| 河东区| 台前县| 墨江| 崇阳县| 天峻县| 咸丰县| 内丘县| 肥东县| 中江县| 岳普湖县| 肥乡县| 嫩江县| 平度市| 九江县| 许昌市| 三明市| 阜阳市| 义乌市| 浮山县| 定结县| 宜春市| 集贤县| 兴海县| 保靖县| 无极县| 海晏县| 丰城市| 通渭县| 宣城市| 柞水县| 青田县| 宜州市|