Activiti 6.0 之SkipExpression

惭愧惭愧,这么一个小小的功能整了这么久。

​ 还是先说一下业务场景吧。在工作流中,我们难免会遇到这样的情况,即一个流程的发起者的身份问题。举个详细的例子。就拿一个公司的报销流程来讲。可能是这样的。

  1. 没有优化过的流程图(实在不想画了,太费劲了)

  2. 优化过的流程图

    ​ 怎么样?看起来是不是清爽了很多?那怎么执行呢?首先,这篇说的是SkipExpression,所以审批不通过的驳回不在这篇说。


  1. 流程启动之后,第一个任务节点就是发起任务的节点。

  2. 在后续任务中加入一个跳过表达式,比如说代表当前用户的职责组编号:${execution.getVariable('gId')==2}

    之后就可以部署流程图了。在任务进行的途中将当前处理人的身份组ID以流程变量的形式设置进流程,这样就可以做到任务执行到当前任务时自动跳过任务了。嗯。理想是美好的,现实是骨感的,WTF!!!Skip Expression竟然没有工作????

Question:Skip Expression 设置了但是没有起作用

​ 哎,上面的想法是好的,因为看到了Skip Expression,顾名思义,就是跳过表达式的意思嘛,怎么就不起作用呢?好在在github中下载了一份源码来看。

​ 在源码的测试方法中可以看到在设置流程变量前先设置了一个这东西:_ACTIVITI_SKIP_EXPRESSION_ENABLED

​ 什么玩意???Activiti 跳过 表达式 开启?咦,英语还凑合哈,对就是启用跳过表达式模式。那么问题又来了。怎么呢??这么多的任务节点,你让我每次都去加这么一句流程变量么??!!闹呢??别急,我是这样做的。

给第一个需要跳过的任务中也添加一个ExecutionListener

import com.edu.hart.modules.constant.ActivitiConstanct;
import org.activiti.engine.delegate.DelegateExecution;
import org.activiti.engine.delegate.ExecutionListener; import java.util.Map; /**
* 任务跳过监听器
* <p>
* create by 叶云轩 at 2017/12/26 - 16:03
* contact by ycountjavaxuan@outlook.com
*/
public class SkipListenner implements ExecutionListener { /**
* 序列化
*/
private static final long serialVersionUID = 3599293834301636975L; @Override
public void notify(DelegateExecution execution) {
// 获取流程变量
Map<String, Object> variables = execution.getVariables();
// 开启支持跳过表达式 ActivitiConstanct.getSkipExpression()就是"_ACTIVITI_SKIP_EXPRESSION_ENABLED"
variables.put(ActivitiConstanct.getSkipExpression(), true);
// 将修改同步到流程中
execution.setTransientVariables(variables);
// 这种方式也行。直接设置流程变量
// execution.setVariable(ActivitiConstanct.getSkipExpression(),true);
}
}

之后在process的properties中设置Listeners

这样就可以了,亲测可行的哦~~~~


总结:

1. 看源码不认真,注意到_ACTIVITI_SKIP_EXPRESSION_ENABLED了但是没有用,就去测试了。最后结果不行,又来看源码。浪费时间。
2. Activiti还是很好用的~~~~
3. 下章写驳回的实现逻辑,完成任意节点的驳回,即去掉所有的审批网关。精简设计和开发。

Activiti 6.0 之SkipExpression的更多相关文章

  1. springboot2.04与activiti 6.0集成

    本文就不对activiti做解释,下面直接看项目集成 以下顺序方面根据我的理解来,可以先从第二章看,再看第一张与第三章 增加activiti表的API,备注用. 目录 一.springboot2.X集 ...

  2. IDEA环境Spring Boot 2.3整合Activiti 6.0,启动项目初始化表并创建核心服务

    如下步骤照着抄就完事了. 一.新建一个spring boot项目,并引入相关依赖 <?xml version="1.0" encoding="UTF-8" ...

  3. Activiti 6.0 入门篇

    从Activiti网站下载Activiti UI WAR文件(或百度云) 将下载的activiti-app.war复制到Tomcat的webapps目录. 启动Tomcat 打开浏览器并转到 http ...

  4. Activiti6.0 安装出错 log4j:ERROR setFile(null,true) call failed.

    由于要选择一款合适的流程引擎,需要在jbpm和Activiti之间做对比,我这边负责Activiti的测试. 看到Activiti官网(http://www.activiti.org/download ...

  5. 工作流学习——Activiti整体认识二步曲 (zhuan)

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

  6. Activiti工作流的定义部署和执行

        工作流引擎 个人觉得直接理解工作流引擎概念有点难度,我们可以先通过了解工作流引擎的职责再反过来理解工作流引擎,工作流引擎一般都做两件事情: 1.定义流程,也就是给我们提供某种规范来定义规则,以 ...

  7. Activiti - 新一代的开源BPM引擎

    Activiti 背景简介.服务和功能介绍 背景介绍 Activiti 其核心是 BPMN 2.0 的流程引擎.BPMN 是目前被各 BPM 厂商广泛接受的 BPM 标准,全称为 Business P ...

  8. Activiti - 新一代的开源 BPM 引擎 (zhuan)

    http://www.ibm.com/developerworks/cn/Java/j-lo-activiti1/ ****************************************** ...

  9. Activiti工作流学习之流程图应用详解

    Activiti工作流学习之流程图应用详解 1.目的  了解Activiti工作流是怎样应用流程图的. 2.环境准备2.1.相关软件及版本    jdk版本:Jdk1.7及以上 IDE:eclipse ...

随机推荐

  1. java面试扫盲:对象初始化顺序(真的未必能答对)

    记录下面试里面遇到的一些java盲区,一方面扫描自己的知识盲区,一方面也可以给后面面试的朋友一些警示,以免面试的时候出现不知道的尴尬情况. 提出问题:父类静态属性,父类属性,父类构造方法,子类静态属性 ...

  2. Bash 常用快捷键(转)

    在mtysql client中按HOME键和END键失效,查了也没有找到原因 使用Bash常用的快捷方式即可. http://blog.csdn.net/mingzhou/article/detail ...

  3. 【转】jQuery代码片段备用

    在CSDN看到的,记下备用.原文:http://www.csdn.net/article/2013-07-16/2816238-15-jquery-code-snippets-for-develope ...

  4. Spring集成Quartz完成定时任务

    在JavaEE系统中,我们经常会用到定时任务,比如每天晚上凌晨之后跑批处理或者是每天某个时刻群发消息等等. 我们可以使用java.util.Timer结合java.util.TimerTask来去完成 ...

  5. Builder模式的思考(Effective Java)

    <Effective Java>(第2版)中第二条中提到:遇到多个构造器参数时要考虑用构建器.在复习static关键字和内部类时回头看了一下,这才明白了为什么要用静态内部类来做处理,这里记 ...

  6. phpcms v9 sql注入脚本

    phpcms v9 SQL注入脚本 用法:python phpcms.py http://www.baidu.com import requests,sys,urllib url = sys.argv ...

  7. Nuxt框架实践

    前言 今天抽空过了遍nuxt文档,写了个实践demo,关于nuxt我已经断断续续看了好几遍了,自我感觉也算是入门了吧,从开发到上线心里都有底.后期打算在项目用起来的是nuxt框架,一些函数工具库,比如 ...

  8. RibbonForm使用技巧

    Ribbon右侧显示Logo 方法 重写RibbonControl的Paint事件 效果 代码 private void _ribbonControl_Paint(object sender, Pai ...

  9. 程序员的自我救赎---1.4.2: 核心框架讲解(BLL&Tool)

    <前言> <目录> (一) Winner2.0 框架基础分析 (二) 短信中心 (三)SSO单点登录 (四)PLSQL报表系统 (五)钱包系统 (六)GPU支付中心 (七)权限 ...

  10. PHP面向对象之const常量修饰符

    在PHP中定义常量是通过define()函数来完成的,但在类中定义常量不能使用define(),而需要使用const修饰符.类中的常量使用const定义后,其访问方式和静态成员类似,都是通过类名或在成 ...