Activiti 6.0 之SkipExpression
Activiti 6.0 之SkipExpression
惭愧惭愧,这么一个小小的功能整了这么久。
还是先说一下业务场景吧。在工作流中,我们难免会遇到这样的情况,即一个流程的发起者的身份问题。举个详细的例子。就拿一个公司的报销流程来讲。可能是这样的。
没有优化过的流程图(实在不想画了,太费劲了)

优化过的流程图

怎么样?看起来是不是清爽了很多?那怎么执行呢?首先,这篇说的是SkipExpression,所以审批不通过的驳回不在这篇说。
流程启动之后,第一个任务节点就是发起任务的节点。
在后续任务中加入一个跳过表达式,比如说代表当前用户的职责组编号:${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的更多相关文章
- springboot2.04与activiti 6.0集成
本文就不对activiti做解释,下面直接看项目集成 以下顺序方面根据我的理解来,可以先从第二章看,再看第一张与第三章 增加activiti表的API,备注用. 目录 一.springboot2.X集 ...
- IDEA环境Spring Boot 2.3整合Activiti 6.0,启动项目初始化表并创建核心服务
如下步骤照着抄就完事了. 一.新建一个spring boot项目,并引入相关依赖 <?xml version="1.0" encoding="UTF-8" ...
- Activiti 6.0 入门篇
从Activiti网站下载Activiti UI WAR文件(或百度云) 将下载的activiti-app.war复制到Tomcat的webapps目录. 启动Tomcat 打开浏览器并转到 http ...
- Activiti6.0 安装出错 log4j:ERROR setFile(null,true) call failed.
由于要选择一款合适的流程引擎,需要在jbpm和Activiti之间做对比,我这边负责Activiti的测试. 看到Activiti官网(http://www.activiti.org/download ...
- 工作流学习——Activiti整体认识二步曲 (zhuan)
http://blog.csdn.net/zwk626542417/article/details/46594505 ***************************************** ...
- Activiti工作流的定义部署和执行
工作流引擎 个人觉得直接理解工作流引擎概念有点难度,我们可以先通过了解工作流引擎的职责再反过来理解工作流引擎,工作流引擎一般都做两件事情: 1.定义流程,也就是给我们提供某种规范来定义规则,以 ...
- Activiti - 新一代的开源BPM引擎
Activiti 背景简介.服务和功能介绍 背景介绍 Activiti 其核心是 BPMN 2.0 的流程引擎.BPMN 是目前被各 BPM 厂商广泛接受的 BPM 标准,全称为 Business P ...
- Activiti - 新一代的开源 BPM 引擎 (zhuan)
http://www.ibm.com/developerworks/cn/Java/j-lo-activiti1/ ****************************************** ...
- Activiti工作流学习之流程图应用详解
Activiti工作流学习之流程图应用详解 1.目的 了解Activiti工作流是怎样应用流程图的. 2.环境准备2.1.相关软件及版本 jdk版本:Jdk1.7及以上 IDE:eclipse ...
随机推荐
- 原生js绑定和解绑事件,兼容IE,FF,chrome
主要是最近项目中用到了原生的js 解绑和绑定 事件 然后今天研究了一下,其实问题不大,不过要注意不要把单词写错了,今天我就找了好久单词写错了. 需求:当鼠标移上去以后,给Select加载元素,接着解 ...
- 私人网盘系统2.0—全部升级为layUI+PHP(持续更新中)shang
网盘系统2.0 上周,我做了第一版的“私人网盘系统”,http://www.cnblogs.com/sunlizheng/p/7822036.html 没看过的朋友可以去看一下,这周在家升级做了第 ...
- shell的EOF用法
将命令输出的结果给一个循环处理,常用的方式如下: [root@etch171 guosong]# ls |while read line;do echo $line;done processlist ...
- org.xml.sax.SAXParseException; lineNumber: 2; columnNumber: 6; 不允许有匹配 "[xX][mM][lL]" 的处理指令目标。
Exception in thread "main" org.apache.ibatis.exceptions.PersistenceException: ### Error ...
- shell 备份脚本
[root@izwz9hmoz58gvtu0ldpm0iz ~]# cat /usr/local/aaaa/shell_script/Mysql_Dump_LJY.sh #! /bin/bash to ...
- Python For嵌套循环 图形打印X型 nested loop -练习题
For嵌套循环图形打印作业很多是C++语言做的,我觉得Python应该也能做,就来试一试. 原网址C++练习题:http://www.imooc.com/qadetail/216848?t=33880 ...
- 使用Javascript获取当前目录的绝对路径
转自http://heeroluo.net/Article/Detail/101 一谈到路径相关的问题,大家都会往window.location上想,确实这个对象提供了相当多的路径信息,其中常用的就包 ...
- websocket做手机页面聊天与PC页面聊天一对一的即时通讯
当时要写这个需求的时候,很头痛,手机端页面的客服功能,相当于QQ这样一个一对一聊天室功能了,瞬间蒙蔽的我也不知道用什么去写这个东西,一开始用ajax,定时器去写,写着写着发现这尼玛不在同一个页面怎么做 ...
- JavaEE中的MVC(四)AOP代理
咱们来吹牛,JDK的动态代理在AOP(Aspect Oriented Programming,面向切面编程)中被称为AOP代理,而AOP是Spring框架中的重要组成部分. 代理模式 但是什么是代理模 ...
- Apache服务器配置
之前做代码一直按照传统化的方法部署别人的网站,但是一直不成功,尝试了很多次最后才发现时虚拟主机的问题 使用apache默认为127.0.0.1和网站的配置发生冲突. 因此在apache的conf文件夹 ...