安装流程设计器插件:
使用框架提供的方式创建23张表:
流程部署,定义,启动&查询,办理任务:
流程的部署,查询,删除 & 获取流程定义文件 & 流程实例的启动,查询,删除 & 查询,办理个人任务:
package cn.itcast.activiti;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;
import java.util.zip.ZipInputStream;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.repository.DeploymentBuilder;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.repository.ProcessDefinitionQuery;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.activiti.engine.task.TaskQuery;
import org.apache.commons.io.FileUtils;
import org.junit.Test;
/**
* 测试API
* @author zhaoqx
*
*/
public class ActivitiAPITest {
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//部署流程定义两种方式
@Test
public void test1() throws Exception{
DeploymentBuilder deploymentBuilder = processEngine.getRepositoryService().createDeployment();
//方式一:加载单个的流程定义文件
//deploymentBuilder.addClasspathResource("qjlc.bpmn");
//deploymentBuilder.addClasspathResource("qjlc.png");
//deploymentBuilder.deploy();
//方式二:加载zip压缩文件
ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(new File("d:\\Desktop.zip")));
deploymentBuilder.addZipInputStream(zipInputStream);
deploymentBuilder.deploy();
}
//查询最新版本的流程定义
@Test
public void test2() throws Exception{
//processEngine.getXXXService().createXXXQuery();
//processEngine.getRepositoryService().createDeploymentQuery().list();
//processEngine.getRuntimeService().createProcessInstanceQuery().list();
//processEngine.getTaskService().createTaskQuery().list();
//processEngine.getHistoryService().createHistoricActivityInstanceQuery().list();
ProcessDefinitionQuery query = processEngine.getRepositoryService().createProcessDefinitionQuery();
//添加过滤条件
//query.processDefinitionNameLike("请假%");
//添加过滤条件,查询最新的
//query.latestVersion();
//添加排序条件
query.orderByProcessDefinitionId().asc();
List<ProcessDefinition> list = query.listPage(0, 10);
for (ProcessDefinition processDefinition : list) {
System.out.println(processDefinition);
}
}
//删除流程定义
@Test
public void test3(){
String deploymentId = "101";//部署id
processEngine.getRepositoryService().deleteDeployment(deploymentId);
}
//查询流程定义文件(bpmn、png)名称和对应的输入流
@Test
public void test4() throws Exception{
String deploymentId = "901";//部署id
List<String> list = processEngine.getRepositoryService().getDeploymentResourceNames(deploymentId);
for (String name : list) {
InputStream in = processEngine.getRepositoryService().getResourceAsStream(deploymentId, name);
System.out.println(name);
//通过一个输出流写
OutputStream out = new FileOutputStream(new File("d:\\"+name));
/*byte[] b = new byte[1024];//1KB
in.read(b);
out.write(b);
out.close();*/
FileUtils.copyInputStreamToFile(in, new File("d:\\"+name));
in.close();
}
}
//启动流程实例两种方式
@Test
public void test5(){
//方式一:根据流程定义的id启动流程实例
//String processDefinitionId;//流程定义id
//processEngine.getRuntimeService().startProcessInstanceById(processDefinitionId);
//方式二:根据流程定义key启动流程实例(建议使用)----自动选择最新版本的流程定义
String processDefinitionKey = "qjlc";//流程定义key
ProcessInstance processInstance = processEngine.getRuntimeService().startProcessInstanceByKey(processDefinitionKey);
System.out.println(processInstance.getId());
}
//查询流程实例
@Test
public void test6(){
List<ProcessInstance> list = processEngine.getRuntimeService().createProcessInstanceQuery().list();
for (ProcessInstance processInstance : list) {
System.out.println(processInstance);
}
}
//删除流程实例
@Test
public void test7(){
String processInstanceId = "1301";//流程实例id
String deleteReason = "不请假了";//删除原因
processEngine.getRuntimeService().deleteProcessInstance(processInstanceId, deleteReason);
}
//查询个人任务
@Test
public void test8(){
//任务查询对象,可以查询act_ru_task
TaskQuery query = processEngine.getTaskService().createTaskQuery();
query.taskAssignee("张三");
//添加排序条件
query.orderByTaskCreateTime().desc();
//分页查询
List<Task> list = query.listPage(0, 5);
for (Task task : list) {
System.out.println(task);
}
}
//办理个人任务
@Test
public void test9(){
String taskId = "1504";//任务id
processEngine.getTaskService().complete(taskId);
}
}
总结API
l 几个接口(和表有对应关系)
1、Deployment对应部署表act_re_deployment
2、ProcessDefinition对应流程定义表act_re_procdef
3、ProcessInstance对应流程实例表act_ru_execution
4、Task对应任务表act_ru_task
l 几个Query对象(查询对应的数据表)
1、DeploymentQuery对应部署表act_re_deployment
2、ProcessDefinitionQuery对应流程定义表act_re_procdef
3、ProcessInstanceQuery对应流程实例表act_ru_execution
4、TaskQuery对应任务表act_ru_task
l 几个Service对象
1、RepositoryService:操作流程定义相关信息的、部署流程定义、删除流程定义、查询流程定义、查询流程定义文件名称和输入流
2、RuntimeService:操作流程实例的
3、TaskService:操作任务的
框架提供的网页版流程设计器使用: