標籤:
方式1:
在儲存每一個流程執行個體時,設定多個流程變數,通過多個流程變數的組合來過濾篩選符合該組合條件的流程執行個體,以後在需要查詢對應業務對象所對應的流程執行個體時,只需查詢包含該流程變數的值的流程執行個體即可.
設定過程:
public void startProcess(Long id) { Customer cus = get(id); if (cus != null) { // 修改客戶的狀態 cus.setStatus(1); updateStatus(cus); // 將客戶的追蹤銷售人員的nickName放入流程變數,該seller變數可用於查詢包括該seller的流程執行個體 Map<String, Object> map = new HashMap<String, Object>(); if (cus.getSeller() != null) { map.put("seller", cus.getSeller().getNickname()); } // 將客戶的類型和id放入流程變數,此2個流程變數可用於查詢該客戶對象所對應的流程執行個體 String classType = cus.getClass().getSimpleName(); map.put("classType", classType); map.put("objId", id); // 擷取processDefinitionKey,預設為類型簡單名稱加上Flow String processDefinitionKey = classType + "Flow"; // 開啟流程執行個體 workFlowService.startProcessInstanceByKeyAndVariables(processDefinitionKey, map); } }
查詢過程:
/** * 測試根據變數值的限定擷取相應的流程執行個體 * * @throws Exception */ @Test public void testGetFromVariable() throws Exception { Employee sller = new Employee(); sller.setNickname("員工2"); sller.setId(4L); List<ProcessInstance> processInstances = runtimeService.createProcessInstanceQuery() .variableValueEquals("classType", sller.getClass().getSimpleName()) .list(); System.out.println(processInstances); for (ProcessInstance processInstance : processInstances) { System.out.println(processInstance); } //===================================================================================================== Customer cus = new Customer(); cus.setId(4L); List<ProcessInstance> processInstances1 = runtimeService.createProcessInstanceQuery() .variableValueEquals("classType", cus.getClass().getSimpleName()) .variableValueEquals("objId", cus.getId()).list(); System.out.println(processInstances); for (ProcessInstance processInstance : processInstances1) { System.out.println(processInstance); } }
方式2:
使用 businessKey,在開啟流程執行個體時設定businessKey作為業務對象關聯流程執行個體的關聯鍵
設定過程:
/** * 使用businessKey作為流程執行個體關聯業務對象的關聯鍵 * * @throws Exception */ @Test public void testBusKey() throws Exception { //設定businessKey Customer customer = new Customer(); customer.setId(2L); //businessKey採用簡單類名+主鍵的格式 String busniessKey = customer.getClass().getSimpleName() + customer.getId(); String definitionKey = customer.getClass().getSimpleName() + "Flow"; Map<String, Object> map = new HashMap<String, Object>(); map.put("seller", "admin"); //開啟流程 runtimeService.startProcessInstanceByKey(definitionKey, busniessKey, map); }
查詢過程:
/** * 使用businessKey查詢相應業務對象的流程執行個體 * * @throws Exception */ @Test public void testgetByBusKey() throws Exception { List<ProcessInstance> processInstances = runtimeService.createProcessInstanceQuery() .processInstanceBusinessKey("Customer2", "CustomerFlow").list(); System.out.println(processInstances); }
【Activiti】為每一個流程綁定相應的業務對象的2種方法