Num55 boss09(activiti安装以及API)

本文详细介绍Activiti工作流引擎的使用方法,包括流程定义的部署、查询与删除,流程实例的启动、查询与删除,以及个人任务的查询与办理等核心功能。文章通过具体示例演示了如何通过API进行流程管理。

安装流程设计器插件:

使用框架提供的方式创建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:操作任务的

框架提供的网页版流程设计器使用:

 

转载于:https://my.oschina.net/u/2356966/blog/688463

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值