有了上一节的基础,这节主要讲如何创建一个学生请假流程、部署、运行流程实例、查看任务、执行任务、判断流程实例状态、历史任务(实例)查询、历史活动节点查询

记住,一个正在执行的流程,他的流程定义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工作流-学生请假流程的更多相关文章

  1. (六)Activiti之实现学生请假流程

    一.实现学生请假流程 1.1 用activiti插件生成bpmn和png文件 1.2 部署流程定义 package com.shyroke.activiti.firstActiviti; import ...

  2. activiti工作流的web流程设计器整合视频教程 SSM和独立部署

    本视频为activiti工作流的web流程设计器整合视频教程 整合Acitiviti在线流程设计器(Activiti-Modeler 5.21.0 官方流程设计器) 本视频共讲了两种整合方式 1. 流 ...

  3. activiti工作流的web流程设计器整合视频教程 SSM 和 独立部署

    本视频为activiti工作流的web流程设计器整合视频教程 整合Acitiviti在线流程设计器(Activiti-Modeler 5.21.0 官方流程设计器) 本视频共讲了两种整合方式 1. 流 ...

  4. activiti工作流的web流程设计器整合视频教程

    本视频为activiti工作流的web流程设计器整合视频教程 整合Acitiviti在线流程设计器(Activiti-Modeler 5.21.0 官方流程设计器) 本视频共讲了两种整合方式 1. 流 ...

  5. 项目实践之工作流引擎基本文档!Activiti工作流框架中流程引擎API和服务详解

    流程引擎的API和服务 流程引擎API(ProcessEngine API)是与Activiti打交道的最常用方式 Activiti从ProcessEngine开始.在ProcessEngine中,可 ...

  6. activiti实现的请假流程

    直接上图,还是有点复杂的

  7. 基于Activiti工作流引擎实现的请假审核流程

    概要 本文档介绍的是某商用中集成的Activiti工作流的部署及使用,该框架用的Activiti版本为5.19.0.本文档中主要以一个请假流程为例子进行说明,该例子的流程图如下: 这是一个可以正常运作 ...

  8. activiti 一个流程的运转步骤 以请假流程为例

    ---为了加深对activiti的理解记忆,对自己做的一个流程进行自述.加强记忆 请假实例 一.设计请假的流程图以及流程文件,完善对应数据项,比如用户信息,请假单信息 --请假单 --流程图 --流程 ...

  9. Activiti工作流框架学习(二)——使用Activiti提供的API完成流程操作

    可以在项目中加入log4j,将logj4.properties文件拷入到src目录下,这样框架执行的sql就可以输出到到控制台,log4j提供的日志级别有以下几种: Fatal  error  war ...

随机推荐

  1. vue中部分api解释 ($nextTick)

    1:this.$nextTick(function(){ }) 传如的参数是一个函数 这个API主要是获取dom元素 为什么需要这个api,在vue框架开发中,更新dom是一个异步操作,如果更新完do ...

  2. 用JDOM和DOM4J解析节点名节点值

    1.用JDOM解析节点名和节点值 1.创建一个SAXBuilder对象 2.创建一个输入流, 将xml文件加载到文件中 3.   通过saxBuilder的方法,将输入流加载到saxBuilder 4 ...

  3. [Presto]Presto章1 Presto 咋用

    Presto 的平均查询性能是 Hive 的 10 倍! 由于 Presto 的数据源具有完全解耦.高性能,以及对 ANSI SQL 的支持等特性,使得 Presto 在 ETL.实时数据计算. Ad ...

  4. 模板引擎,中间件,spring AOP原理

    1. 主流模板引擎有哪些 https://blog.csdn.net/wangmx1993328/article/details/81054474 2. 解释模板引擎是个什么东西 https://ww ...

  5. ajax相关知识总结

    一.原生AJAX的兼容版本实现 function createXhr(){ var Xhr = null; //浏览器的判断 if(window.XMLHttpRequest){ //ie789 ch ...

  6. [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.2:compile (default-compile) on project taotao-manager-pojo: Compilation failure

    运行maven项目时报错 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.2:compi ...

  7. C#实现简单的RPC

    demo地址:https://pan.baidu.com/s/1PeTdV2V9DF87jZTHdz4CyA 提取码:n2qm 参考地址:https://github.com/neuecc/Magic ...

  8. 环境搭建文档——Windows下的Python3环境搭建

    前言 背景介绍: 自己用Python开发了一些安卓性能自动化测试的脚本, 但是想要运行这些脚本的话, 本地需要Python的环境. 测试组的同事基本都没有安装Python环境, 于是乎, 我就想直接在 ...

  9. 深入C#

     深入C# String类 C#中的String类他是专门处理字符串的(String),他在System的命名空间下,在C#中我们使用的是string 小写的string只是大写的String的一个别 ...

  10. 检测MySQL主从备份是否运行

    通过查看 slave  状态,确保 Slave_IO_Running: Yes Slave_SQL_Running: Yes #!/bin/bash#Author:Darius-Dmysql -uro ...