1. 流程图
2. 部署流程定义+启动流程实例
// 部署流程定义,启动流程实例
@Test
public void testExclusiveGateWay() throws Exception {
// 1 发布流程
InputStream inputStreamBpmn = this.getClass().getResourceAsStream("exclusiveProcess.bpmn");
InputStream inputStreamPng = this.getClass().getResourceAsStream("exclusiveProcess.png");
processEngine.getRepositoryService()//
.createDeployment()//
.addInputStream("exclusiveProcess.bpmn", inputStreamBpmn)//
.addInputStream("exclusiveProcess.png", inputStreamPng)//
.deploy();
// 2 启动流程
ProcessInstance pi = processEngine.getRuntimeService()//
.startProcessInstanceByKey("exclusiveProcess");
System.out.println("pid:"+pi.getId());
}
3. 查询我的个人任务
// 查询我的个人任务列表
@Test
public void findMyTaskList(){
String userId = "王小五";
List<Task> list = processEngine.getTaskService()//
.createTaskQuery()//
.taskAssignee(userId)//指定个人任务查询
.list();
for(Task task:list){
System.out.println("id="+task.getId());
System.out.println("name="+task.getName());
System.out.println("assinee="+task.getAssignee());
System.out.println("assinee="+task.getCreateTime());
System.out.println("executionId="+task.getExecutionId());
}
}
4. 完成我的个人任务
// 完成任务
@Test
public void completeTask() {
String taskId = "2104";
// 可以从页面上获取报销金额填写的值,设置流程变量,由流程怕判断应该执行哪条线
Map<String, Object> variables = new HashMap<String, Object>();
variables.put("money", 200);
processEngine.getTaskService()//
.complete(taskId, variables);//
System.out.println("完成任务);
}
说明:
- 一个排他网关对应一个以上的顺序流
- 由排他网关流出的顺序流都有个conditionExpression元素,在内部维护返回boolean类型的决策结果。
- 决策网关只会返回一条结果。当流程执行到排他网关时,流程引擎会自动检索网关出口,从上到下检索如果发现第一条决策结果为true或者没有设置条件的(默认为成立),则流出。
- 如果没有任何一个出口符合条件,则抛出异常
- 使用流程变量,设置连线的条件,并按照连线的条件执行工作流,如果没有条件符合的条件,则以默认的连线离开。例如:
则执行连线:
如果使用流程变量设置
// 可以从页面上获取报销金额填写的值,设置流程变量,由流程判断应该执行哪条连线
Map<String, Object> variables = new HashMap<String, Object>();
variables.put("money", 800);
processEngine.getTaskService()//
.complete(taskId, variables);//
则执行连线: