工作流笔记第三天_流程实例

Posted 爱笑的我_smile

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了工作流笔记第三天_流程实例相关的知识,希望对你有一定的参考价值。

0、流程实例的表

-- 流程实例,执行对象,任务
-- 1、解析.bpmn后得到的流程定义规则的信息,工作流系统就是按照流程定义的规则执行的。
select * FROM act_ru_execution; -- 正在执行的执行对象表
select * FROM act_hi_procinst; -- 流程实例的历史表
select * FROM act_ru_task; -- 正在执行的任务表(只有节点是UserTask的时候,该表中存在数据)
select * FROM act_hi_taskinst; -- 任务历史表(只有节点是UserTask的时候,该表中存在数据)
select * FROM act_hi_actinst; -- 所有活动节点的历史表

1、结论:

(1)如果是单例流程(没有分支和聚合),那么流程实例ID和执行对象ID是相同的;

(2)一个流程实例只有一个,执行对象可以有多个

 

代码实现:

package itheima.processDefinition;

import java.io.InputStream;
import java.util.List;
import java.util.zip.ZipInputStream;

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.history.HistoricProcessInstance;
import org.activiti.engine.history.HistoricTaskInstance;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.task.Task;
import org.junit.Test;

public class ProcessInstance {
// 获得工作流引擎对象
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

/* 部署流程定义(从zip中部署流程定义)

把helloWord.bpmn和helloWord.png压缩成helloWord.zip放在src/main/resources/diagrams文件夹下

 

*/
@Test
public void deloymentProcessDefinitionFromZip() {
// 根据反射获取zip文件转换成对应的流
InputStream in = this.getClass().getClassLoader().getResourceAsStream("diagrams/helloWord.zip");
// 创建流对象
ZipInputStream zipInputStream = new ZipInputStream(in);
// 部署对象
Deployment deploy = processEngine.getRepositoryService()// 与流程定义相关的service
.createDeployment()// 创建部署对象
.name("helloWord入门程序")// 添加部署名称
.addZipInputStream(zipInputStream)// 指定zip格式的文件完成部署
.deploy();// 完成部署;
System.out.println("部署id:" + deploy.getId());
System.out.println("部署名称:" + deploy.getName());
}

/* 启动流程实例 */
@Test
public void startProcessInstance() {
// 流程定义的key
String processDefinitionKey = "helloWord";
org.activiti.engine.runtime.ProcessInstance processInstance = processEngine.getRuntimeService()// 与正在执行的流程实例和流程对象有关的service
.startProcessInstanceByKey(processDefinitionKey);
// 使用流程定义的key启动流程实例,key与helloWord.bpmn中的id值相同
System.out.println("流程实例id:" + processInstance.getId());
System.out.println("流程定义id:" + processInstance.getProcessDefinitionId());
}

/* 完成我的任务 */
@Test
public void completeMyTask() {
// 任务id
String taskId = "1002";
processEngine.getTaskService()// 获取与正在执行任务的service
.complete(taskId);
System.out.println("完成任务,任务编号是:" + taskId);
}

/* 查询当前人的个人任务 */
@Test
public void findMyPersonalTask() {
String assignee = "王五";
List<Task> list = processEngine.getTaskService()// 获取与正在执行任务的service
.createTaskQuery()// 创建任务查询对象
.taskAssignee(assignee)// 指定个人任务查询,指定办理人
// .taskCandidateUser(candidateUser)//组任务的办理人查询
// .processDefinitionId("helloWord:1:704")// 按照流程定义id查询
// .executionId("801")//按照执行对象id查询
// .processInstanceId("801")// 流程实例id查询
.orderByTaskCreateTime().asc()// 按照任务创建时间的升序排列
// .singleResult()//唯一结果集
.list(); // 返回结果集列表
if (list != null && list.size() > 0) {
for (Task task : list) {
System.out.println("任务id:" + task.getId());
System.out.println("任务名称:" + task.getName());
System.out.println("任务的创建时间:" + task.getCreateTime());
System.out.println("任务的办理人:" + task.getAssignee());
System.out.println("流程实例id:" + task.getProcessInstanceId());
System.out.println("执行对象id:" + task.getExecutionId());
System.out.println("流程定义id:" + task.getProcessDefinitionId());
}
}
}

/* 查询流程状态(判断流程正在执行还是已经结束) */
@Test
public void isProcessEnd() {
String processInstanceId = "801";
org.activiti.engine.runtime.ProcessInstance singleResult = processEngine.getRuntimeService()
.createProcessInstanceQuery()// 创建流程实例查询对象
.processInstanceId(processInstanceId)// 根据流程实例id查询
.singleResult();// 返回唯一结果集
if (singleResult != null) {
System.out.println("流程还没有执行结束。");
} else {
System.out.println("流程已经执行结束!");
}
}

/* 查询历史任务 */
@Test
public void queryHistoryTask() {
String taskAssignee = "张三";
List<HistoricTaskInstance> list = processEngine.getHistoryService()// 创建于历史有关的服务对象
.createHistoricTaskInstanceQuery()// 创建查询历史任务实例对象
.taskAssignee(taskAssignee)// 办理任务的人
.list();
if (list != null && list.size() > 0) {
for (HistoricTaskInstance his : list) {
System.out.println(his.getProcessInstanceId() + " " + his.getAssignee() + " "
+ his.getTaskDefinitionKey() + " " + his.getName() + " " + his.getStartTime() + " "
+ his.getEndTime() + " " + his.getDurationInMillis());
}
}
}

/* 查询历史流程实例 */
@Test
public void queryHistoryProcessInstance() {
String processInstanceId = "801";
HistoricProcessInstance his = processEngine.getHistoryService()// 创建于历史相关的服务对象
.createHistoricProcessInstanceQuery()// 创建查询流程实例对象
.processInstanceId(processInstanceId).singleResult();
if (his != null) {
System.out.println(his.getId() + " " + his.getProcessDefinitionId() + " " + his.getStartTime()
+ " " + his.getEndTime() + " " + his.getDurationInMillis());
}
}
}

以上是关于工作流笔记第三天_流程实例的主要内容,如果未能解决你的问题,请参考以下文章

准备找工作第三天——java基础_由有道云笔记倒入

明年找到好工作:面试题打卡第三天

明年找到好工作:面试题打卡第三天

Linux课程第三天学习笔记

工作流笔记第0天_学习要点

HCIP第三天学习笔记