有时候,我们需要对一个已经执行的流程进行暂停,而不是删除它,这个时候就需要我们调用activiti暂停和激活的api来操作他们

  每启动一个流程实例,都会在该流程实例下产生相应的流程任务,处于1*多的关系,每次流程实例运行到某一个节点下,都会在当前任务表act_ru_task产生一个或者多个任务(一般情况是一个,出现分支会多个),

结束一个任务我们可以看到当前运行的任务表act_ru_task会删除这个任务task,而在历史任务表act_hi_taskinst中(通过historyService)可以查询到刚才流程实例下的所有的task,

  从上述观察中,得出结论,获取当前的任务,可以从taskService和historyService都可以获取,但是我们查询当前任务都是从taskService中查询,因为里面任务执行完就会删掉,数据少,查询速度快,同样的道理,

我们查询流程实例,也可以从runtimeService和historyService中查询,但是优先考虑runtimeService,除非查询历史流程实例

(1)测试暂停流程实例执行步骤如下:

  1,通过流程定义的key或者id启动一个流程实例

  2,根据流程实例的id来挂起这个流程实例

  3,得到下一个节点的对应的任务的id,调用taskService来完成这个任务观察效果

   4,重新激活这个流程实例

  5,继续完成这个流程实例

执行代码如下:

  1,流程实例的启动,我们已经在前面的代码中演示过,这里不做演示

  2,通过上面发起的流程实例的id挂起这个流程实例

/**
* 测试挂起一个流程实例
*/
@Test
public void testSuspendProcessInstance(){
RuntimeService runtimeService = engine.getRuntimeService(); String processInstanceId="1801";
//根据一个流程实例的id挂起该流程实例
runtimeService.suspendProcessInstanceById(processInstanceId); }

  3,任务的下一处理人来完成这个实例

//完成一个流程
@Test
public void completeProcessInstance(){ //任务的id,后期整合后会通过当前登录人身份查询到该用户的任务,然后获取到该id
String taskId="1804";
TaskService taskService = engine.getTaskService();
//根据任务id完成该任务
taskService.complete(taskId); }

  执行完报错:

  

  上面的信息说明无法完成一个已经被挂起的任务

  

  4,激活这个流程实例

  

/**
* 激活一个流程实例
*/
@Test
public void testActivateProcessInstance(){
RuntimeService runtimeService = engine.getRuntimeService(); String processInstanceId="1801"; runtimeService.activateProcessInstanceById(processInstanceId);
}

  5,重新完成这个任务,执行ok

(2)测试暂停流程定义执行步骤如下:

在程序中,我们需要暂停一个流程定义,停止所有的该流程定义下的流程实例,并且不允许发起这个流程定义的流程实例,那么我们就需要挂起这个流程定义

  1,启动一个流程实例(该流程定义未挂起前)

  2,挂起上面流程实例对应的流程定义

  3,完成上述流程实例的下一个任务节点(观察效果,是否会和流程实例挂起一样)

  

执行代码如下:

  1,启动一个流程实例

  2,挂起这个流程实例对应的流程定义(这里可以通过流程定义的key和流程定义的id来挂起,我这里只用流程定义的key方便演示)

  

@Test
public void testSuspendProcessDefinition(){
RepositoryService repositoryService = engine.getRepositoryService(); String processDefinitionKey ="purchasingflow";
//根据流程定义的key暂停一个流程定义
repositoryService.suspendProcessDefinitionByKey(processDefinitionKey ); }

  3,完成这个流程实例的下一个节点,通过taskService来结束下一个任务节点

  这时候,我们发现这个流程实例居然是可以继续执行的,并且可以执行到结束,带着这个疑问,我们再启动一个流程实例看看

  4,重新启动这个流程定义下的流程实例

  

  

  报错说不可以启动这个被挂起流程定义的流程实例

  怎么回事呢??

  我们又仔细的看了流程定义的挂起api,发现还有这么个api

void suspendProcessDefinitionById(String processDefinitionId, boolean suspendProcessInstances, Date suspensionDate);
void suspendProcessDefinitionByKey(String processDefinitionKey, boolean suspendProcessInstances, Date suspensionDate);

参数分别是  processDefinitionId(processDefinitionKey):流程定义的id(key)

       suspendProcessInstances:是否级联挂起该流程定义下的流程实例

       suspensionDate:设置挂起这个流程定义的时间,如果不填写,则立即挂起

  到这里我们知道为什么挂起这个流程定义,为什么流程定义下的流程实例还可以继续运行了

  下面我们挂起这个流程定义,并且级联挂起该流程定义下的流程实例

  

@Test
public void testActivateProcessDefinitionCascade(){
RepositoryService repositoryService = engine.getRepositoryService(); String processDefinitionKey ="purchasingflow";
//根据流程定义的key暂停一个流程定义,并且级联挂起该流程定义下的流程实例
repositoryService.suspendProcessDefinitionByKey(processDefinitionKey, true, null); }

  这个时候,我们再继续运行已经发起的流程实例,发现已经运行不起来了!!!

  

  

  

  

  

  

  

  

  

  

  

(3)activiti流程的挂起和激活的更多相关文章

  1. Activiti7 绑定业务主键以及流程定义 流程实例的挂起和激活

    绑定业务主键businessKey /** * 绑定业务主键 */ @Test public void bindingBusinessKey() { // 获取RuntimeService Runti ...

  2. 工作流学习——Activiti流程实例、任务管理四步曲 (zhuan)

    http://blog.csdn.net/zwk626542417/article/details/46646565 ***************************************** ...

  3. 基于easyui开发Web版Activiti流程定制器详解(六)——Draw2d的扩展(三)

    题外话: 最近在忙公司的云项目空闲时间不是很多,所以很久没来更新,今天补上一篇! 回顾: 前几篇介绍了一下设计器的界面和Draw2d基础知识,这篇讲解一下本设计器如何扩展Draw2d. 进入主题: 先 ...

  4. activiti 流程发起人控制

    最近做activiti流程发起人的控制,最开始的想法是新建一张表 ,通过控制流程定义id与发起人id进行控制,如果这样每次发布新的流程就必须 重新设置流程发起人,因为通过流程定义不能获取流程模型id, ...

  5. activiti 流程部署 保存流程图到数据库 保存二进制图片 存储失败

    activiti 流程部署 保存流程图到数据库  保存二进制图片 存储失败 具体错误如下 具体 junit测试 结果 :提示如下: 解决方法: 数据库版本不同 无法保存二进制文件到数据库表中!5.5. ...

  6. Activiti 学习(三)—— Activiti 流程启动并完成

    Activiti 流程启动 流程定义部署后,就可以通过工作流管理业务流程了,也就是说前文部署的出差申请流程可以使用了.针对该流程,启动一个流程表示发起一个新的出差申请单,这就相当于 java 类与 j ...

  7. 关于activiti流程通过、驳回、会签、转办、中止、挂起等核心操作功能的封装

    http://blog.csdn.net/aochuanguying/article/details/7594197 package com.famousPro.process.service.imp ...

  8. Java Activiti 流程审批 后台框架源码 springmvc SSM 工作流引擎

    即时通讯:支持好友,群组,发图片.文件,消息声音提醒,离线消息,保留聊天记录 工作流模块-------------------------------------------------------- ...

  9. Activiti 流程启动及节点流转源代码分析

    作者:jiankunking 出处:http://blog.csdn.net/jiankunking 本文主要是以activiti-study中的xiaomage.xml流程图为例进行跟踪分析 详细的 ...

随机推荐

  1. APP导致界面卡死,iPhone卡死

    实测,是 Reachability 类创建实例过多导致 http://stackoverflow.com/questions/34063166/ios-9-app-freeze-with-consol ...

  2. 手动调用NDK编译HelloWorld

    首先,你得有NDK(木有的自行搜索) /home/xxxx/tools/android-ndk-r12b 准备好你的HelloWorld程序源码: #include<stdio.h> in ...

  3. java学习(三) java 中 mongodb的各种操作

    一. 常用查询: 1. 查询一条数据:(多用于保存时判断db中是否已有当前数据,这里 is  精确匹配,模糊匹配 使用 regex...) public PageUrl getByUrl(String ...

  4. Markdown及MarkdownPad使用规则

    Markdown Markdown 是一种轻量级标记语言.它允许人们"使用易读易写的纯文本格式编写文档,然后转换成有效的XHTML(或者HTML)文档". Markdown语法简要 ...

  5. word2010中,插入-符号-公式显示是灰色的解决办法

    在文件选项里点转换,把文档转换成最新格式,也就是2010,因为兼容旧版本模式(比方03,07)的文档是无法使用公式编辑器功能的 步骤: 1.点击“文件” 2.出现下图: 3.点击“转换”图标,将生成最 ...

  6. 3)Java学习笔记:内部类

    什么是内部类 内部类是指在一个外部类的内部再定义一个类.内部类作为外部类的一个成员,并且依附于外部类而存在的.内部类可为静态,可用protected和private修饰(而外部类只能使用public和 ...

  7. bzoj1113

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1113 题解:单调栈 代码: #include<iostream> #includ ...

  8. 不错的Django技术网址

    Ajax与json需要看得 http://stackoverflow.com/questions/30243101/return-queryset-as-json

  9. iOS 之 CALayer与UIView的区别

    最大区别:CALayer (图层)不会直接渲染到屏幕上. UIView是iOS系统中界面元素的基础,所有的界面元素都继承自它.它本身完全是由CoreAnimation来实现的. 真正的绘图部分,是由一 ...

  10. 解剖 Elasticsearch 集群 - 之三

    解剖 Elasticsearch 集群 - 之三 本篇文章是一系列涵盖 Elasticsearch 底层架构和原型示例的其中一篇.在本篇文章中,我们会讨论 Elasticsearch 如何提供准实时搜 ...