以請(qǐng)假為例,我們?cè)谧龉ぷ髁鞯臅r(shí)候一定是需要將我們的業(yè)務(wù)和工作流來(lái)關(guān)聯(lián)起來(lái)的,而Activiti給我們提供了一個(gè)便利就是Business_key,而這個(gè)字段就是專門用來(lái)存儲(chǔ)我們的業(yè)務(wù)關(guān)鍵字。
成都創(chuàng)新互聯(lián)是一家專業(yè)提供界首企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、html5、小程序制作等業(yè)務(wù)。10年已為界首眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站制作公司優(yōu)惠進(jìn)行中。例如我們有一個(gè)請(qǐng)假的業(yè)務(wù),而我的請(qǐng)假信息都已經(jīng)編寫到數(shù)據(jù)庫(kù)的表(tb_leaveBill)中了,但是我怎么樣把我的請(qǐng)假信息關(guān)聯(lián)到activiti的數(shù)據(jù)庫(kù)表中,對(duì)了,就是用給定的Activiti的Business_key,而這里有一個(gè)小技巧,例如我的javaBean叫做LeaveBill,而我的請(qǐng)假信息的ID為1,那么我就可以讓他寫成leaveBill.1,技巧就是業(yè)務(wù)Bean.業(yè)務(wù)ID,這樣我們就能Business_key的設(shè)置了
啟動(dòng)流程實(shí)例(Business_key)
[java]view plain copy
public void saveStartProcess(WorkflowBean workflowBean) {
//獲取請(qǐng)假單ID,使用請(qǐng)假單ID,的對(duì)象的LeaveBill
Long id = workflowBean.getId();
LeaveBill leaveBill = leaveBillDao.findLeaveBillById(id);
//更新請(qǐng)假單的狀態(tài)
leaveBill.setState(1);
String key = leaveBill.getClass().getSimpleName();
//從session中獲取流程變量
Map
variables.put("inputUser", SessionContext.get().getName()); //表設(shè)計(jì)唯一
//使用流程變量關(guān)聯(lián)工作流和業(yè)務(wù)
String objId = key + "." + id; //格式LeaveBill.id
//啟動(dòng)流程實(shí)例,同時(shí)設(shè)置流程變量,//使用正在執(zhí)行的對(duì)象表中的一個(gè)字段(Businesskey),讓啟動(dòng)實(shí)例關(guān)聯(lián)業(yè)務(wù)
runtimeService.startProcessInstanceByKey(key,objId,variables);
}
效果圖如下:
查詢(Business_key)
查詢的時(shí)候,我們需要根據(jù)任務(wù)ID,查詢task對(duì)象,然后根據(jù)task對(duì)象,獲取實(shí)例ID,之后使用流程實(shí)例查詢Business_key來(lái)獲取對(duì)應(yīng)的業(yè)務(wù)的主鍵,這樣就能查詢到
[java]view plain copy
//使用任務(wù)ID,查詢請(qǐng)假單信息
@Override
public LeaveBill findLeaveByTaskId(String taskId) {
//1,使用任務(wù)ID,查詢對(duì)象task
Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
//2.使用任務(wù)ID,獲取實(shí)例ID
String processInstanceId = task.getProcessInstanceId();
//3.使用流程實(shí)例,查詢
ProcessInstance pi = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
//4.使用流程實(shí)例對(duì)象獲取BusinessKey
String business_key = pi.getBusinessKey();
//5.獲取Business_key對(duì)應(yīng)的主鍵ID
String id = "";
if(StringUtils.isNotBlank(business_key)){
//截取字符串
id = business_key.split("\\.")[1].toString();
}
LeaveBill leaveBill = leaveBillDao.findLeaveBillById(Long.parseLong(id));
return leaveBill;
}