Activiti工作流框架学习五:排他网关

前面提到的流程都是一条主线执行下去的,而在实际情况下一个流程出现分支是常见的情况,如图
Activiti工作流框架学习五:排他网关_第1张图片
下面就来介绍Activiti框架解决这种分支问题的方法

排他网关(ExclusiveGateway)

Activiti工作流框架学习五:排他网关_第2张图片
如图,我们可以选中分支,然后在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 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的关系为一对多

你可能感兴趣的:(【框架】Activiti)