一、接收任務 接收任務(ReceiveTask)即等待任務,接收任務是一個簡單任務,它會等待對應消息的到達。當前,官方只實現了這個任務的java語義。 當流程達到接收任務,流程狀態會保存到資料庫中。在任務創建後,意味著流程會進入等待狀態,直到引擎接收了一個特定的消息, 這會觸發流程穿過接收任務繼續執 ...
一、接收任務
接收任務(ReceiveTask)即等待任務,接收任務是一個簡單任務,它會等待對應消息的到達。當前,官方只實現了這個任務的java語義。 當流程達到接收任務,流程狀態會保存到資料庫中。在任務創建後,意味著流程會進入等待狀態,直到引擎接收了一個特定的消息, 這會觸發流程穿過接收任務繼續執行。
1、流程圖
代碼實現: //運行流程 @Test public void doTask() { RuntimeService runtimeService = this.processEngine.getRuntimeService(); String processDefinitionKey = "myProcess"; ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processDefinitionKey); System.out.println("流程啟動成功:" + processInstance.getId()); /** 使用流程變數設置當日銷售額,用來傳遞業務參數 */ int value = 0;// 應該是去查詢資料庫,進行彙總 ---耗時操作 int tryNum=0;//嘗試彙總次數 while (true) { tryNum++; try { value = this.hzxx(); break; } catch (Exception e) { e.printStackTrace(); if(tryNum==10) { System.out.println("嘗試10次彙總。全部失敗,已終止彙總"); break; } } } runtimeService.setVariable(processInstance.getId(), "當前的銷售額", value); /** 向後執行一步,如果流程處於等待狀態,使得流程繼續執行 */ runtimeService.signal(processInstance.getId()); /** 從流程變數中獲取彙總當日銷售額的值 */ Integer saleMoney = (Integer) runtimeService// .getVariable(processInstance.getId(), "當前的銷售額"); System.out.println(saleMoney); System.out.println("發送簡訊"); Boolean flag = false; int num = 0; do { flag = send(); num++; if (num == 10) { System.out.println("嘗試10次發送。全部失敗,已終止發送"); break; } } while (!flag);
/** 向後執行一步,如果流程處於等待狀態,使得流程繼續執行 */ runtimeService.signal(processInstance.getId()); System.out.println("流程執行完成"); }
//彙總信息 public Integer hzxx() { // 查詢資料庫 System.out.println("數據彙總中...."); try { Thread.sleep(2000); } catch (Exception e) { e.printStackTrace(); } System.out.println("數據彙總完成"); return 10000; }
//發送簡訊 private Boolean send() { System.out.println("發送成功"); return true; }