以請假為例,我們在做工作流的時候一定是需要將我們的業務和工作流來關聯起來的,而Activiti給我們提供了一個便利就是Business_key,而這個字段就是專門用來存儲我們的業務關鍵字。
例如我們有一個請假的業務,而我的請假信息都已經編寫到數據庫的表(tb_leaveBill)中了,但是我怎么樣把我的請假信息關聯到activiti的數據庫表中,對了,就是用給定的Activiti的Business_key,而這里有一個小技巧,例如我的javaBean叫做LeaveBill,而我的請假信息的ID為1,那么我就可以讓他寫成leaveBill.1,技巧就是業務Bean.業務ID,這樣我們就能Business_key的設置了
啟動流程實例(Business_key)
[java] view plain copy
public void saveStartProcess(WorkflowBean workflowBean) {
//獲取請假單ID,使用請假單ID,的對象的LeaveBill
Long id = workflowBean.getId();
LeaveBill leaveBill = leaveBillDao.findLeaveBillById(id);
//更新請假單的狀態
leaveBill.setState(1);
String key = leaveBill.getClass().getSimpleName();
//從session中獲取流程變量
Map<String,Object> variables = new HashMap<String,Object>();
variables.put("inputUser", SessionContext.get().getName()); //表設計唯一
//使用流程變量關聯工作流和業務
String objId = key + "." + id; //格式LeaveBill.id
//啟動流程實例,同時設置流程變量,//使用正在執行的對象表中的一個字段(Businesskey),讓啟動實例關聯業務
runtimeService.startProcessInstanceByKey(key,objId,variables);
}
效果圖如下:
查詢(Business_key)
查詢的時候,我們需要根據任務ID,查詢task對象,然后根據task對象,獲取實例ID,之后使用流程實例查詢Business_key來獲取對應的業務的主鍵,這樣就能查詢到
[java] view plain copy
//使用任務ID,查詢請假單信息
@Override
public LeaveBill findLeaveByTaskId(String taskId) {
//1,使用任務ID,查詢對象task
Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
//2.使用任務ID,獲取實例ID
String processInstanceId = task.getProcessInstanceId();
//3.使用流程實例,查詢
ProcessInstance pi = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
//4.使用流程實例對象獲取BusinessKey
String business_key = pi.getBusinessKey();
//5.獲取Business_key對應的主鍵ID
String id = "";
if(StringUtils.isNotBlank(business_key)){
//截取字符串
id = business_key.split("\\.")[1].toString();
}
LeaveBill leaveBill = leaveBillDao.findLeaveBillById(Long.parseLong(id));
return leaveBill;
}
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。