Activity工作流框架入门(二)API使用DEMO
工作流API使用Demo
package activity.demo.test; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.zip.ZipInputStream; import org.activiti.engine.ProcessEngine; import org.activiti.engine.ProcessEngines; import org.activiti.engine.repository.Deployment; import org.activiti.engine.repository.DeploymentBuilder; import org.activiti.engine.repository.DeploymentQuery; import org.activiti.engine.repository.ProcessDefinition; import org.activiti.engine.repository.ProcessDefinitionQuery; import org.activiti.engine.runtime.ProcessInstance; import org.activiti.engine.runtime.ProcessInstanceQuery; import org.activiti.engine.task.Task; import org.activiti.engine.task.TaskQuery; import org.apache.commons.io.FileUtils; import org.junit.Test; public class ActivitiApiTest { ProcessEngine pe = ProcessEngines.getDefaultProcessEngine(); /** * 部署流程定义 方式一:加载单个的流程定义文件 方式二:加载zip文件(建议) * * @throws Exception * */ @Test public void testDeployProcess() throws Exception { DeploymentBuilder createDeployment = pe.getRepositoryService() .createDeployment(); // 方式一:加载单个的流程定义文件 /* * createDeployment.addClasspathResource("bxlc.bpmn"); * createDeployment.addClasspathResource("bxlc.png"); Deployment * deployment = createDeployment.deploy(); * System.out.println(deployment.getId()); */ // 方式二:加载zip文件(建议)----zip文件在类路径下 /* * ZipInputStream zipInputStream = new ZipInputStream(this.getClass() * .getClassLoader().getResourceAsStream("process.zip")); */ // 方式二:加载zip文件(建议)----zip文件不在类路径下 ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream( new File("e:\\process.zip"))); createDeployment.addZipInputStream(zipInputStream); createDeployment.name("报销流程");// 指定部署的名称 Deployment deployment = createDeployment.deploy(); System.out.println(deployment.getId()); } /** * 查询部署列表 */ @Test public void testQueryDeploymentInfo() { // 部署查询对象----查询部署表act_re_deployment DeploymentQuery query = pe.getRepositoryService() .createDeploymentQuery(); query.orderByDeploymenTime().desc(); List<Deployment> list = query.list(); for (Deployment deployment : list) { String id = deployment.getId(); String name = deployment.getName(); Date deploymentTime = deployment.getDeploymentTime(); System.out.println(id + " " + name + " " + deploymentTime); } } /** * 删除部署信息 */ @Test public void testDeleteDeploymentData() { String deploymentId = "301"; // 参数一:部署id // 参数二:是否级联删除 pe.getRepositoryService().deleteDeployment(deploymentId, true); } /** * 删除流程定义 */ @Test public void testDeleteProcessDefinition() { String deploymentId = "101"; pe.getRepositoryService().deleteDeployment(deploymentId, true); } /** * 查询流程定义列表(最新版本的流程定义列表) */ @Test public void testQueryProcessDefinition() { ProcessDefinitionQuery query = pe.getRepositoryService() .createProcessDefinitionQuery(); query.latestVersion(); List<ProcessDefinition> list = query.list(); for (ProcessDefinition pd : list) { System.out.println(pd.getId() + " " + pd.getVersion()); } } /** * 查询流程定义列表(最新版本的流程定义列表) */ @Test public void testQueryProcessDefinitionList() { ProcessDefinitionQuery query = pe.getRepositoryService() .createProcessDefinitionQuery(); // 根据version升序 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); System.out.println(pd.getId() + " " + pd.getVersion()); } List<ProcessDefinition> pdList = new ArrayList<ProcessDefinition>( map.values()); System.out.println(map); } /** * 查询一次部署对应的流程定义文件名称和输入流 * * @throws Exception */ @Test public void testQueryDeloymentFileAndInputstream() throws Exception { String deploymentId = "701"; List<String> names = pe.getRepositoryService() .getDeploymentResourceNames(deploymentId); for (String name : names) { System.out.println(name); InputStream in = pe.getRepositoryService().getResourceAsStream( deploymentId, name); File destFile = new File("e:\\" + name);// 目标文件 FileUtils.copyInputStreamToFile(in, destFile); in.close(); } } /** * 查询一次部署对应的png图片的输入流 * * @throws Exception */ @Test public void testGetDeploymentPic() throws Exception { String processDefinitionId = "bxlc:1:704"; InputStream pngIn = pe.getRepositoryService().getProcessDiagram( processDefinitionId); File destFile = new File("e:\\my.png");// 目标文件 FileUtils.copyInputStreamToFile(pngIn, destFile); } /** * 启动流程实例 方式一:根据流程定义的id启动 方式二:根据流程定义的key启动(建议)----可以自动选择最新版本的流程定义 */ @Test public void testStartProcessInstance() { // 方式一:根据流程定义的id启动 // String processDefinitionId = "bxlc:1:704"; // ProcessInstance pi = // pe.getRuntimeService().startProcessInstanceById(processDefinitionId // ); // System.out.println(pi.getId()); // 方式二:根据流程定义的key启动(建议)----可以自动选择最新版本的流程定义 String processDefinitionKey = "bxlc"; ProcessInstance pi = pe.getRuntimeService().startProcessInstanceByKey( processDefinitionKey); System.out.println(pi.getId()); } /** * 查询流程实例列表 */ @Test public void testQueryProcessInstanceList() { // 流程实例查询对象,查询执行表act_ru_execution ProcessInstanceQuery query = pe.getRuntimeService() .createProcessInstanceQuery(); List<ProcessInstance> list = query.list(); for (ProcessInstance pi : list) { System.out.println(pi.getActivityId() + " " + pi.getId() + " " + pi.getProcessDefinitionId()); } } /** * 删除流程实例 */ @Test public void testDeleteProcessInstance() { String processInstanceId = "1201";// 流程实例id String deleteReason = "不请假了";// 删除原因 pe.getRuntimeService().deleteProcessInstance(processInstanceId, deleteReason); } /** * 查询任务列表 */ @Test public void testQueryTaskList(){ TaskQuery query = pe.getTaskService().createTaskQuery(); String assignee = "王五"; query.taskAssignee(assignee); query.orderByTaskCreateTime().desc(); List<Task> list = query.listPage(0, 6);//分页查询 System.out.println(list.size()); for (Task task : list) { System.out.println(task.getId()); } } /** * 办理任务 */ @Test public void testExecuteTask(){ String taskId = "1502"; pe.getTaskService().complete(taskId ); } }
Evan Leung,CSDN博客砖家,ACP认证砖家,在IT行业摸滚打爬多年,经历了金融行业和移动互联网行业,参与多个大中型企业级项目设计与核心开发,曾在某一线互联网金融公司担任产品线高级技术经理,目前在某世界500强金融公司打杂。