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进行实现,而通信时服务端你只需选其一就行了.同 ...
随机推荐
- 利用python第三方库提取PDF文件的表格内容
小爬最近接到一个棘手任务:需要提取手机话费电子发票PDF文件中的数据.接到这个任务的第一时间,小爬决定搜集各个地区各个时间段的电子发票文件,看看其中的差异点.粗略统计下来,PDF文件的表格框架是统一的 ...
- Iterator接口介绍(迭代器)
第一步 第二步 第二步用while 第二步用for循环(了解) 备注:
- vc调用mysql数据库操作例子
这里归纳了C API可使用的函数 函数 描述 mysql_affected_rows() 返回上次UPDATE.DELETE或INSERT查询更改/删除/插入的行数. mysql_autocommit ...
- 【题解】CTSC1999家园(网络流)
CTSC1999家园 建模方法类似我NOI2019网络同步赛我的T1写法[[题解]NOI2019Route](70分) 问题的焦点是:空间时间载具. 考虑如何击破时间限制,可以对每个点关于每个时刻建立 ...
- 洛谷$P3749$ [六省联考2017] 寿司餐厅 网络流
正解:网络流 解题报告: 传送门$QwQ$ 这道题好烦昂,,,就给了好多变量,,,但仔细读一遍题还是能$get$的所以我就不再提取一遍题目大意辣$QwQ$? 显然考虑建两排点,一排收益一排支出然后最小 ...
- Redis内存碎片清理
当Redis中清理了大量的Key之后原先Redis申请的内存(used_memory_rss)将继续持有而不会释放,此时查看内存信息将会看到存在大量的内存碎片.那么,Redis的内存碎片可以清理么,该 ...
- Netty快速入门(05)Java NIO 介绍-Selector
Java NIO Selector Selector是Java NIO中的一个组件,用于检查一个或多个NIO Channel的状态是否处于可读.可写.如此可以实现单线程管理多个channels,也就是 ...
- cesium加载WFS服务(GeoServer发布)
需求: 为了便于前端渲染数据,自定义图层渲染. 思路: 获取地图服务中的要素进行渲染. 工具: GeoServer 2.6.4,cesium, 思路有了就开始找资料写代码,cesium有接口可以加载W ...
- 2020 年了,Java 日志框架到底哪个性能好?——技术选型篇
大家好,之前写(shui)了两篇其他类型的文章,感觉大家反响不是很好,于是我乖乖的回来更新硬核技术文了. 经过本系列前两篇文章我们了解到日志框架大战随着 SLF4j 的一统天下而落下帷幕,但 SLF4 ...
- springboot2 整合mongodb
在springboot2中使用MongoDB 1.引入依赖 <dependency> <groupId>org.springframework.boot</groupId ...