前面提到的流程都是一条主线执行下去的,而在实际情况下一个流程出现分支是常见的情况,如图
下面就来介绍Activiti框架解决这种分支问题的方法
排他网关(ExclusiveGateway)
如图,我们可以选中分支,然后在Condition中写入该分支条件,表达式需要按照一定规范
示例代码
/**
* 部署流程定义
*/
@Test
public void test1() {
DeploymentBuilder deploymentBuilder = processEngine.getRepositoryService().createDeployment();
deploymentBuilder.addClasspathResource("com/zyj/activiti/gateway/qjlc.bpmn");
deploymentBuilder.addClasspathResource("com/zyj/activiti/gateway/qjlc.png");
deploymentBuilder.deploy();
}
/**
* 启动流程实例时设置流程变量
*/
@Test
public void test2() {
String processDefinitionKey = "qjlc";// 流程定义key
ProcessInstance pi = processEngine.getRuntimeService().startProcessInstanceByKey(processDefinitionKey);
System.out.println(pi.getId());
}
/**
* 办理任务时设置流程变量
*/
@Test
public void test3() {
String taskId = "2405";//任务id
Map<String, Object> variables = new HashMap<>();
//设计流程时设置的第一个分支条件是qjts<3,第二个分支条件是qjts>=3
variables.put("qjts", 1);//执行这行则会往分支1走
//variables.put("qjts", 7);//执行这行则会往分支2走
processEngine.getTaskService().complete(taskId, variables);
}
注意:在设置分支条件时,如果总条件不为1,即第一个分支条件为qjts<3,第二个分支条件为qjts>3,则当设置的qjts为3时,分支条件都不匹配,框架会自动选择第一个分支(id)执行
概念辨析
流程实例 act_hi_procinst 与执行对象 act_ru_execution
1.如果是单例流程,则流程实例ID与执行对象ID一致
2.如果是分支流程,则流程实例ID与执行对象ID的关系为一对多