【Activiti】一个简单的单线流程的规则部署,流程启动,流程执行,任务查询,任务处理全过程



package com.tabchanj.activiti;

import java.util.List;

import org.activiti.engine.HistoryService;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.history.HistoricActivityInstance;
import org.activiti.engine.history.HistoricActivityInstanceQuery;
import org.activiti.engine.repository.DeploymentBuilder;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.activiti.engine.task.TaskQuery;
import org.junit.Test;

/**
 * 测试流程规则的创建和发布 Activiti整体思路:
 *  1.获取核心的ProcessEngine对象 2.根据需求,获取对应的服务对象
 * 3.使用服务对象的方法完成相应的功能 Activiti的查询思路: 1.获取需求获取对应的服务对象 2.适应服务对象创建查询对象 3.设置查询条件
 * 3.使用查询对象进行查找
 *
 * @author tab
 *
 */
public class FlowTest {

    private ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();

    /**
     * 创建规则:使用仓库对象,用于存储规则
     *
     * @throws Exception
     */
    @Test
    public void testDeployProcess() throws Exception {
        // 1,获取仓库服务对象
        RepositoryService rs = engine.getRepositoryService();
        // --------完成功能------------------
        DeploymentBuilder builder = rs.createDeployment();// 创建部署build对象
        // 获取流程规则图
        builder.addClasspathResource("LeaveFlow.bpmn");
        builder.addClasspathResource("LeaveFlow.png");
        // 部署
        builder.deploy();
    }
    /**
     * 开启一个流程
     *
     * @throws Exception
     */
    @Test
    public void testStartProcess() throws Exception {
        // 获取启动服务
        RuntimeService run = engine.getRuntimeService();
        // 开启Process
        String processDefinitionId = "LeaveFlow:1:4";
        ProcessInstance instance = run.startProcessInstanceById(processDefinitionId);
        System.out.println("instance==" + instance);
    }
    @SuppressWarnings("deprecation")
    @Test
    public void testQueryTask() throws Exception {
        //获取任务服务对象
        TaskService ts = engine.getTaskService();
        //创建查询对象
        TaskQuery tq = ts.createTaskQuery();
        //设置过滤条件
        String assignee = "张三经理";
        tq.taskAssignee(assignee).orderByTaskCreateTime().asc();
        //执行查询
        List<Task> tasks = tq.list();
        System.out.println("========================"+assignee+"的任务列表===================");
        for (Task task : tasks) {
            System.out.println("执行人:"+task.getAssignee()+"任务id:"+task.getId()+",任务名称:"+task.getName()+",任务建立时间:"+task.getCreateTime().toLocaleString());

        }
    }
    /**
     * 处理任务
     * @throws Exception
     */
    @Test
    public void testExecuteTask() throws Exception {
        //获取任务服务对象
        TaskService ts = engine.getTaskService();
        //执行任务
//        ts.complete("7502");
        ts.complete("10002");
        testQueryTask();
    }
    /**
     * 查询历史任务
     * @throws Exception
     */
    @Test
    public void testHistory() throws Exception {
        //获取历史服务对象
        HistoryService hs = engine.getHistoryService();
        //创建历史查询对象
        HistoricActivityInstanceQuery ha = hs.createHistoricActivityInstanceQuery();
        //设置过滤
        String processInstanceId= "2501";
        List<HistoricActivityInstance> hiss =  ha.processInstanceId(processInstanceId).orderByHistoricActivityInstanceEndTime().desc().list();
        System.out.println(hiss.size());
        for (HistoricActivityInstance historicActivityInstance : hiss) {
            System.out.println(historicActivityInstance);
        }
    }
}
时间: 2024-08-28 22:06:20

【Activiti】一个简单的单线流程的规则部署,流程启动,流程执行,任务查询,任务处理全过程的相关文章

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

---为了加深对activiti的理解记忆,对自己做的一个流程进行自述.加强记忆 请假实例 一.设计请假的流程图以及流程文件,完善对应数据项,比如用户信息,请假单信息 --请假单 --流程图 --流程文件leaveBill.bpmn <?xml version="1.0" encoding="UTF-8"?><definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL&qu

一个简单的例子搞懂ES6之Promise

ES5中实现异步的常见方式不外乎以下几种: 1. 回调函数 2. 事件驱动 2. 自定义事件(根本上原理同事件驱动相同) 而ES6中的Promise的出现就使得异步变得非常简单.promise中的异步是这样的: * 每当我需要执行一次异步操作的时候,我都需要new一个promise对象 * 每一个异步操作的Promise对象都需要设定一个成功执行的条件和成功的回调.一个失败的条件和失败的回调 * Promise对象可通过执行then()方法获得成功的回调信息 * Promise对象可通过执行ca

一个简单的线程池程序设计(消费者和生产者)

最近在学习linux下的编程,刚开始接触感觉有点复杂,今天把线程里比较重要的线程池程序重新理解梳理一下. 实现功能:创建一个线程池,该线程池包含若干个线程,以及一个任务队列,当有新的任务出现时,如果任务队列不满,则把该任务加入到任务队列中去,并且向线程发送一个信号,调用某个线程为任务队列中的任务服务.如果线程池中的线程都在忙,那么任务队列中的任务则等待.本程序较为简单,把任务定义为了两个数相加,输出它们的和. 采用自顶向下的设计方法,先把整体框架构建出来,然后再慢慢把细节,小模块补全. 1.在l

node.js基于express框架搭建一个简单的注册登录Web功能

这个小应用使用到了node.js  bootstrap  express  以及数据库的操作 :使用mongoose对象模型来操作 mongodb 如果没了解过的可以先去基本了解一下相关概念~ 首先注明一下版本,因为express因为版本的不同使用的方式也不同,我这算是目前最新的了吧 还没有装express的可以移步到这里 看看express框架的获取安装 1.简单地项目初始化 进入你的nodejs安装路径下边,如图,然后执行命令  express -e test  (这里把项目名设置为test

Linux C 一个简单的线程池程序设计

实现功能:创建一个线程池,该线程池包含若干个线程,以及一个任务队列,当有新的任务出现时,如果任务队列不满,则把该任务加入到任务队列中去,并且向线程发送一个信号,调用某个线程为任务队列中的任务服务.如果线程池中的线程都在忙,那么任务队列中的任务则等待.本程序较为简单,把任务定义为了两个数相加,输出它们的和. 采用自顶向下的设计方法,先把整体框架构建出来,然后再慢慢把细节,小模块补全. 1.在linux环境下构建三个文件夹(include,src,bin) include:包含该程序所需要的头文件.

CentOS开机启动流程简介

我们都知道按下电脑电源键后,屏幕上会一闪而过很多信息,然后显示登录界面,然后输入用户名,密码就可以畅享网络世界了.那么这中间到底发生了什么呢,今天就让我们来简单探讨一下CentOS的简易版开机启动流程吧. 第一阶段:通电自检过程 我们都知道电脑所有数据指令都是在内存上才能被cpu处理的吧,我们还知道内存在断电后其上面的所有数据都会丢失吧,那么开机的时候内存应该是没有东西的吧,那上面都不能干了,更别说启动一个操作系统了,其实啊,我们内存并不只是我们常见的那个内存卡,很多硬件都会映射一段内存到cpu

【嵌入式开发】 Bootloader 详解 ( 代码环境 | ARM 启动流程 | uboot 工作流程 | 架构设计)

作者 : 韩曙亮 博客地址 : http://blog.csdn.net/shulianghan/article/details/42462795 转载请著名出处 相关资源下载 :  -- u-boot 源码 : http://download.csdn.net/detail/han1202012/8342761 -- S3C2440 文档 : http://download.csdn.net/detail/han1202012/8342701 -- S5PV210_iROM_Applicati

u-boot启动流程分析(1)_平台相关部分

转自:http://www.wowotech.net/u-boot/boot_flow_1.html 1. 前言 本文将结合u-boot的“board—>machine—>arch—>cpu”框架,介绍u-boot中平台相关部分的启动流程.并通过对启动流程的简单分析,掌握u-boot移植的基本方法. 注1:本文所使用的u-boot版本,是2016/4/23从u-boot官网(git://git.denx.de/u-boot.git)导入的一个快照,具体可参考“https://github

android源码解析之(十四)--&gt;Activity启动流程

好吧,终于要开始讲解Activity的启动流程了,Activity的启动流程相对复杂一下,涉及到了Activity中的生命周期方法,涉及到了Android体系的CS模式,涉及到了Android中进程通讯Binder机制等等, 首先介绍一下Activity,这里引用一下Android guide中对Activity的介绍: An activity represents a single screen with a user interface. For example, an email appl