- 部署流程定义
- 启动流程实例
- 查询流程定义
- 查询最新版本的流程定义
- 查询流程实例状态
- 导出流程图到文件夹下
- 删除流程定义
- 删除key相同的所有不同版本的流程定义
- 设置流程变量
- 获取流程变量
- 查询历史任务
- 查询历史流程实例
- 查询历史流程变量
- 查询历史活动
部署流程定义
- classpath方式
Deployment deployment = processEngine.getRepositoryService()// 与流程定义和部署对象相关的Service
.createDeployment()// 创建一个部署对象
.name("开工")// 添加部署的名称
.addClasspathResource("diagrams/Process_1.bpmn")// 从classpath的资源中加载,一次只能加载一个文件
.addClasspathResource("diagrams/Process_1.png")// 从classpath的资源中加载,一次只能加载一个文件
.deploy();// 完成部署
System.out.println("部署ID:" + deployment.getId());
System.out.println("部署名称:" + deployment.getName());
- zip方式
InputStream in = this.getClass().getClassLoader().getResourceAsStream("diagrams/helloword.zip");
ZipInputStream zipInputStream = new ZipInputStream(in);
Deployment deployment = processEngine.getRepositoryService()// 与流程定义和部署对象相关的Service
.createDeployment()// 创建一个部署对象
.name("流程定义")// 添加部署的名称
.addZipInputStream(zipInputStream)// 指定zip格式的文件完成部署
.deploy();// 完成部署
System.out.println("部署ID:" + deployment.getId());
System.out.println("部署名称:" + deployment.getName());
使用key启动流程实例
String processDefinitionKey = "process_1";// 流程定义的key,对应helloworld.bpmn文件中id的属性值
// 使用key值启动,默认是按照最新版本的流程定义启动
ProcessInstance pi = processEngine.getRuntimeService()// 与正在执行的流程实例和执行对象相关的Service
.startProcessInstanceByKey(processDefinitionKey);// 使用流程定义的key启动流程实例
System.out.println("流程实例ID:" + pi.getId());//
System.out.println("流程定义ID:" + pi.getProcessDefinitionId());//
查询流程定义
- 通过流程定义ID、部署对象ID、流程定义的key以及流程定义的名称查询
- 按照流程定义的key、版本、名称、ID、分类以及后缀ID升序或者降序排序
- 返回的结果集是:一个集合列表、唯一的结果集、结果集的数量、分页查询
List list = processEngine.getRepositoryService()// 与流程定义和部署对象相关的Service
.createProcessDefinitionQuery()// 创建一个流程定义的查询
/** 指定查询条件,where条件 */
.processDefinitionId("流程定义ID")// 使用流程定义ID查询
// .deploymentId(deploymentId)//使用部署对象ID查询
// .processDefinitionKey(processDefinitionKey)//使用流程定义的key查询
// .processDefinitionNameLike(processDefinitionNameLike)//使用流程定义的名称模糊查询
/** 排序 */
.orderByProcessDefinitionKey()// 按照流程定义的key
// .orderByProcessDefinitionVersion()// 按照流程定义的版本
// .orderByProcessDefinitionName()//按照流程定义的名称
// .orderByProcessDefinitionId()//按照流程定义的ID排列
// .orderByProcessDefinitionCategory()//按照流程定义的分类
// .orderByDeploymentId()//按照流程定义的后缀ID
.asc()// 升序排序
// .desc()//降序排序
/** 返回的结果集 */
.list();// 返回一个集合列表,封装流程定义
// .singleResult();//返回惟一结果集
// .count();//返回结果集数量
// .listPage(firstResult, maxResults);//分页查询
if (list != null && list.size() > 0) {
for (ProcessDefinition pd : list) {
System.out.println("流程定义ID:" + pd.getId());// 流程定义的key+版本+随机生成数
System.out.println("流程定义的名称:" + pd.getName());// 对应helloworld.bpmn文件中的name属性值
System.out.println("流程定义的key:" + pd.getKey());// 对应helloworld.bpmn文件中的id属性值
System.out.println("流程定义的版本:" + pd.getVersion());// 当流程定义的key值相同的相同下,版本升级,默认1
System.out.println("资源名称bpmn文件:" + pd.getResourceName());
System.out.println("资源名称png文件:" + pd.getDiagramResourceName());
System.out.println("部署对象ID:" + pd.getDeploymentId());
}
}
查询最新版本的流程定义
List list = processEngine.getRepositoryService()//
.createProcessDefinitionQuery()//
.orderByProcessDefinitionVersion().asc()// 使用流程定义的版本升序排列
.list();
/**
* Map map集合的key:流程定义的key map集合的value:流程定义的对象
* map集合的特点:当map集合key值相同的情况下,后一次的值将替换前一次的值
*/
Map map = new LinkedHashMap();
if (list != null && list.size() > 0) {
for (ProcessDefinition pd : list) {
map.put(pd.getKey(), pd);
}
}
List pdList = new ArrayList(map.values());
if (pdList != null && pdList.size() > 0) {
for (ProcessDefinition pd : pdList) {
System.out.println("流程定义ID:" + pd.getId());// 流程定义的key+版本+随机生成数
System.out.println("流程定义的名称:" + pd.getName());// 对应helloworld.bpmn文件中的name属性值
System.out.println("流程定义的key:" + pd.getKey());// 对应helloworld.bpmn文件中的id属性值
System.out.println("流程定义的版本:" + pd.getVersion());// 当流程定义的key值相同的相同下,版本升级,默认1
System.out.println("资源名称bpmn文件:" + pd.getResourceName());
System.out.println("资源名称png文件:" + pd.getDiagramResourceName());
System.out.println("部署对象ID:" + pd.getDeploymentId());
System.out.println("#########################################################");
}
}
查询流程实例状态
- 已经结束
- 没有结束
ProcessInstance processInstance = processEngine.getRuntimeService()// 表示正在执行的流程实例和执行对象
.createProcessInstanceQuery()// 创建流程实例查询
.processInstanceId("流程实例ID")// 使用流程实例ID查询
.singleResult();
if (processInstance == null) {
System.out.println("流程已经结束");
} else {
System.out.println("流程没有结束");
}
导出流程图到文件夹下
/** 将生成图片放到文件夹下 */
String deploymentId = "流程部署ID";// 流程部署ID
// 获取图片资源名称
List list = processEngine.getRepositoryService()//
.getDeploymentResourceNames(deploymentId);// 流程部署ID
// 定义图片资源的名称
String resourceName = "图片资源的名称";
if (list != null && list.size() > 0) {
for (String name : list) {
if (name.indexOf(".png") >= 0) {
resourceName = name;
}
}
}
// 获取图片的输入流
InputStream in = processEngine.getRepositoryService()//
.getResourceAsStream(deploymentId, resourceName);
// 将图片生成到D盘的目录下
File file = new File("C:/Users/Administrator/Desktop/新建文件夹diagrams/" + resourceName);
// 将输入流的图片写到D盘下
FileUtils.copyInputStreamToFile(in, file);
删除流程定义
// 使用部署ID,完成删除
String deploymentId = "1";
/*
* 不带级联的删除 只能删除没有启动的流程,如果流程启动,就会抛出异常
*/
// processEngine.getRepositoryService()//
// .deleteDeployment(deploymentId);
/**
* 级联删除 不管流程是否启动,都能可以删除
*/
processEngine.getRepositoryService()//
.deleteDeployment(deploymentId, true);
System.out.println("删除成功!");
删除key相同的所有不同版本的流程定义
// 流程定义的key
String processDefinitionKey = "process_1";
// 先使用流程定义的key查询流程定义,查询出所有的版本
List list = processEngine.getRepositoryService()//
.createProcessDefinitionQuery()//
.processDefinitionKey(processDefinitionKey)// 使用流程定义的key查询
.list();
// 遍历,获取每个流程定义的部署ID
if (list != null && list.size() > 0) {
for (ProcessDefinition pd : list) {
// 获取部署ID
String deploymentId = pd.getDeploymentId();
processEngine.getRepositoryService()//
.deleteDeployment(deploymentId, true);
}
}
设置流程变量
- 使用基本数据类型
// 任务服务
TaskService taskService = processEngine.getTaskService();
// 任务ID
String taskId = "任务ID";
/** 一:设置流程变量,使用基本数据类型 */
taskService.setVariableLocal(taskId, "请假天数", 5);// 与任务ID绑定
taskService.setVariable(taskId, "请假日期", new Date());
taskService.setVariable(taskId, "请假原因", "回家探亲,一起吃个饭");
- 使用Javabean类型
当一个javabean(实现序列号)放置到流程变量中,要求javabean的属性不能再发生变化 * 如果发生变化,再获取的时候,抛出异常,解决方案:在Person对象中添加: private static final long erialVersionUID = 6757393795687480331L; 同时实现Serializable
import java.io.Serializable;
/*
* 序列化
*/
public class Person implements Serializable {
/*
* 固定化
*/
private static final long serialVersionUID = -5526993420322301104L;
private int id;// 编号
private String name;// 名称
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
// 任务服务
TaskService taskService = processEngine.getTaskService();
// 任务ID
String taskId = "任务ID";
Person p = new Person();
p.setId(20);
p.setName("翠花");
taskService.setVariable(taskId, "人员信息(添加固定版本)", p);
获取流程变量
- 基本数据类型
/** 任务服务 */
TaskService taskService = processEngine.getTaskService();
// 任务ID
String taskId = "任务ID";
/** 一:获取流程变量,使用基本数据类型 */
Integer days = (Integer) taskService.getVariable(taskId, "请假天数");
Date date = (Date) taskService.getVariable(taskId, "请假日期");
String resean = (String) taskService.getVariable(taskId, "请假原因");
System.out.println("请假天数:" + days);
System.out.println("请假日期:" + date);
System.out.println("请假原因:" + resean);
- Javabean类型
/** 任务服务 */
TaskService taskService = processEngine.getTaskService();
// 任务ID
String taskId = "2904";
/** 二:获取流程变量,使用javabean类型 */
Person p = (Person) taskService.getVariable(taskId, "人员信息(添加固定版本)");
System.out.println("id:" + p.getId());
System.out.println("name:" + p.getName());
查询历史任务
String processInstanceId = "流程实例ID";// 流程实例ID
List list = processEngine.getHistoryService()// 与历史数据(历史表)相关的Service
.createHistoricTaskInstanceQuery()// 创建历史任务实例查询
.processInstanceId(processInstanceId)//
.orderByHistoricTaskInstanceStartTime().asc().list();
if (list != null && list.size() > 0) {
for (HistoricTaskInstance hti : list) {
System.out.println(hti.getId() + " " + hti.getName() + " " + hti.getProcessInstanceId() + " "
+ hti.getStartTime() + " " + hti.getEndTime() + " " + hti.getDurationInMillis());
}
}
查询历史流程实例
String processInstanceId = "流程实例ID";
HistoricProcessInstance hpi = processEngine.getHistoryService()// 与历史数据(历史表)相关的Service
.createHistoricProcessInstanceQuery()// 创建历史流程实例查询
.processInstanceId(processInstanceId)// 使用流程实例ID查询
.orderByProcessInstanceStartTime().asc().singleResult();
System.out.println(hpi.getId() + " " + hpi.getProcessDefinitionId() + " " + hpi.getStartTime() + " "
+ hpi.getEndTime() + " " + hpi.getDurationInMillis());
查询历史流程变量
String processInstanceId = "流程实例ID";// 流程实例ID
List list = processEngine.getHistoryService()//
.createHistoricVariableInstanceQuery()// 创建一个历史的流程变量查询对象
.processInstanceId(processInstanceId)//
.list();
if (list != null && list.size() > 0) {
for (HistoricVariableInstance hvi : list) {
System.out.println(hvi.getId() + " " + hvi.getProcessInstanceId() + " " + hvi.getVariableName()
+ " " + hvi.getVariableTypeName() + " " + hvi.getValue());
}
}
查询历史活动
String processInstanceId = "流程实例ID";//流程实例ID
List list = processEngine.getHistoryService()//
.createHistoricActivityInstanceQuery()// 创建历史活动实例的查询
.processInstanceId(processInstanceId)//
.orderByHistoricActivityInstanceStartTime().asc()//
.list();
if (list != null && list.size() > 0) {
for (HistoricActivityInstance hai : list) {
System.out.println(hai.getId() + " " + hai.getProcessInstanceId() + " " + hai.getActivityType()
+ " " + hai.getStartTime() + " " + hai.getEndTime() + " " + hai.getDurationInMillis());
}
}