activiti如何讓業務對象和對應的流程關聯


如何讓業務對象和對應的流程 關聯?
  發現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;    
    }

 

 

  4、根據業務鍵獲取流程實例和任務
    
 ProcessInstance processInstance =runtimeService.createProcessInstanceQuery().processInstanceBusinessKey("LeaveBill.1").singleResult();
     Task task =taskService.createTaskQuery().processInstanceBusinessKey("LeaveBill.1").singleResult();

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM