上面咱們已將學過了流程變量了,能夠在【任務服務、運行時服務、流程開始、完成某個任務時設置流程變量】,而咱們的鏈接就是流程變量的實際應用了….markdown
咱們並非全部的流程都是按一條的路徑來走的,咱們有的時候會根據條件來走不一樣的路。固然了,最終該流程是會一步步走完….app
例子:ide
重要的信息交由老闆來處理,不重要的信息交由經理來處理測試
表達式的結果必須是布爾型idea
我在任務完成時設置流程變量爲不重要,那麼跳到下一個流程時就是經理來進行處理spa
當我設置爲重要的時候,那麼就是交由老闆來處理插件
上面咱們使用連線的時候用了兩個條件 : 要麼條件是「重要」,要麼條件是「不重要」….若是有另外一種狀況呢???就是用戶把條件輸入錯了,寫成「不知道重不重要」,那麼咱們的流程怎麼走???豈不是奔潰了???code
所以,咱們要有一條默認的路來走,就是當該變量不符合任何的條件時,咱們也有一條默認的路對象
值得注意的是:若是是在Eclipse中使用插件的BPMN流程圖,若是使用了排他網關,那麼在Idea下是解析不了的…圖片
解決:
咱們只要從新定義BPMN流程圖的排他網關就好了,idea中的Activiti插件是不用制定默認流程的,只要咱們不設置條件,那就是默認的鏈接線
public class ExclusiveGetWay { private ProcessEngine processEngine = ProcessEngines .getDefaultProcessEngine(); // 部署流程定義,資源來在bpmn格式 @Test public void deployProcessDefi() { Deployment deploy = processEngine.getRepositoryService() .createDeployment().name("排他網關流程") .addClasspathResource("ExclusiveGateway.bpmn") .deploy(); System.out.println("部署名稱:" + deploy.getName()); System.out.println("部署id:" + deploy.getId()); } // 執行流程,開始跑流程 @Test public void startProcess() { String processDefiKey = "bankBill";// bpmn 的 process id屬性 ProcessInstance pi = processEngine.getRuntimeService() .startProcessInstanceByKey(processDefiKey); System.out.println("流程執行對象的id:" + pi.getId());// Execution 對象 System.out.println("流程實例的id:" + pi.getProcessInstanceId());// ProcessInstance // 對象 System.out.println("流程定義的id:" + pi.getProcessDefinitionId());// 默認執行的是最新版本的流程定義 } // 查詢正在運行任務 @Test public void queryTask() { // 取得任務服務 TaskService taskService = processEngine.getTaskService(); // 建立一個任務查詢對象 TaskQuery taskQuery = taskService.createTaskQuery(); // 辦理人的任務列表 List<Task> list = taskQuery.list(); // 遍歷任務列表 if (list != null && list.size() > 0) { for (Task task : list) { System.out.println("任務的辦理人:" + task.getAssignee()); System.out.println("任務的id:" + task.getId()); System.out.println("任務的名稱:" + task.getName()); } } } // 完成任務 @Test public void compileTask() { String taskId = "2404"; Map<String,Object> params=new HashMap<String, Object>(); params.put("visitor", 6); // taskId:任務id processEngine.getTaskService().complete(taskId, params); // processEngine.getTaskService().complete(taskId); System.out.println("當前任務執行完畢"); } }
咱們指定的值並非VIP也不是後臺,那麼就會自動去普通窗口中處理
咱們在快速入門的例子中,是在定義流程圖中硬性指定處理人,其實這麼幹是不夠靈活的,咱們學了流程變量以後,咱們是能夠靈活地指定處理人的….
@Test public void deployProcessDefi() { Deployment deploy = processEngine.getRepositoryService() .createDeployment().name("用戶任務指定流程") .addClasspathResource("AppayBill.bpmn") .deploy(); System.out.println("部署名稱:" + deploy.getName()); System.out.println("部署id:" + deploy.getId()); } // 執行流程,開始跑流程 @Test public void startProcess() { String processDefiKey = "appayBill";// bpmn 的 process id屬性 Map<String,Object> params=new HashMap<String, Object>(); params.put("userID", "王某某"); ProcessInstance pi = processEngine.getRuntimeService() .startProcessInstanceByKey(processDefiKey, params); System.out.println("流程執行對象的id:" + pi.getId());// Execution 對象 System.out.println("流程實例的id:" + pi.getProcessInstanceId());// ProcessInstance // 對象 System.out.println("流程定義的id:" + pi.getProcessDefinitionId());// 默認執行的是最新版本的流程定義 } // 查詢正在運行任務 @Test public void queryTask() { String assignee="王某某";//指定任務處理人 // 取得任務服務 TaskService taskService = processEngine.getTaskService(); // 建立一個任務查詢對象 TaskQuery taskQuery = taskService.createTaskQuery(); // 辦理人的任務列表 List<Task> list = taskQuery .taskAssignee(assignee) .list(); // 遍歷任務列表 if (list != null && list.size() > 0) { for (Task task : list) { System.out.println("任務的辦理人:" + task.getAssignee()); System.out.println("任務的id:" + task.getId()); System.out.println("任務的名稱:" + task.getName()); } } }