五、activiti工作流-学生请假流程
有了上一节的基础,这节主要讲如何创建一个学生请假流程、部署、运行流程实例、查看任务、执行任务、判断流程实例状态、历史任务(实例)查询、历史活动节点查询
记住,一个正在执行的流程,他的流程定义id无论到哪一个环节都是一样的,流程实例id也是无论到了哪一个环节都是一样,变得是任务id
先在resources-disgrams下面创建一个学生请假流程设计图,

绘制流程设计图

学生委派人设置为张三,班长为李四,班主任为王五

流程图设计好后,现在开始创建一个学生请假的类

package com.java.activiti.flow;
import java.util.List;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.history.HistoricActivityInstance;
import org.activiti.engine.history.HistoricTaskInstance;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.junit.Test;
public class StudentLeaveProcess {
/**
* 获取默认流程引擎实例,会自动读取avtiviti.cfg.xml文件
* */
private ProcessEngine processEngine=ProcessEngines.getDefaultProcessEngine(); //获取流程引擎
//部署流程定义,把数据写到数据库中去,这种是通过classpath加载方式部署
@Test
public void deploy() {
Deployment deployment = processEngine.getRepositoryService() // 获取部署相关的service;
.createDeployment() // 创建部署
.addClasspathResource("diagrams/StudentLeaveProcess.bpmn") // 加载资源文件
.addClasspathResource("diagrams/StudentLeaveProcess.png") // 加载资源文件
.name("学生请假流程") // 流程名字
.deploy(); // 部署
System.out.println("流程部署id:" + deployment.getId());
System.out.println("流程部署Name:" + deployment.getName());
}
/**
* 启动流程实例,一个正在执行的流程,无论到了哪一个节点,他的流程实例id都是一样的
* */
@Test
public void start() {
ProcessInstance pi = processEngine.getRuntimeService() //运行service
.startProcessInstanceByKey("studentLeaveProcess"); //流程定义表里面的key
System.out.println("流程实例id:"+pi.getId());
System.out.println("流程定义id:"+pi.getProcessDefinitionId());
}
/**
* 查看任务,查看某个人的任务
* */
@Test
public void findTask() {
List<Task> taskList = processEngine.getTaskService() //任务相关的service
.createTaskQuery() //创建任务查询S
.taskAssignee("张三") //指定某个人有没有任务
.list();
for (Task task : taskList) {
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());
}
}
/**
* 执行任务,执行的id是任务的id,张三执行完后,在任务表中已经没有了张三,有的是李四(班长),因为已经流到了下一个节点,上面那个方法查张三是查不到的
* 任务执行完,运行时的表全部清空
* */
@Test
public void complete() {
processEngine.getTaskService() //任务相关
.complete("47502");
}
/**
* 判断流程实例状态(正在你执行或者已经执行结束),判断某一个流程实例状态
*/
@Test
public void processState() {
ProcessInstance pi = processEngine.getRuntimeService() //获取运行时service
.createProcessInstanceQuery() //创建执行对象
.processInstanceId("42501") //用流程实例id查询
.singleResult();
if(pi!=null) {
System.out.println("流程正在执行");
}else {
System.out.println("流程已经结束");
}
}
/**
* 历史流程任务查询
*/
@Test
public void historyTaskList() {
List<HistoricTaskInstance> list = processEngine.getHistoryService() //历史相关的service
.createHistoricTaskInstanceQuery() //创建历史任务实例查询
.processInstanceId("42501") //用流程实例id查询
.finished() //查已经完成流程的历史任务
.list();
for (HistoricTaskInstance hti : list) {
System.out.println("委派人:"+hti.getAssignee());
System.out.println("历史任务id:"+hti.getId());
System.out.println("历史流程名称:"+hti.getName());
System.out.println("历史流程实例id:"+hti.getProcessInstanceId());
System.out.println("历史流程名称:"+hti.getProcessInstanceId());
System.out.println("历史流程开始时间:"+hti.getStartTime());
System.out.println("历史流程开始时间:"+hti.getEndTime());
System.out.println("=================");
}
}
/**
* 历史活动节点查询,开发之中这个用的最多,针对是某一个完整的过程
*/
@Test
public void historyAcInstanceList() {
List<HistoricActivityInstance> list = processEngine.getHistoryService() //历史相关的接口
.createHistoricActivityInstanceQuery() //创建历史活动实例查询
.processInstanceId("42501") //指定流程实例id
.finished()
.list();
for (HistoricActivityInstance hisac : list) {
System.out.println("办理人:"+hisac.getAssignee());
System.out.println("活动id:"+hisac.getId());
System.out.println("活动流程名称:"+hisac.getActivityName());
System.out.println("活动流程实例id:"+hisac.getProcessInstanceId());
System.out.println("活动流程开始时间:"+hisac.getStartTime());
System.out.println("活动流程结束时间:"+hisac.getEndTime());
System.out.println("=================");
}
}
}
五、activiti工作流-学生请假流程的更多相关文章
- (六)Activiti之实现学生请假流程
一.实现学生请假流程 1.1 用activiti插件生成bpmn和png文件 1.2 部署流程定义 package com.shyroke.activiti.firstActiviti; import ...
- activiti工作流的web流程设计器整合视频教程 SSM和独立部署
本视频为activiti工作流的web流程设计器整合视频教程 整合Acitiviti在线流程设计器(Activiti-Modeler 5.21.0 官方流程设计器) 本视频共讲了两种整合方式 1. 流 ...
- activiti工作流的web流程设计器整合视频教程 SSM 和 独立部署
本视频为activiti工作流的web流程设计器整合视频教程 整合Acitiviti在线流程设计器(Activiti-Modeler 5.21.0 官方流程设计器) 本视频共讲了两种整合方式 1. 流 ...
- activiti工作流的web流程设计器整合视频教程
本视频为activiti工作流的web流程设计器整合视频教程 整合Acitiviti在线流程设计器(Activiti-Modeler 5.21.0 官方流程设计器) 本视频共讲了两种整合方式 1. 流 ...
- 项目实践之工作流引擎基本文档!Activiti工作流框架中流程引擎API和服务详解
流程引擎的API和服务 流程引擎API(ProcessEngine API)是与Activiti打交道的最常用方式 Activiti从ProcessEngine开始.在ProcessEngine中,可 ...
- activiti实现的请假流程
直接上图,还是有点复杂的
- 基于Activiti工作流引擎实现的请假审核流程
概要 本文档介绍的是某商用中集成的Activiti工作流的部署及使用,该框架用的Activiti版本为5.19.0.本文档中主要以一个请假流程为例子进行说明,该例子的流程图如下: 这是一个可以正常运作 ...
- activiti 一个流程的运转步骤 以请假流程为例
---为了加深对activiti的理解记忆,对自己做的一个流程进行自述.加强记忆 请假实例 一.设计请假的流程图以及流程文件,完善对应数据项,比如用户信息,请假单信息 --请假单 --流程图 --流程 ...
- Activiti工作流框架学习(二)——使用Activiti提供的API完成流程操作
可以在项目中加入log4j,将logj4.properties文件拷入到src目录下,这样框架执行的sql就可以输出到到控制台,log4j提供的日志级别有以下几种: Fatal error war ...
随机推荐
- Swoole 心跳检测
Swoole的心跳检测特别简单,只需要配置 heartbeat_check_interval,heartbeat_idle_time就可以了. heartbeat_check_interval:表示服 ...
- 通过该源码修改vim颜色和pudb调试器的代码颜色的方法
2019-02-19,18点20vim调整颜色vim ~/.vimrc 这个pudb的配色用上的方法改不了.调试状态时候按o和回车能切换console和调试界面. 成功了.通过修改pudb源代码来实现 ...
- JavaSE 初学系统托盘图标SystemTray类
文章目录 1.预备知识 2.使系统托盘显示图标 3.添加提示 4.添加弹出菜单 设置Java程序的系统托盘图标,用到SystemTray类和TrayIcon类. 1.预备知识 JavaAPI对于Sys ...
- Java容器-个人整理1
1.初始化集合时,若能知道知道容量,尽量初始化时确定容量.容器类一般可以自动扩充,但扩充是有性能代价的. 2.Arrays.asList()的底层表示仍然时数组,因此不能进行调整尺寸的操作. 3.Ha ...
- Effective C++ 笔记:条款 33 避免继承导致的名称遮掩
Avoid hiding inherited names 作用域(scopes)所带来的名称二义性,c++编译器会寻找指涉(refer to)的对象并实现名称遮掩规则(name-hiding rule ...
- 距离不是一个连续的物理量(Distance is not a continuous physical quantity)
量子距:不同于现有物理学的长度计量.量子距,空间中的两个粒子之间的距离并不是连续的,而是某个单位距(量子单位距)的整数倍,而这个距离被称为量子距. Quantum distance: Length m ...
- 解决 Files 的值"<<<<<<< HEAD"无效。路径中具有非法字符
通常我们使用版本控制后会出现诸如此类的问题,此时从vs工具找错误和调试是无法找到问题的,也不影响项目的运行,但是有错误就是得解决.原因是版本控制导致文件的路径出现问题. 解决 Files 的值&quo ...
- flask-文件上传
flask文件上传 流程 1. 上传的文件request.files拿取 2. 可以通过WTForms表单验证 3. 通过secure_filename (from werkzeug.utils im ...
- iptables简单用法
iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协议名 <-s 源IP/源子网> --sport 源端口 &l ...
- jQuery 基础语法
jQuery介绍 1.jQuery是一个轻量级的.兼容多浏览器的JavaScript库. 2.jQuery使用户能够更方便地处理HTML Document.Events.实现动画效果.方便地进行Aja ...