然后我们新建一个测试类“ParallelGateWayTest”对流程进行测试:
首先编写部署流程的测试方法:
package cn.com.parallelGateWay;
import java.io.InputStream;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.repository.DeploymentBuilder;
import org.junit.Test;
public class ParallelGateWayTest {
//getDefaultProcessEngine方法内部会自动读取名为activiti.cfg.xml文件的配置信息
ProcessEngine processEngine=ProcessEngines.getDefaultProcessEngine();
/**部署流程定义*/
@Test
public void deploymentProcessDefinition_inputStream(){
//获得上传文件的输入流
InputStream inputStreamBpmn=this.getClass().getResourceAsStream("parallelGateWay.bpmn");
InputStream inputStreamPng=this.getClass().getResourceAsStream("parallelGateWay.png");
//获取仓库服务,从类路径下完成部署
RepositoryService repositoryService=processEngine.getRepositoryService();
DeploymentBuilder deploymentBuilder=repositoryService.createDeployment();//创建一个部署对象
deploymentBuilder.name("并行网关");//添加部署的名称
deploymentBuilder.addInputStream("parallelGateWay.bpmn", inputStreamBpmn);
deploymentBuilder.addInputStream("parallelGateWay.png", inputStreamPng);
Deployment deployment=deploymentBuilder.deploy();//完成部署
//打印我们的流程信息
System.out.println("部署Id:"+deployment.getId());
System.out.println("部署名称Name:"+deployment.getName());
}
}
部署之后结果:
/**启动流程引擎*/
@Test
public void startProcessInstance(){
//获取流程启动Service
RuntimeService runtimeService=processEngine.getRuntimeService();
//使用流程定义的key,key对应bpmn文件对应的id,
//(也是act_re_procdef表中对应的KEY_字段),默认是按照最新版本启动
String processDefinitionkey="parallelGateWayProcess";//流程定义的key就是parallelGateWayProcess
//获取流程实例对象
ProcessInstance processInstance=runtimeService.startProcessInstanceByKey(processDefinitionkey);
System.out.println("流程实例ID:"+processInstance.getId());//流程实例ID
System.out.println("流程定义ID:"+processInstance.getProcessDefinitionId());//流程定义ID
}
执行流程的启动:
@Test
public void findMyPersonalTask(){
findTask("买家");
findTask("卖家");
}
/**查询当前的个人任务(实际就是查询act_ru_task表)*/
public void findTask(String assignee){
//获取事务Service
TaskService taskService=processEngine.getTaskService();
List taskList=taskService.createTaskQuery()//创建任务查询对象
.taskAssignee(assignee)//指定个人任务查询,指定办理人
.list();//获取该办理人下的事务列表
if(taskList!=null&&taskList.size()>0){
for(Task task:taskList){
System.out.println("任务ID:"+task.getId());
System.out.println("任务名称:"+task.getName());
System.out.println("任务的创建时间:"+task.getCreateTime());
System.out.println("任务办理人:"+task.getAssignee());
System.out.println("流程实例ID:"+task.getProcessInstanceId());
System.out.println("执行对象ID:"+task.getExecutionId());
System.out.println("流程定义ID:"+task.getProcessDefinitionId());
System.out.println("#############################################");
}
}
}
查询结果:
@Test
public void completeMyPersonalTask(){
completeTask("3407");//执行买家的任务
}
/**完成我的任务 taskId为执行任务的ID*/
public void completeTask(String taskId){
TaskService taskService=processEngine.getTaskService();
taskService.complete(taskId);//完成taskId对应的任务
System.out.println("完成ID为"+taskId+"的任务");
}
@Test
public void completeMyPersonalTask(){
completeTask("3410");//执行卖家的任务
}
/**完成我的任务 taskId为执行任务的ID*/
public void completeTask(String taskId){
TaskService taskService=processEngine.getTaskService();
taskService.complete(taskId);//完成taskId对应的任务
System.out.println("完成ID为"+taskId+"的任务");
}
@Test
public void findMyPersonalTask(){
findTask("买家");
findTask("卖家");
}
@Test
public void completeMyPersonalTask(){
completeTask("3602");//执行买家收货的任务
completeTask("3502");//执行卖家收款的任务
}
(5)并行网关不会解析条件,即使顺序流中定义了条件,也会被忽略。
转载请注明出处:https://blog.csdn.net/acmman/article/details/79681730