activiti之奇淫技巧一(自动完成首个任务)
//老夫喜欢直接贴代码,直观易懂public void onEvent(ActivitiEvent event) {//是否开启自动完成任务if (StringUtils.equals(PropertyUtil.get("flow.autoComplete","0"),"0")){return;}if (!(event instanceof ActivitiEntityEventImpl)) {return;}ActivitiEntityEventImpl activitiEntityEventImpl = (ActivitiEntityEventImpl) event;Object entity = activitiEntityEventImpl.getEntity();if (!(entity instanceof TaskEntity)) {return;}TaskEntity taskEntity = (TaskEntity) entity;try {switch (event.getType()) {case TASK_CREATED:logger.debug("create : {}", taskEntity.getId());this.onCreate(taskEntity);break;}} catch (Exception ex) {logger.error(ex.getMessage(), ex);}}public void onCreate(DelegateTask delegateTask) throws Exception {String initiatorId = Authentication.getAuthenticatedUserId();if (initiatorId == null) {return;}String assignee = delegateTask.getAssignee();if (assignee == null) {return;}if (!initiatorId.equals(assignee)) {return;}PvmActivity targetActivity = this.findFirstActivity(delegateTask.getProcessDefinitionId());logger.debug("targetActivity : {}", targetActivity);if (!targetActivity.getId().equals(delegateTask.getExecution().getCurrentActivityId())) {return;}logger.debug("auto complete first task : {}", delegateTask);for (IdentityLink identityLink : delegateTask.getCandidates()) {String userId = identityLink.getUserId();String groupId = identityLink.getGroupId();if (userId != null) {delegateTask.deleteCandidateUser(userId);}if (groupId != null) {delegateTask.deleteCandidateGroup(groupId);}}/* * * * 业务数据处理 * * * */delegateTask.getExecution().setVariableLocal("_ACTIVITI_SKIP_EXPRESSION_ENABLED", true);TaskDefinition taskDefinition = ((TaskEntity) delegateTask).getTaskDefinition();ExpressionManager expressionManager = Context.getProcessEngineConfiguration().getExpressionManager();Expression expression = expressionManager.createExpression("${_ACTIVITI_SKIP_EXPRESSION_ENABLED}");taskDefinition.setSkipExpression(expression);}/*** 获得第一个节点.*/public PvmActivity findFirstActivity(String processDefinitionId) {ProcessDefinitionEntity processDefinitionEntity = Context.getProcessEngineConfiguration().getProcessDefinitionCache().get(processDefinitionId);ActivityImpl startActivity = processDefinitionEntity.getInitial();if (startActivity.getOutgoingTransitions().size() != 1) {throw new IllegalStateException("start activity outgoing transitions cannot more than 1, now is : "+ startActivity.getOutgoingTransitions().size());}PvmTransition pvmTransition = startActivity.getOutgoingTransitions().get(0);PvmActivity targetActivity = pvmTransition.getDestination();if (!"userTask".equals(targetActivity.getProperty("type"))) {logger.debug("first activity is not userTask, just skip");return null;}return targetActivity;}public boolean isFailOnException() {return false;}
activiti之奇淫技巧一(自动完成首个任务)相关推荐
- Python奇淫技巧之自动登录哔哩哔哩
点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 昔我往矣,杨柳依依.今我来思,雨雪 ...
- idea中常用的快捷键以及一些奇淫技巧 , 加快我们的开发效率
idea中常用的快捷键以及一些奇淫技巧 , 加快我们的开发效率 !!! 知道类名查找你本地以的类 (你pom中依赖的类+你自己创建的类)------------- ctrl+shift+t 修改你创建 ...
- JavaScript奇淫技巧:按键精灵
JavaScript奇淫技巧:按键精灵 按键精灵之类的自动化工具,可以解放双手,帮我们自动完成许多工作,在很多场景中,可以极大提升生产力. 本文将展示:用JavaScript实现一个"按键精 ...
- 【JavaScript】转载:JS高端奇淫技巧
转自 : https://blog.csdn.net/github_38885296/article/details/91038735 感谢作者(流浪的狗和一坨屎)分享 众所周知, JavaScrip ...
- 引入flag.php文件,php文件自包含的奇淫技巧
原标题:php文件自包含的奇淫技巧 前言 刷题的时候刚好看到一个比较厉害的phpinfo的利用姿势,原理不是很懂,题目来自百度杯12月第四场Blog进阶版 以下是writeup 解题过程 注册以后 发 ...
- 50个Pandas的奇淫技巧:一网打尽各种索引 iloc,loc,ix,iat,at…
数据处理,也是风控非常重要的一个环节,甚至说是模型成败的关键环节.因此,娴熟简洁的数据处理技巧,是提高建模效率和建模质量的必要能力.这里开个专题,总结下Pandas的使用方法,方便大家,也方便自己查阅 ...
- JS高端奇淫技巧(持续更新)
众所周知, JavaScript是一门很骚的语言, 写一句话有很多种表达方式, 语法怪异而风骚, 自由而散漫, 或许这就是JS成为最流行语言的原因吧. 本文收集了JS开发中常用的各种奇淫技巧, 一句话 ...
- 【数据库】MySQL奇淫技巧(基础篇)
前言:由于mysql有很多很多"特殊的用法",在此成其为奇淫技巧,很多用法很冷门,虽然由常用命令拼起来的,但是不是十分常用.对待一些特殊需求查资料都不太描述,这是个很尬的问题,所以 ...
- 前端js奇淫技巧(一)
很多前端只会谢谢页面,一让他们接触js,就非常害怕. 我想有的东西,你越害怕,就越要了解它,读懂它,就会发现它还有你不知道的那一面美好. 好的,直入主题,直接说说js相关的一些奇淫技巧. 一.运算相关 ...
- Qt奇淫技巧-使用QSharedMemory方式实现数据跨界面传输
关于QSharedMemory相关的知识点在下面这个链接中! https://blog.csdn.net/qq78442761/article/details/81738155 这里使用QShared ...
最新文章
- ASP .NET Core Web Razor Pages系列教程三:自动生成Razor Pages (CRUD)
- P2051 中国象棋
- 红黑联盟c语言教程,1.1.2 C语言的特点
- Spark 2.2.0 文档中文版 Collaborative Filtering 协同过滤 JAVA推荐系统
- java常用的缓存_java 常用缓存 - 只对肉有感觉的个人空间 - OSCHINA - 中文开源技术交流社区...
- 外接显示器设置_如何为一台电脑设置两个显示器
- AC双链路冷备份详解及配置原理
- Spring的9种设计模式(一)
- java移位运算_Java 移位运算符
- Python网络爬虫《九》
- 光环JAVA_【- Light 计划 -】新建了一台Linux云服务器我该干嘛
- 射频遥控:固定码与学习码的区别
- android 反编译 jadx,jadx gui下载 jadx(Android反编译gui工具) v0.6.1 官方版 下载-脚本之家...
- JavaScript基础语法(VS Code)
- python:大球吃小球
- DSP28335与AD7606通过SPI的串行数据交互
- Mysql5.1安装与配置(win7-x64)
- Ubuntu18.04安装pcl教程以及踩坑记录
- java util包排序,利用stream sorted进行降序排序
- 基于tensorflow的mnist数据集手写字体分类level-1