溫馨提示×

溫馨提示×

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

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

activiti之流程變量

發(fā)布時間:2020-06-19 06:27:45 來源:網(wǎng)絡(luò) 閱讀:1294 作者:亦輕塵 欄目:軟件技術(shù)

所謂的流程變量,大概也就是和咱們業(yè)務(wù)相關(guān)的數(shù)據(jù),例如我要請假,那我得知道是誰在請假請假人是誰,也就是我要知道activiti的實體和咱們業(yè)務(wù)的javaBean如何關(guān)聯(lián)起來。

       下邊我們先看一下和流程變量的數(shù)據(jù)庫表都有哪些,當(dāng)然我們自己建的表的不說了,都是流程變量。哈哈。

       act_ru_task(正在執(zhí)行的任務(wù)表)和act_hi_taskinst(正在執(zhí)行的任務(wù)表)

       主要記錄了正在執(zhí)行的任務(wù)名稱,流程實例ID,流程定義DI,任務(wù)的key,和流程變量信息。

  activiti之流程變量

       activiti之流程變量

          歷史任務(wù)表記錄的信息和正在執(zhí)行的任務(wù)表信息都一樣,區(qū)別就在于一個是全部的信息,一個事正在執(zhí)行的任務(wù)相關(guān)信息。

       act_hi_comment

      因為是多用于對業(yè)務(wù)的操作,這個表主要記錄了一些不同用于對同一個事件不同的看法,以方便其他用戶做參考。例如請假,項目經(jīng)理一說:我的員工老師加班,就得給家,主任也就直接給了。對吧。

     activiti之流程變量

      act_ru_execute(正在執(zhí)行的實例表)注意business_key,這個字段是我們自定義的,我的方法就是實例 + “.” + "業(yè)務(wù)ID"

activiti之流程變量

      act_ru_variable(正在執(zhí)行的 流程定義表信息)

     activiti之流程變量

       好的,activiti提供的表有流程變量的就是這些表了,既然有了這些表,那么我們看一下這些表在我們業(yè)務(wù)實現(xiàn)的時候都是如何來運(yùn)用的。下邊我通過兩個實例,一個是我在畫流程圖是寫好流程實例,一個是運(yùn)用javaBean來實現(xiàn)。

       簡單實例

      部署并啟動流程實例

[java] view plain copy

  1. ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();  

  2.   

  3. /**部署流程定義從(inputStream)*/  

  4. @Test  

  5. public void deploymentProcessDefinition_input(){  

  6.     InputStream inputStreamBpmn = this.getClass().getResourceAsStream("/diagrams/porcessVariables.bpmn");  

  7.     InputStream inputStreamPng = this.getClass().getResourceAsStream("/diagrams/porcessVariables.png");  

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

  9.                     .createDeployment()   //創(chuàng)建一個部署對象  

  10.                     .name("hellworld部門程序")  

  11.                     .addInputStream("porcessVariables.bpmn", inputStreamBpmn) //使用資源名稱和輸入流(與資源文件的名稱要一直)  

  12.                     .addInputStream("porcessVariables.png", inputStreamPng)  

  13.                     .deploy();  

  14.       

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

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

  17.   

  18. }  

  19.   

  20. @Test  

  21. public void startProcessInstance() {  

  22.     //流程定義的key  

  23.     String processInstenceKey = "processVariables";  

  24.     ProcessInstance pi = processEngine.getRuntimeService() //與正在執(zhí)行的流程實例和執(zhí)行對象相關(guān)的service  

  25.             .startProcessInstanceByKey(processInstenceKey); //使用流程定義的key來啟動流程實例helloworld.bpmn的id,使用key啟動,默認(rèn)用最新的版本啟動  

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

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

  28.       

  29. }  

       當(dāng)我們啟動以后是沒有流程變量的,但是接下來我們就要設(shè)置了,如果我們在我們話流程圖的時候設(shè)置好了的話,例如在單擊bpmn中的某一個任務(wù),選擇Main config,然后在Assign這寫上”張三“,那么我們就要啟動張三的的業(yè)務(wù)流程的話,則需要如下代碼來這是:

[java] view plain copy

  1. <pre name="code" class="java">@Test  

  2.     public void setVariables(){  

  3.         String taskId = "2004";  

  4.         TaskService taskService = processEngine.getTaskService();  

  5.         taskService.setVariableLocal(taskId, "請假天數(shù)"3);   //與任務(wù)ID綁定  

  6.             taskService.setVariable(taskId, "請假日期"new Date());  

  7.         taskService.setVariable(taskId, "請假原因""回家看親");  

  8.           

  9.         System.out.println("設(shè)置成功了");  

  10.     }  

       而上邊代碼的taskId就是實例啟動以后的當(dāng)前正在執(zhí)行的任務(wù)ID,然后我們?nèi)?span >act_ru_variable,act_ru_task等表中都能看到張三的這個名字,但是這樣是可以實現(xiàn),但是我們在實際運(yùn)用中卻都不會這樣用,既然是面向?qū)ο?,我們就?yīng)該這樣。

      

[java] view plain copy

  1. public class Person implements Serializable {  

  2.   

  3.     /** 

  4.      *  

  5.      */  

  6.     private static final long serialVersionUID = 1L;  

  7.     private Integer id;  

  8.     private String name;  

  9.     public String getName()  {  

  10.         return name;  

  11.     }  

  12.     public Integer getId() {  

  13.         return id;  

  14.     }  

  15.     public void setId(Integer id) {  

  16.         this.id = id;  

  17.     }  

  18.     public void setName(String name) {  

  19.         this.name = name;  

  20.     }  

  21. }  

 

[java] view plain copy

  1. @Test  

  2.     public void setVariables(){  

  3.         String taskId = "2004";  

  4.         TaskService taskService = processEngine.getTaskService();  

  5.         /**使用javaBean*/  

  6.         Person p = new Person();  

  7.         p.setId(20);  

  8.         p.setName("menghaibintest");  

  9.         taskService.setVariable(taskId, "人員信息", p);  

  10.         System.out.println("設(shè)置成功了");  

  11.     }  

  12.       


      看一下效果顯示
    
activiti之流程變量

       那么我們獲取一下吧

      

[java] view plain copy

  1. /** 

  2.      * 獲取流程變量 

  3.      */  

  4.     @Test  

  5.     public void getVariables(){  

  6.         TaskService taskService = processEngine.getTaskService();  

  7.         String taskId = "404";  

  8.         Person p = (Person)taskService.getVariable(taskId, "人員信息");  

  9.         System.out.println("id:" + p.getId());  

  10.         System.out.println("name" + p.getName());  

  11.     }  

       當(dāng)然你可能覺得這樣還是不夠友好,我想把我的業(yè)務(wù)和工作流的表區(qū)分開來,只用主外鍵來關(guān)聯(lián),那么下篇博客我來為大家呈現(xiàn)一種耦合性最低的方法。

      簡單總結(jié)一下就是既然要設(shè)置好流程變量,那么就要知道我們的流程變量在數(shù)據(jù)庫中表的位置,和在工作流中如何設(shè)置。既然是面向?qū)ο?,我們就不?yīng)該再去使用一個一個設(shè)置的方式。


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI