//老夫喜欢直接贴代码,直观易懂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之奇淫技巧一(自动完成首个任务)相关推荐

  1. Python奇淫技巧之自动登录哔哩哔哩

    点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 昔我往矣,杨柳依依.今我来思,雨雪 ...

  2. idea中常用的快捷键以及一些奇淫技巧 , 加快我们的开发效率

    idea中常用的快捷键以及一些奇淫技巧 , 加快我们的开发效率 !!! 知道类名查找你本地以的类 (你pom中依赖的类+你自己创建的类)------------- ctrl+shift+t 修改你创建 ...

  3. JavaScript奇淫技巧:按键精灵

    JavaScript奇淫技巧:按键精灵 按键精灵之类的自动化工具,可以解放双手,帮我们自动完成许多工作,在很多场景中,可以极大提升生产力. 本文将展示:用JavaScript实现一个"按键精 ...

  4. 【JavaScript】转载:JS高端奇淫技巧

    转自 : https://blog.csdn.net/github_38885296/article/details/91038735 感谢作者(流浪的狗和一坨屎)分享 众所周知, JavaScrip ...

  5. 引入flag.php文件,php文件自包含的奇淫技巧

    原标题:php文件自包含的奇淫技巧 前言 刷题的时候刚好看到一个比较厉害的phpinfo的利用姿势,原理不是很懂,题目来自百度杯12月第四场Blog进阶版 以下是writeup 解题过程 注册以后 发 ...

  6. 50个Pandas的奇淫技巧:一网打尽各种索引 iloc,loc,ix,iat,at…

    数据处理,也是风控非常重要的一个环节,甚至说是模型成败的关键环节.因此,娴熟简洁的数据处理技巧,是提高建模效率和建模质量的必要能力.这里开个专题,总结下Pandas的使用方法,方便大家,也方便自己查阅 ...

  7. JS高端奇淫技巧(持续更新)

    众所周知, JavaScript是一门很骚的语言, 写一句话有很多种表达方式, 语法怪异而风骚, 自由而散漫, 或许这就是JS成为最流行语言的原因吧. 本文收集了JS开发中常用的各种奇淫技巧, 一句话 ...

  8. 【数据库】MySQL奇淫技巧(基础篇)

    前言:由于mysql有很多很多"特殊的用法",在此成其为奇淫技巧,很多用法很冷门,虽然由常用命令拼起来的,但是不是十分常用.对待一些特殊需求查资料都不太描述,这是个很尬的问题,所以 ...

  9. 前端js奇淫技巧(一)

    很多前端只会谢谢页面,一让他们接触js,就非常害怕. 我想有的东西,你越害怕,就越要了解它,读懂它,就会发现它还有你不知道的那一面美好. 好的,直入主题,直接说说js相关的一些奇淫技巧. 一.运算相关 ...

  10. Qt奇淫技巧-使用QSharedMemory方式实现数据跨界面传输

    关于QSharedMemory相关的知识点在下面这个链接中! https://blog.csdn.net/qq78442761/article/details/81738155 这里使用QShared ...

最新文章

  1. ASP .NET Core Web Razor Pages系列教程三:自动生成Razor Pages (CRUD)
  2. P2051 中国象棋
  3. 红黑联盟c语言教程,1.1.2 C语言的特点
  4. Spark 2.2.0 文档中文版 Collaborative Filtering 协同过滤 JAVA推荐系统
  5. java常用的缓存_java 常用缓存 - 只对肉有感觉的个人空间 - OSCHINA - 中文开源技术交流社区...
  6. 外接显示器设置_如何为一台电脑设置两个显示器
  7. AC双链路冷备份详解及配置原理
  8. Spring的9种设计模式(一)
  9. java移位运算_Java 移位运算符
  10. Python网络爬虫《九》
  11. 光环JAVA_【- Light 计划 -】新建了一台Linux云服务器我该干嘛
  12. 射频遥控:固定码与学习码的区别
  13. android 反编译 jadx,jadx gui下载 jadx(Android反编译gui工具) v0.6.1 官方版 下载-脚本之家...
  14. JavaScript基础语法(VS Code)
  15. python:大球吃小球
  16. DSP28335与AD7606通过SPI的串行数据交互
  17. Mysql5.1安装与配置(win7-x64)
  18. Ubuntu18.04安装pcl教程以及踩坑记录
  19. java util包排序,利用stream sorted进行降序排序
  20. 基于tensorflow的mnist数据集手写字体分类level-1

热门文章

  1. 吴军老师的《计算之魂》部分重点摘要
  2. python编写视频播放器_python十几行代码实现简单播放器
  3. FreeSWITCH对接MRCP Server
  4. pr 快捷键自我需要总结
  5. 汽车车身修复技术【2】
  6. 【前端】Axios完全使用指南
  7. 小虎整合:电商浏览器插件工具常用的有哪些?在哪里可以找到?
  8. Excel-数据透视表快捷操作--数值占比汇总
  9. ibm tivoli_Tivoli Access Manager信任关联拦截器(TAI ++)
  10. 微信网页授权登录demo