1. 程式人生 > >問題:如何讓業務對象和對應的流程關聯?

問題:如何讓業務對象和對應的流程關聯?

cut mes long workflow create sna 啟動流程 sets process

發現ProcessInstance 有個方法getBusinessKey()可以得到一個businessKey。

ProcessInstance 對應數據庫中的表act_ru_execution有個字段BUSINESS_KEY_對應類中的businessKey,這個字段在創建表時自動被設置為unique

解決:

1、保證流程的ID和業務對象的類名一致。例如:流程id為LeaveBill,我們的業務對象的類名也創建為LeaveBill。

2、在流程啟動的時候獲取業務對象執行方法的時候傳入businessKey,workflowService.startProcess(key,businessKey,vars);(這裏vars為一些變量根據實際情況可有可無)businessKey 產生規則: className+“.”+objId

public void startProcess(Long id) {
        //1. 獲取業務對象
        LeaveBill bill = this.get(id);
        if(bill!=null){
            // 修改業務對象狀態
            bill.setState(1);// 請假單狀態 0初始錄入,1.開始審批,2為審批通過
            this.update(bill);
            //2. 添加流程變量(Map)
            Map<String,Object> vars = new
HashMap<>(); vars.put("inputUser", bill.getUser().getName()); // 添加變量來描述業務對象的信息 String classType =bill.getClass().getSimpleName(); vars.put("classType", classType); vars.put("objId", bill.getId()); //3. 啟動流程 // 獲取流程定義key
String key = classType; // 獲取業務鍵 產生規則: className+“.”+objId String businessKey = classType +"." + bill.getId(); this.workflowService.startProcess(key,businessKey,vars); } }

3、根據以下方法就可以用taskId獲取業務對象id

public String getBusinessObjId(String taskId) {
    //1  獲取任務對象
    Task task  =  taskService.createTaskQuery().taskId(taskId).singleResult();
    
    //2  通過任務對象獲取流程實例
    ProcessInstance pi = runtimeService.createProcessInstanceQuery().processInstanceId(task.getProcessInstanceId()).singleResult();
    //3 通過流程實例獲取“業務鍵”
    String businessKey = pi.getBusinessKey();
    //4 拆分業務鍵,拆分成“業務對象名稱”和“業務對象ID”的數組 
    // a=b  LeaveBill.1
    String objId = null;
    if(StringUtils.isNotBlank(businessKey)){
        objId = businessKey.split("\\.")[1];
    }
    return objId;
    }

根據業務鍵獲取流程實例和任務

ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceBusinessKey("LeaveBill.1").singleResult();
Task task = taskService.createTaskQuery().processInstanceBusinessKey("LeaveBill.1").singleResult();

問題:如何讓業務對象和對應的流程關聯?