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 );
} }
Activity工作流框架入门(二)API使用DEMO的更多相关文章
- 【原创】NIO框架入门(二):服务端基于MINA2的UDP双向通信Demo演示
前言 NIO框架的流行,使得开发大并发.高性能的互联网服务端成为可能.这其中最流行的无非就是MINA和Netty了,MINA目前的主要版本是MINA2.而Netty的主要版本是Netty3和Netty ...
- Activity工作流(2)-入门安装运行第一个例子
转: Activity工作流(2)-入门安装运行第一个例子 置顶 2017年05月24日 15:58:50 li_ch_ch 阅读数:24432 版权声明:本文为博主原创文章,未经博主允许不得转载 ...
- .Net Core3.0 WebApi 项目框架搭建 二:API 文档神器 Swagger
.Net Core3.0 WebApi 项目框架搭建:目录 为什么使用Swagger 随着互联网技术的发展,现在的网站架构基本都由原来的后端渲染,变成了:前端渲染.后端分离的形态,而且前端技术和后端技 ...
- Hibernate框架学习(二)——api详解
一.Configuration对象 功能:配置加载类,用于加载主配置,orm元数据加载. //1.创建,调用空参构造(还没有读配置文件) Configuration conf=new Configur ...
- Activity工作流学习(二)--Activity数据库
23张表 ACT_RE_资源库流程规划表 act_re_deployment 部署信息表 act_re_model 流程设计模型部署表 act_re_procdef 流程定义数据表 ACT_RU_运行 ...
- 使用Spring框架入门二:基于注解+XML配置的IOC/DI的使用
一.简述 本文主要讲使用注解+xml配合使用的几种使用方式.基础课程请看前一节. 二.步骤 1.为Pom.xml中引入依赖:本例中使用的是spring-context包,引入此包时系统会自动导入它的依 ...
- 【原创】NIO框架入门(一):服务端基于Netty4的UDP双向通信Demo演示
申明:本文由作者基于日常实践整理,希望对初次接触MINA.Netty的人有所启发.如需与作者交流,见文签名,互相学习. 学习交流 更多学习资料:点此进入 推荐 移动端即时通讯交流: 215891622 ...
- 【原创】NIO框架入门(四):Android与MINA2、Netty4的跨平台UDP双向通信实战
概述 本文演示的是一个Android客户端程序,通过UDP协议与两个典型的NIO框架服务端,实现跨平台双向通信的完整Demo. 当前由于NIO框架的流行,使得开发大并发.高性能的互联网服务端成为可能. ...
- 【原创】NIO框架入门(三):iOS与MINA2、Netty4的跨平台UDP双向通信实战
前言 本文将演示一个iOS客户端程序,通过UDP协议与两个典型的NIO框架服务端,实现跨平台双向通信的完整Demo.服务端将分别用MINA2和Netty4进行实现,而通信时服务端你只需选其一就行了.同 ...
随机推荐
- 洛谷$P1527$ [国家集训队]矩阵乘法 整体二分
正解:整体二分 解题报告: 传送门$QwQ$ 阿看到这种查询若干次第$k$小显然就想到整体二分$QwQ$? 然后现在就只要考虑怎么快速求出一个矩形内所有小于某个数的数的个数? 开始我的想法是离散化然后 ...
- $[TJOI2017]$ 可乐 矩阵优化$dp$
\(Sol\) 设\(f_i\)为到第\(i\)秒的方案数,显然\(f_i=\)在第\(i\)秒前爆炸的方案数+在第\(i\)秒爆炸的方案数+在第\(i\)秒停下的方案数+在第\(i\)秒走向下一个城 ...
- 菜鸟系列Fabric源码学习 — MVCC验证
Fabric 1.4 源码分析 MVCC验证 读本节文档之前建议先查看[Fabric 1.4 源码分析 committer记账节点]章节. 1. MVCC简介 Multi-Version Concur ...
- (httpd、php)2
(一)再说编译安装httpd2.4 新特性: 1:MPM(多处理模块)支持运行为DSO(动态共享,动态加载模式)机制,以模块形式按需加载,支持动态加载 2:event MPM生产环境可用 3:支持异步 ...
- java 实现敏感词(sensitive word)工具详解使用说明
sensitive-word 平时工作中,只要涉及到用户可以自由发言(博客.文档.论坛),就要考虑内容的敏感性处理. sensitive-word 基于 DFA 算法实现的高性能敏感词工具.工具使用 ...
- BeanUtils 如何拷贝 List?
BeanUtils 如何拷贝 List? 一.背景 我们在DO.Model.VO层数据间可能经常转换数据: Entity对应的是持久层数据结构(一般是数据库表的映射模型); Model 对应的是业务层 ...
- 【一起学源码-微服务】Eureka+Ribbon+Feign阶段性总结
前言 想说的话 这里已经梳理完Eureka.Ribbon.Feign三大组件的基本原理了,今天做一个总结,里面会有一个比较详细的调用关系流程图. 说明 原创不易,如若转载 请标明来源! 博客地址:一枝 ...
- linux下文件解压缩中文乱码问题的解决
将带中文文件名的压缩文件上传到服务器,使用unzip解压后,文件名乱码: 临时解决方法: 通过unzip行命令解压,指定字符集unzip -O CP936 xxx.zip (用GBK, GB18030 ...
- MongoDB DBA 实践8-----Linux系统Mongodb分片集群部署
在Linux系统中,主要是使用命令行进行mongodb的分片集群部署 一.先决条件 mongodb安装成功,明确路径, MongoDB的几个路径: /var/lib/mongodb /var/log/ ...
- Milking Cows 挤牛奶 USACO 排序 模拟
1005: 1.2.1 Milking Cows 挤牛奶 时间限制: 1 Sec 内存限制: 128 MB提交: 15 解决: 9[提交] [状态] [讨论版] [命题人:外部导入] 题目描述 1 ...