工作流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的更多相关文章

  1. 【原创】NIO框架入门(二):服务端基于MINA2的UDP双向通信Demo演示

    前言 NIO框架的流行,使得开发大并发.高性能的互联网服务端成为可能.这其中最流行的无非就是MINA和Netty了,MINA目前的主要版本是MINA2.而Netty的主要版本是Netty3和Netty ...

  2. Activity工作流(2)-入门安装运行第一个例子

    转: Activity工作流(2)-入门安装运行第一个例子 置顶 2017年05月24日 15:58:50 li_ch_ch 阅读数:24432   版权声明:本文为博主原创文章,未经博主允许不得转载 ...

  3. .Net Core3.0 WebApi 项目框架搭建 二:API 文档神器 Swagger

    .Net Core3.0 WebApi 项目框架搭建:目录 为什么使用Swagger 随着互联网技术的发展,现在的网站架构基本都由原来的后端渲染,变成了:前端渲染.后端分离的形态,而且前端技术和后端技 ...

  4. Hibernate框架学习(二)——api详解

    一.Configuration对象 功能:配置加载类,用于加载主配置,orm元数据加载. //1.创建,调用空参构造(还没有读配置文件) Configuration conf=new Configur ...

  5. Activity工作流学习(二)--Activity数据库

    23张表 ACT_RE_资源库流程规划表 act_re_deployment 部署信息表 act_re_model 流程设计模型部署表 act_re_procdef 流程定义数据表 ACT_RU_运行 ...

  6. 使用Spring框架入门二:基于注解+XML配置的IOC/DI的使用

    一.简述 本文主要讲使用注解+xml配合使用的几种使用方式.基础课程请看前一节. 二.步骤 1.为Pom.xml中引入依赖:本例中使用的是spring-context包,引入此包时系统会自动导入它的依 ...

  7. 【原创】NIO框架入门(一):服务端基于Netty4的UDP双向通信Demo演示

    申明:本文由作者基于日常实践整理,希望对初次接触MINA.Netty的人有所启发.如需与作者交流,见文签名,互相学习. 学习交流 更多学习资料:点此进入 推荐 移动端即时通讯交流: 215891622 ...

  8. 【原创】NIO框架入门(四):Android与MINA2、Netty4的跨平台UDP双向通信实战

    概述 本文演示的是一个Android客户端程序,通过UDP协议与两个典型的NIO框架服务端,实现跨平台双向通信的完整Demo. 当前由于NIO框架的流行,使得开发大并发.高性能的互联网服务端成为可能. ...

  9. 【原创】NIO框架入门(三):iOS与MINA2、Netty4的跨平台UDP双向通信实战

    前言 本文将演示一个iOS客户端程序,通过UDP协议与两个典型的NIO框架服务端,实现跨平台双向通信的完整Demo.服务端将分别用MINA2和Netty4进行实现,而通信时服务端你只需选其一就行了.同 ...

随机推荐

  1. CodeForces 1182D

    图论的思维题,太秀了,网上答案也不多,我就也来bb吧 总之47个样例姑且是过了,不知道还有没有反例: 会求树的重心和中心了,挺好 #include<cstdio> #include< ...

  2. Word List 1 part 1

    inter- 在....之间 intermediate adj. 中间的 pro- 向前,在前;很多;赞同;亲... proportion n. 比例;部分 prim- 第一,主要的 prime ad ...

  3. Java工作流系统-父子流程的配置讲解

    父子流程 关键字: 驰骋工作流程快速开发平台 工作流程管理系统 工作流引擎 asp.net工作流引擎 java工作流引擎. 开发者表单  拖拽式表单 工作流系统 适配数据库: oralce,mysql ...

  4. Vuex入门实践(上)

    一.前言 vuex被称为是专为vue应用程序开发的的状态管理模式.它的作用使用一句话描述就是:让组件之间可以共享数据 话不多少,先抛开概念,我们写一个简单的示例感受一波. 二.项目开发环境 项目开发环 ...

  5. 类加载器在Tomcat中的应用

    之前有文章已经介绍过了JVM中的类加载机制,JVM中通过类加载加载class文件,通过双亲委派模型完成分层加载.实际上类加载机制并不仅仅是在JVM中得以运用,通过影响字节码生成和类加载器目前已经有了许 ...

  6. spring boot使用拦截器

    1.编写一个拦截器 首先,我们先编写一个拦截器,和spring mvc方式一样.实现HandlerInterceptor类,代码如下 package com.example.demo.intercep ...

  7. 关于yarn安装,这里做一个备份

    安装的是window版本,官网上有三种安装方式. 第一种下载一个.msi的安装包,然后当它运行时会指引你将 Yarn 安装到 Windows 上,因为点开以后页面是404,所以没有用这种方法. 第二种 ...

  8. 牛客暑期ACM多校 第七场

    链接:https://www.nowcoder.com/acm/contest/145/C来源:牛客网 C .题目描述 A binary string s of length N = 2n is gi ...

  9. CountDownLatch,CyclicBarrier,Semaphore用法

    1.让一些线程阻塞直到另一些线程完成一系列操作后才被唤醒. 2.CountDownLatch主要有两个方法,当一个或多个线程调用await方法时,调用线程会被阻塞.其它线程调用countDown方法会 ...

  10. Python工具类(二)—— 操作时间相关

    #!/usr/bin/env python # -*- coding: utf-8 -*- """ __title__ = '操作时间的工具类' "" ...