package cn.com.eclusiveGateWay;
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 ExclusiveGateWayTest {//获取流程引擎对象
//getDefaultProcessEngine方法内部会自动读取名为activiti.cfg.xml文件的配置信息
ProcessEngine processEngine=ProcessEngines.getDefaultProcessEngine();
/**部署流程定义*/
@Test
public void deploymentProcessDefinition_inputStream(){
//获得上传文件的输入流
InputStream inputStreamBpmn=this.getClass().getResourceAsStream("exclusiveGateWayFlow.bpmn");
InputStream inputStreamPng=this.getClass().getResourceAsStream("exclusiveGateWayFlow.png");
//获取仓库服务,从类路径下完成部署
RepositoryService repositoryService=processEngine.getRepositoryService();
DeploymentBuilder deploymentBuilder=repositoryService.createDeployment();//创建一个部署对象
deploymentBuilder.name("排他网关");//添加部署的名称
deploymentBuilder.addInputStream("exclusiveGateWayFlow.bpmn", inputStreamBpmn);
deploymentBuilder.addInputStream("exclusiveGateWayFlow.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="myProcess";//流程定义的key就是myProcess
//获取流程实例对象
ProcessInstance processInstance=runtimeService.startProcessInstanceByKey(processDefinitionkey);
System.out.println("流程实例ID:"+processInstance.getId());//流程实例ID
System.out.println("流程定义ID:"+processInstance.getProcessDefinitionId());//流程定义ID
}
/**查询当前的个人任务(实际就是查询act_ru_task表)*/
@Test
public void findMyPersonalTask(){
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(){
String taskId="2304";//上一次我们查询的任务ID
//完成任务的同时,设置流程变量,使用流程变量用来制定完成任务后,下一个连线,
//对应exclusiveGateWayFlow.bpmn文件中${message==450}
Map variables=new HashMap();
variables.put("message", 450);
TaskService taskService=processEngine.getTaskService();
taskService.complete(taskId,variables);//完成taskId对应的任务,并附带流程变量
System.out.println("完成ID为"+taskId+"的任务");
}
完成结果:
5)使用流程变量,设置连线的条件,并按照连线的条件执行工作流,如果没有符合的条件,则执行默认的连线。
转载请注明出处:http://blog.csdn.net/acmman/article/details/79618640