您好,登錄后才能下訂單哦!
所謂的流程變量,大概也就是和咱們業(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,和流程變量信息。
歷史任務(wù)表記錄的信息和正在執(zhí)行的任務(wù)表信息都一樣,區(qū)別就在于一個是全部的信息,一個事正在執(zhí)行的任務(wù)相關(guān)信息。
act_hi_comment
因為是多用于對業(yè)務(wù)的操作,這個表主要記錄了一些不同用于對同一個事件不同的看法,以方便其他用戶做參考。例如請假,項目經(jīng)理一說:我的員工老師加班,就得給家,主任也就直接給了。對吧。
act_ru_execute(正在執(zhí)行的實例表)注意business_key,這個字段是我們自定義的,我的方法就是實例 + “.” + "業(yè)務(wù)ID"
act_ru_variable(正在執(zhí)行的 流程定義表信息)
好的,activiti提供的表有流程變量的就是這些表了,既然有了這些表,那么我們看一下這些表在我們業(yè)務(wù)實現(xiàn)的時候都是如何來運(yùn)用的。下邊我通過兩個實例,一個是我在畫流程圖是寫好流程實例,一個是運(yùn)用javaBean來實現(xiàn)。
部署并啟動流程實例
[java] view plain copy
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
/**部署流程定義從(inputStream)*/
@Test
public void deploymentProcessDefinition_input(){
InputStream inputStreamBpmn = this.getClass().getResourceAsStream("/diagrams/porcessVariables.bpmn");
InputStream inputStreamPng = this.getClass().getResourceAsStream("/diagrams/porcessVariables.png");
Deployment deployment = processEngine.getRepositoryService() //用于流程定義和部署相關(guān)對象的Service
.createDeployment() //創(chuàng)建一個部署對象
.name("hellworld部門程序")
.addInputStream("porcessVariables.bpmn", inputStreamBpmn) //使用資源名稱和輸入流(與資源文件的名稱要一直)
.addInputStream("porcessVariables.png", inputStreamPng)
.deploy();
System.out.println("deployment" + deployment.getId()); //1
System.out.println("deployment" + deployment.getName());//部門程序
}
@Test
public void startProcessInstance() {
//流程定義的key
String processInstenceKey = "processVariables";
ProcessInstance pi = processEngine.getRuntimeService() //與正在執(zhí)行的流程實例和執(zhí)行對象相關(guān)的service
.startProcessInstanceByKey(processInstenceKey); //使用流程定義的key來啟動流程實例helloworld.bpmn的id,使用key啟動,默認(rèn)用最新的版本啟動
System.out.println("流程實例id:" + pi.getId()); //流程實例id
System.out.println("流程定義id:" + pi.getProcessDefinitionId()); //流程定義ID helloworld:1:4
}
當(dāng)我們啟動以后是沒有流程變量的,但是接下來我們就要設(shè)置了,如果我們在我們話流程圖的時候設(shè)置好了的話,例如在單擊bpmn中的某一個任務(wù),選擇Main
config,然后在Assign這寫上”張三“,那么我們就要啟動張三的的業(yè)務(wù)流程的話,則需要如下代碼來這是:
[java] view plain copy
<pre name="code" class="java">@Test
public void setVariables(){
String taskId = "2004";
TaskService taskService = processEngine.getTaskService();
taskService.setVariableLocal(taskId, "請假天數(shù)", 3); //與任務(wù)ID綁定
taskService.setVariable(taskId, "請假日期", new Date());
taskService.setVariable(taskId, "請假原因", "回家看親");
System.out.println("設(shè)置成功了");
}
而上邊代碼的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
public class Person implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
private Integer id;
private String name;
public String getName() {
return name;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
}
[java] view plain copy
@Test
public void setVariables(){
String taskId = "2004";
TaskService taskService = processEngine.getTaskService();
/**使用javaBean*/
Person p = new Person();
p.setId(20);
p.setName("menghaibintest");
taskService.setVariable(taskId, "人員信息", p);
System.out.println("設(shè)置成功了");
}
看一下效果顯示
那么我們獲取一下吧
[java] view plain copy
/**
* 獲取流程變量
*/
@Test
public void getVariables(){
TaskService taskService = processEngine.getTaskService();
String taskId = "404";
Person p = (Person)taskService.getVariable(taskId, "人員信息");
System.out.println("id:" + p.getId());
System.out.println("name" + p.getName());
}
當(dāng)然你可能覺得這樣還是不夠友好,我想把我的業(yè)務(wù)和工作流的表區(qū)分開來,只用主外鍵來關(guān)聯(lián),那么下篇博客我來為大家呈現(xiàn)一種耦合性最低的方法。
簡單總結(jié)一下就是既然要設(shè)置好流程變量,那么就要知道我們的流程變量在數(shù)據(jù)庫中表的位置,和在工作流中如何設(shè)置。既然是面向?qū)ο?,我們就不?yīng)該再去使用一個一個設(shè)置的方式。
免責(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)容。