建立测试类,先加载流程引擎核心对象:
ProcessEngine processEngine = null;
@Before
public void init() {
processEngine = ProcessEngines.getDefaultProcessEngine();
}
一、部署流程定义
①读取单个的流程定义文件
/*
读取单个的流程定义文件
*/
@Test
public void test1() {
DeploymentBuilder deploymentBuilder = processEngine.getRepositoryService().createDeployment();
deploymentBuilder.addClasspathResource("test.bpmn");
deploymentBuilder.addClasspathResource("test.png");
Deployment deployment = deploymentBuilder.deploy();
}
读取完成后,可以在act_re_deployment和act_re_procdef中看见新增的数据:
②读取zip压缩文件
/*
读取zip压缩文件
*/
@Test
public void test2() {
DeploymentBuilder deploymentBuilder = processEngine.getRepositoryService().createDeployment();
ZipInputStream zipInputStream = new ZipInputStream(this.getClass().getClassLoader().getResourceAsStream("test02.zip"));
deploymentBuilder.addZipInputStream(zipInputStream);
deploymentBuilder.name("zip压缩文件流程文件");
Deployment deployment = deploymentBuilder.deploy();
}
二、查询部署列表
/**
* 查询部署列表
*/
@Test
public void test3() {
// 部署查询对象,查询表act_re_deployment
DeploymentQuery query = processEngine.getRepositoryService().createDeploymentQuery();
List<Deployment> list = query.list();
for (Deployment deployment : list) {
String id = deployment.getId();
String name = deployment.getName();
System.out.println(id+"---"+name);
}
}
三、查询定义列表
/**
* 查询流程定义列表
*/
@Test
public void test4() {
// 流程定义查询对象,查询表act_re_procdef
ProcessDefinitionQuery query = processEngine.getRepositoryService().createProcessDefinitionQuery();
List<ProcessDefinition> list = query.list();
for (ProcessDefinition pd : list) {
String deploymentId = pd.getDeploymentId();
System.out.println(pd.getName() + "" + pd.getId()+"部署ID:"+deploymentId);
}
}
四、删除部署信息
/**
* 删除部署信息
*/
@Test
public void test5() {
String deploymentId = "1";
// processEngine.getRepositoryService().deleteDeployment(deploymentId);
processEngine.getRepositoryService().deleteDeployment(deploymentId, true); //级联删除
}
五、删除流程定义
/**
* 删除流程定义(通过删除部署信息达到删除流程定义的目的)
*/
@Test
public void test6() {
String deploymentId = "12501";
// processEngine.getRepositoryService().deleteDeployment(deploymentId);
processEngine.getRepositoryService().deleteDeployment(deploymentId,true);
}
六、查询部署对应的文件流
/**
* 查询一次部署对应的流程定义文件名称和对应的输入流(bpmn png)
*/
@Test
public void test7() throws Exception {
String deploymentId = "15001";
List<String> names = processEngine.getRepositoryService().getDeploymentResourceNames(deploymentId);
for (String name : names) {
System.out.println(name);
InputStream in = processEngine.getRepositoryService().getResourceAsStream(deploymentId, name);
// 将文件保存到本地磁盘
File file = new File("h:\\" + name);
File f1=new File( file.getParent());
if(f1.exists()==false){
f1.mkdirs();
}
OutputStream out = new FileOutputStream(file);
byte[] b = new byte[1024];
int len = 0;
while ((len = in.read(b)) != -1) {
out.write(b, 0, len);
}
out.close();
in.close();
}
}
@Test
public void test8() throws Exception {
String deploymentId = "15001";
List<String> names = processEngine.getRepositoryService().getDeploymentResourceNames(deploymentId);
for (String name : names) {
System.out.println(name);
InputStream in = processEngine.getRepositoryService().getResourceAsStream(deploymentId, name);
// 将文件保存到本地磁盘
File file = new File("d:\\" + name);
File f1=new File( file.getParent());
if(f1.exists()==false){
f1.mkdirs();
}
FileUtils.copyInputStreamToFile(in, new File("d:\\" + name));
in.close();
}
}
七、获取png文件输入流
/**
* 获得png文件的输入流
*/
@Test
public void test9() throws Exception {
String processDefinitionId = "zip01:1:15004";
InputStream pngInputStream = processEngine.getRepositoryService().getProcessDiagram(processDefinitionId);
FileUtils.copyInputStreamToFile(pngInputStream, new File("d:\\my.png"));
}
八、启动流程定义的两种方式
①根据流程定义的id启动
@Test
public void test10(){
String processDefinitionId = "zip01:1:15004";
ProcessInstance processInstance = processEngine.getRuntimeService().startProcessInstanceById(processDefinitionId );
System.out.println(processInstance.getId());
}
②根据流程定义的key启动,自动选择最新版本的流程定义启动流程实例
@Test
public void test11(){
String processDefinitionKey = "zip01";
ProcessInstance processInstance = processEngine.getRuntimeService().startProcessInstanceByKey(processDefinitionKey);
System.out.println(processInstance.getId());
}
九、查询流程实例列表
/**
* 查询流程实例列表,查询act_ru_execution表
*/
@Test
public void test12(){
//流程实例查询对象,查询act_ru_execution表
ProcessInstanceQuery query = processEngine.getRuntimeService().createProcessInstanceQuery();
query.processDefinitionKey("zip01");
query.orderByProcessInstanceId().desc();
// query.listPage(0, 2);
List<ProcessInstance> list = query.list();
for (ProcessInstance pi : list) {
System.out.println(pi.getId() + " " + pi.getActivityId());
}
}
十、结束流程实例
/**
* 结束流程实例,操作的表act_ru_execution act_ru_task
*/
@Test
public void test13(){
String processInstanceId = "17501";
processEngine.getRuntimeService().deleteProcessInstance(processInstanceId , "我同意");
}
十一、查询任务列表
/**
* 查询任务列表
*/
@Test
public void test14() {
// 任务查询对象,查询act_ru_task表
TaskQuery query = processEngine.getTaskService().createTaskQuery();
String assignee = "A";
query.taskAssignee(assignee);
query.orderByTaskCreateTime().desc();
List<Task> list = query.list();
for (Task task : list) {
System.out.println(task.getId());
}
}
十二、办理任务
/**
* 办理任务
*/
@Test
public void test15(){
String taskId = "20004";
processEngine.getTaskService().complete(taskId);
}
十三、查询最新版本的流程定义列表
/**
* 查询最新版本的流程定义列表
*/
@Test
public void test16() {
ProcessDefinitionQuery query = processEngine.getRepositoryService().createProcessDefinitionQuery();
query.orderByProcessDefinitionVersion().asc();
List<ProcessDefinition> list = query.list();
Map<String, ProcessDefinition> map = new HashMap<String, ProcessDefinition>();
for (ProcessDefinition pd : list) {
map.put(pd.getKey(), pd);
}
ArrayList<ProcessDefinition> lastList = new ArrayList<>(map.values());
for (ProcessDefinition processDefinition : lastList) {
System.out.println(processDefinition.getName() + " " + processDefinition.getVersion());
}
}