1 事件分类:

事件位置分类:开始事件,结束事件,中间事件,边界事件。

事件特性分类:Catching事件和Throwing事件。

事件的定义

2 定时器事件定义:

<timerEventDefinition>

<timeDate>  :指定一个定时器触发的时间。

<timeDuration> :指定定时器激活后到定时器被运行的时间间隔。

<timeCycle>:指定定时器的重复间隔。timeCycle支持使用cron表达式设定重复间隔。

注一:使用ISO 8601格式日期时间。(同时表达日期和时间,需要在时间前加大写字母T:2017-06-30T10:23)

注二:完成corn表达式有7个域,以空格隔开。左至右为:秒,分,时,日,月,星期,年。其中年为可选项。

*  :表示允许使用该域的全部值。

?:只允许出现在第4个域(日期)和第六个域(星期),表示不关心该域的取值(两个域可能存在冲突)。

-  :表示范围,10-12表示10点到12点

, :表示一个域内并列多个值

/  :表示设置步长。

L :在第四个域,表示每月的最后一天。在第六给域,表示该星期的最后一天(周六)。另外如6L在第六个域,表示该月的最后一个星期5。

W:只能出现在第4个域,和其它值组合使用。15W :表示该月中与15号最接近的工作日。

#:只能出现在第六个域,表示改月的第几天。

>>>>还有很多,可在网上查找相关资料。

3 错误事件定义:

<errorEventDefinition>

<id> :该元素的唯一标识。

<name>:元素的名称。

<errorCode>:错误事件的编码,处理业务时抛出相应的异常代码,流程引擎会根据代码自动匹配到该error元素。

<structureRef>:结构引用属性。该属性引用公用的错误定义。

4 信号事件定义:

信号事件是一种引用了信号定义的事件,可以使用一个信号向全部的流程发送广播(流程定义使用了相同名称的信号)

<signalEventDefinition>

<id> :该元素的唯一标识。

<name>:元素的名称。

<structureRef>:结构引用属性。该属性引用公用的配置。

5 消息事件定义

<messageEventDefinition>

<id> :该元素的唯一标识。

<name>:元素的名称,使用runtimeService的messageEventReceived方法时传入该参数。

<itemRef>:指定该消息引用的itemDefinition元素。

6 取消事件定义:

<cancelEventDefinition>

7 补偿事件定义:

补偿机制:主要用于对已完成的流程作回退处理,因为这些流程的结果有可能不是所希望的,且希望能回退。

如果当前流程活动是激活状态的,则不能使用补偿机制,可以使用取消机制。

补偿事件:主要用于触发或者处理补偿机制。

<compensateEventDefinition>

<id>:元素Id

<waitForCompletion>:如果一个补偿事件被抛出,则该属性决定抛出的事件是否等待补偿完成。

<activitiRef>:在中间补偿事件的定义中设置该属性,则补偿只会针对指定的已完成的流程活动,

如果不指定该属性,则补偿会产生广播效果,即会触发全部符合条件的补偿事件。

流程事件:

一、开始事件(所有开始事件都是catching事件)

1 无指定开始事件: a、需要RuntimeService调用startProcessByXX启动。

b、子流程总会有一个无指定开始事件。

2 定时器开始事件:BPMN2.0规定:定时器开始事件可以使用在最高级流程和事件子流程中,不能在其它子流程中使用(嵌套子流程和调用子流程)

3 消息开始事件:使用RuntimeService的startProcessByMessage方法启动流程。消息事件定义引用的是message的Id,而startProcessByMessage

方法传入的参数是messag元素的name。

注:1> 全部流程定义,只能有一个引用了唯一消息的开始事件。

2> 如果一个流程有多个消息开始事件,则启动流程则由调用的API参数决定。

3> 如果一个流程既有消息开始事件,又有无指定开始事件,则在使用startProcessById或startProcessByKey时,将会使用无指定事件。

4> 如果一个流程中有多个消息开始事件,没有无指定开始事件,则在使用startProcessById或startProcessByKey时,将会抛异常。

5> 如果流程只有一个消息开始事件,则在使用startProcessById或startProcessByKey时,将会调用消息开始事件。

6> 如果被启动的流程是一个调用子流程且有多个开始事件,则该流程定义中除了含有消息开始事件,还需要有一个无指定的开始事件

或者该调用子流程中只有一个消息开始事件。

4 错误开始事件:BPMN2.0规定:错误开始事件只能使用在事件子流程中,不能使用在其它流程。

二、结束事件:

1 无指定结束事件

2 错误结束事件:当执行流到达错误结束事件时,会结束该执行流并抛出错误,该错误可以被错误边界事件捕获,

如果没有定义错误边界事件,则会被当做无指定错误事件执行。错误结束事件和错误边界事件需要一起使用才有意义。

错误结束事件触发错误边界事件,错误边界事件捕获错误结束事件抛出的错误信息。

3 取消结束事件和取消边界事件

取消结束事件只能使用在事务子流程中,表示事务将会取消,并且会触发依附在事务子流程上的取消边界事件。与错误结束事件相同,取消结束

事件会被抛出,而取消边界事件会捕获事件。除此之外,事务子流程的取消事件的触发,还会导致补偿的触发。在BPMN2.0中,对于已经完成的活动,

可以使用补偿机制,而对于活跃的活动,则不能使用补偿机制,而可以使用取消机制。当取消边界事件被触发,则会将当前的执行流中断,然后会同步

的进行补偿机制。取消边界事件在离开事件子流程前,会一直等待补偿的结束,当补偿结束后,执行流会从取消边界事件离开事务子流程。

三、边界事件:

边界事件是catching事件,当边界事件被触发,当前的活动会被中断,并且当前的顺序流会发生转移。

1 定时器边界事件:定时器边界事假是附属在流程活动中的事件,当流程到达流程活动时,定时器启动,当定时器边界事件触发后,

当前的活动会被中断,流程会从定时器边界事件离开流程活动。

:想让定时器工作,必须启动activiti的JobExecutor,当流程到达附有定时器边界事件的流程活动时,activiti会向ACT_RU_JOB表中加如数据,

JobExecutor会按照定时器边界事件设定的时间来执行工作。

engine.getProcessEngineConfiguration().getjobExecutor().start();

2 错误边界事件:使用在嵌入子流程或调用子流程中。

错误边界事假定义加入errorRef属性,拥有引用一个是错误,在使用错误引用时,需要注意:

1 不使用该属性,则错误边界事件将会捕获任何的错误事件,而不管抛出的errorCode。

2 如果使用该属性,则该边界事件只会捕获与该”error“一样的errorCode。

3 如果errorRef属性引用了一个不存在的”error“,则引用的字符串会被当作errorCode。如果JavaDelegate的实现类抛出的字符串

和其相同则触发边界事件,否则找不到对应的Catching边界事件,对应的错误边界事件将不会被触发。

3、信号边界事件

信号边界事件具有全局性。信号边界事件会进行全局性的捕获,不同的流程实例均会捕获。

信号边界事件和定时器边界事件相同,可以通过设置cancleActivity属性,true表示原来的执行流会被中断。false表示原来的执行流任然存在。

4 补偿边界事件

触发方式:

a> 事务子流程中,使用取消事务来触发补偿边界事件。

b> 补偿中间事假,去触发补偿边界事件。

四:中间事件:

1 定时器中间事件:需要启动JobExecutor 。

2 信号中间Catching事件:多个引用了相同信号的事件或不同的流程实例,这些事件或流程实例均会被触发。

3 信号中间Throwing事件:(默认为false,为同步事件)

同步事件(默认):抛出信号时,捕获信号的catching事件将会在同一个事务中完成各自的工作,如果其一个信号catching事件

出现异常,则全部的信号事件均会失败。

异步事件:在信号事件定义元素(signalEventDefinition),设置activiti:async属性值为true。

表示单一的catching事件失败,不会影响其他已成功的事件。

4 消息中间事件: (activiti只对catching事件有实现)

使用RuntimeService的messageEventReceived方法发送消息,不同于信号事件,消息事件需要指定执行流。

5 无指定的中间事件:即一个Throwing事件。

6 补偿中间事件:补偿中间事件是一个Throwing事件。补偿中间事件主要用于触发当前所在执行流的全部补偿Catching事件(补偿边界事件)。

1 补偿执行次数:

如果补偿中间事件被触发,会触发当前的执行流的补偿事件。补偿的执行次数和对应的流程活动执行次数相等。

2 补偿执行范围:

附有补偿边界事件流程活动完成后,这个补偿边界事件的信息会保存到ACT_RU_SUBSCR表中,该事件描述数据的执行流ID表示

的为主流程的ID(ACR_RU_EXECUTION表中的IS_SCOPE_字段为1的执行流),执行流到达补偿中间事件时,会根据该事件所处的

执行流ID到ACT_RU_EVENT_SUBSCR表中查询,如果能查到相应补偿事件的描述,就会触发这些补偿事件,否则不会触发。如果在

没有子流程的情况下,触发补偿的中间事件所处的执行流,要与需要补偿的活动所在的执行流一致,才会触发补偿事件。

摘自疯狂的workflow,基于activiti工作流开发

activiti的流程事件相关推荐

  1. activiti 流程事件触发trigger

    增加流程事件触发节点: someTask触发查询出执行对象,通过执行对象ID, trigger完成流程;

  2. agilebpm脑图_干货基于SpringBoot2开发的Activiti引擎流程管理项目脚手架

    干货基于SpringBoot2开发的Activiti引擎流程管理项目脚手架 [干货]基于SpringBoot2开发的Activiti引擎流程管理项目脚手架 前言 在工作中,难免会遇到需要开发基于流程管 ...

  3. java中bpmn流程图_Java学习之BPMN知识以及Activiti的流程部署

    BPMN的介绍 Activiti项目是一项新的基于Apache许可的开源BPM平台,从基础开始构建,旨在提供支持新的BPMN 2.0标准,包括支持对象管理组(OMG),面对新技术的机遇,诸如互操作性和 ...

  4. Activiti工作流之事件监听详解-ActivitiEventListener

    工作流程事件监听可用于任务提醒.超时提醒等的模块的设计.以下是相关事件的介绍 一.事件监听类型 ENGINE_CREATED 监听器监听的流程引擎已经创建完毕,并准备好接受API调用. ENGINE_ ...

  5. Activiti中的事件监听

    工作流程事件监听可用于任务提醒.超时提醒等的模块的设计. 其默认的事件监听接口:org.activiti.engine.delegate.event.ActivitiEventListener 事件类 ...

  6. 基于Activiti的流程应用开发平台JSAAS-WF V5.3

    第1章 产品概述及体系架构 1.1.概述 红迅JSAAS-WF工作流平台V5是广州红迅软件有限公司面向合作伙伴以及有IT运维团队中大型企业提供新一代的流程管理产品,它基于流行的JAVA开源技术上构建, ...

  7. Activiti——管理流程定义(四)

    Activiti--管理流程定义 1.设计流程定义文档 1.1.流程图 1.2.bpmn文件 <?xml version="1.0" encoding="UTF-8 ...

  8. Activiti——工作流程-核心API(二)

    .1 ProcessEngine 说明: 1) 在Activiti中最核心的类,其他的类都是由他而来. 2) 产生方式: 在前面看到了两种创建ProcessEngine(流程引擎)的方式(http:/ ...

  9. java工作流引擎Jflow流程事件和流程节点事件设置

    流程实例的引入和设置 关键词: 开源工作流引擎  Java工作流开发  .net开源工作流引擎   流程事件 工作流节点事件 应用场景: 在一些复杂的业务逻辑流程中需要在某个节点或者是流程结束后做一些 ...

最新文章

  1. @RequestParam加与不加的区别
  2. 独家 | 在浏览器中使用TensorFlow.js和Python构建机器学习模型(附代码)
  3. 免费使用《Autorun病毒防御者》
  4. SpiderData 2019年2月13日 DApp数据排行榜
  5. 解决IDEA中,maven依赖不自动补全的问题
  6. Cannot input a tensor of dimension other than 0 as a scalar argument
  7. 删除Add-On表字段后不能激活
  8. 概率图模型中信念传播
  9. 小米用户画像_企鹅智库:高学历用苹果中老年用华为 男性用小米女性用OV
  10. [CentOS] 打造vim环境
  11. Python入门教程实战,用Python做一个有趣的拿石子游戏
  12. 如何防止用户重复提交数据
  13. PPT母版和PPT模板
  14. 证明:凸多边形裁剪一次最多能够新增一个凸多边形
  15. Centos7 Samba Win10配置解决问题【全攻略】:你没有权限访问,请与管理员联系。。。
  16. css画心形原理,CSS画心形的三种方法
  17. 抖音直播流实时下载附源码
  18. Win32之ShowWindow
  19. 史上最难oracle数据库练习题(附答案)
  20. #Wormhole# (开源)流式处理平台设计思想

热门文章

  1. 做个全栈工程师真的好吗?
  2. php 多图片/文件上传
  3. 全网通工业级3G/4G无线路由器
  4. 解决-Dmaven.multiModuleProjectDirectory system property is not set
  5. found dwarf version #039;4#039; linux,开发一个Linux调试器(四):Elves和dwarves
  6. codeforces 1064 E. Dwarves, Hats and Extrasensory Abilities (交互题,二分)
  7. 60个必备NOIP模板 python算法模板
  8. java从零到项目实战(八)
  9. 使用FFMPEG制作gif图片
  10. Chia官方:有关Chia官方矿池的重要解读,费率更加透明,爆块更稳定