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进行实现,而通信时服务端你只需选其一就行了.同 ...
随机推荐
- Liquibase 使用(全)
聊一个数据库脚本的版本工具 Liquibase,官网在这里 ,初次看到,挺神奇的,数据库脚本也可以有版本管理,同类型的工具还有 flyway . 开发过程经常会有表结构和变更,让运维来维护的话,通常会 ...
- 0018 CSS注释(简单)
CSS注释规则: /* 需要注释的内容 */ 进行注释的,即在需要注释的内容前使用 "/*" 标记开始注释,在内容的结尾使用 "*/"结束. 例如: p { / ...
- 一篇长文说 git 基础
版本管理在产品级开发中是非常重要的一个部分,它涉及到团队协作,且影响到产品最终的发布.上线以及测试环节,当前最流行的版本控制系统是 git.git 内容非常多,本文尽量克制地来介绍 git 的基础内容 ...
- 只用这 6 个字符,就可以写出任意 JavaScript 代码!
你可能在网上见过有人用 几个不同的字符写的各种稀奇古怪的 JavaScript 代码,虽然看起来奇怪,但是能正常运行!比如这个: (!(~+[])+{})[--[~+""][+[] ...
- AdapterPattern(适配器模式)-----Java/.Net
适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁.这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能. 这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接 ...
- 【汇编】2.第一个程序:hello world
前言 在上篇博文 [汇编]1.汇编环境的搭建:DOSBox的安装 中,我们完成了 1.汇编环境模拟器DOSBox的安装. 2.汇编编译相关程序MASM6的下载. 在上篇文章的最后我们提到了挂载DOS程 ...
- 1055 集体照 (25 分)C语言
拍集体照时队形很重要,这里对给定的 N 个人 K 排的队形设计排队规则如下: 每排人数为 N/K(向下取整),多出来的人全部站在最后一排: 后排所有人的个子都不比前排任何人矮: 每排中最高者站中间(中 ...
- 分享在开发多终端使用比较多的Adb命令
分享在开发多终端或者涉及PC-Android的传输使用比较多的Adb命令 查看连接的设备 adb devices 列出设备安装的软件包 adb shell pm list packages 使用这个方 ...
- spring boot集成spring-boot-starter-mail邮件功能
前情提要 以目前IT系统功能来看,邮件功能是非常重要的一个功能.例如:找回密码.邮箱验证,邮件动态码.忘记密码,邮件营销等,都需要用到邮件功能.结合当下最流行的spring boot微服务,推出了sp ...
- bash shell-linux的预设shell
1.bash 是GNU 计划中重要的工具软件之一,目前也是Linux distributions 的标准shell.其主要功能如下: (1)命令记忆和历史功能,可以通过history查询,存储位置在~ ...