一、前言

启动事件是Activiti活动的开始节点。现在有很多国产的工作流是省略了开始和结束这两个节点的。但是BPMBN 2.0标准是必须要有开始和结束节点的。启动事件表示流程的开始。

定义了流程如何被启动的启动事件类型(当收到消息、特定的时是以一个小图标来形象表示事件的。

在 XML 表示中,类型是由子元素的声明给出的。启动事件总是捕获型的:从概念上讲,该事件(任何时候) 会一直等待直到触发发生。

二、启动事件的类型有哪些?

(1)空启动事件(None Satrt Event)

(2)定时启动事件(Timer Satrt Event)

(3)信号事件(Signal Start Event)

(4)消息事件(Message Start Event)

(5)异常事件(Error Start Event)

三、各启动类型的特点

3.1、空启动事件

空启动事件就是一个圆圈。在工作流里面使用的非常多。但是空启动事件必须要人工去启动一个流程。

空启动事件是建立在部署完成的流程上面的。每启动一次,就会产生一个新的流程实例。

<startEventid="start"name="my start event"/> 

注意:空启动事件上可以设置关联表单、流程发起人、执行监听器;也可以在空启动事件上定义表单属性

空启动事件比较简单,一般不会进行太多设置

3.2、定时启动事件

定时启动事件是一个时钟图标,注意的是,这个时钟图标是比较少圆圈的,要跟定时边界事件区分清楚。

定时器启动事件用于在给定的时间点创建流程实例。

它可以用在只启动一次的流程中,也可以用在特定时间间隔下启动。如果是有重复执行的,流程在周期内都有效,可以重复利用的流程。

注意:子流程中不能使用定时器启动事件。 定时器是从流程部署开始计时,不需要去启动流程。

3.3、信号事件(Signal Start Event)

信号启动事件,使用具名信号启动流程实例。这个信号可以由流程实例中的信号抛出中间事件(intermediary signal throw event),或
者API(runtimeService.signalEventReceivedXXX方法)触发。这些情况下,所有拥有相同名字信号启动事件的流程定义都会被启动。
请注意这些情况下,都可以选择异步还是同步启动流程实例。
需要为API传递的 signalName ,是由 signal 元素的 name 属性决定的名字。 signal 元素被 signalEventDefinition 的 signalRef
属性所引用。

信号启动事件的两种启动方式:

1、信号可以是流程实例中抛出的信号事件

2、API触发

信号事件的执行方式:

1、异步执行

2、同步执行

注意:信号启动事件,是所有相同名称的信号事件都会被执行!

List<Execution> executions =  execution.getEngineServices().getRuntimeService().createExecutionQuery().signalEventSubscriptionName("singal").list();for(Execution e:executions){execution.getEngineServices().getRuntimeService().signalEventReceived("singal", e.getId());}

 3.4、消息事件(Message Start Event )

启动方式:

1、流程实例中的信号抛出事件

2、API触发(runtimeService.signalEventReceivedXXX方法)触发

注意事项:

1)流程的消息名称必须是唯一的,一个流程定义不得包含多个同名的启动消息。否则部署流程的时候就会抛异常。

2)消息启动事件,在所有部署的流程里面必须要唯一,否则也会抛异常。

3)直接启动消息定义事件,会当作一个普通启动事件执行。

4)新版本发布,会取消上一版本的消息订阅。

5)启动流程实例的三种方法:

ProcessInstance startProcessInstanceByMessage(String messageName);ProcessInstance startProcessInstanceByMessage(String messageName, Map<String, Object> processVariables);ProcessInstance startProcessInstanceByMessage(String messageName, String businessKey, Map<String>, Object< processVariables>); 

3.5、异常事件(错误启动事件 Error Start Event )

BPMN2.0规定了错误开始事件只能使用在事件子流程(Event Sub-Process)中,该该事件不能使用在其他流程中,包括最高级流程(Top-Level Process)、嵌套子流程(Sub-Process)和调用子流程(Call Activity)。BPMN错误与Java异常不是一回事。事实上,这两者毫无共同点。BPMN错误事件是建模业务异常(business exceptions)的方式。

说明:

我们一共设计两个流程,一个是子流程事件,一个是主流程。当这个流程启动,便会启动主流程。主流程的Servertask便会抛出一个BpmnError的流程错误。这个流程错误会被Activiti引擎拦截到,然户触发子流程事件里面的错误启动事件。从而触发SubServertask这个Server任务。

<error id="myError" errorCode="error123" />
...
<process id="myProcess">
...
<endEvent id="myErrorEndEvent">
<errorEventDefinition errorRef="myError" />
</endEvent>

主流程的监听类:

import org.activiti.engine.delegate.BpmnError;import org.activiti.engine.delegate.DelegateExecution;import org.activiti.engine.delegate.JavaDelegate;public class TestRunningTask implements JavaDelegate{//重写委托的提交方法@Overridepublic void execute(DelegateExecution execution) throws Exception{System.out.println("TestRunningTask is running!");throw new BpmnError("MyErrorCode","myError");}}

子流程事件的监听类:

package light.mvc.workflow.serviceTask;import org.activiti.engine.delegate.DelegateExecution;import org.activiti.engine.delegate.JavaDelegate;public class ErrorTestRunningTask implements JavaDelegate{//重写委托的提交方法@Overridepublic void execute(DelegateExecution execution) throws Exception {//receiveTaskprocessSystem.out.println("ErrorTestRunningTask is running!");}}

工作流——启动事件(Start Event)相关推荐

  1. Activiti 中的 Start event(启动事件元素)介绍

    Start event(启动事件元素) 启动事件元素就是启动流程实例的,也就是发起一个流程的,是流程的起点.它可以配置的很简单,也可以很复杂. StartEvent:空启动事件.它的属性介绍如下: I ...

  2. mysql启动时自动启动event事件

    mysql定时执行-mysql event事件 2012年12月07日  ⁄ mysql基础语法  ⁄ 共 3221字 ⁄ 被围观 167 views+⁄ 发帖人:  admin 分别有liunx,j ...

  3. Flowable实战(一):启动事件与结束事件

    工作流只要是涉及到组织审批和审核的情况下基本都需要,Flowable作为一个工作流现在比较流行的框架,算是activiti框架的修正版,国外这种情况还蛮多的就是,就是原班人马走了然后另起一家,据说硅谷 ...

  4. mysql数据库什么是事件_MySQL数据库之mysql 事件(Event) 总结

    本文主要向大家介绍了MySQL数据库之mysql 事件(Event) 总结 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. 1 事件简介 事件(event)是MySQL在相应的时 ...

  5. python事件循环_简单了解一下事件循环(Event Loop)

    关于我 一个有思想的程序猿,终身学习实践者,目前在一个创业团队任team lead,技术栈涉及Android.Python.Java和Go,这个也是我们团队的主要技术栈. Github:https:/ ...

  6. java 自动启动监听_Spring Boot 启动事件和监听器,太强大了!

    大家都知道,在 Spring 框架中事件和监听无处不在,打通了 Spring 框架的任督二脉,事件和监听也是 Spring 框架必学的核心知识之一. 一般来说,我们很少会使用到应用程序事件,但我们也不 ...

  7. 面试率 90% 的JS事件循环Event Loop,看这篇就够了!! !

    面试率 90% 的JS事件循环Event Loop,看这篇就够了!! ! 事件循环(Event Loop)大家应该并不陌生,它是前端极其重要的基础知识.在平时的讨论或者面试中也是一个非常高频的话题. ...

  8. 在ASF根据事件(Event)下载SAR数据

    在ASF根据事件(Event)下载SAR数据 什么是事件搜索? 事件监测标准 地震 火山 使用事件搜索的具体步骤 开始事件搜索 事件列(左) 事件详细信息列(中) 文件列(右) 什么是事件搜索? 事件 ...

  9. springboot(入门后进阶)启动-事件-事件监控-系统参数

    Springboot进阶 启动springboot的三种方式 使用SpringApplication的静态方法run 特点:使用这种方式,配置属性使用外部application.properties属 ...

最新文章

  1. 【linux】top命令详解
  2. 栈与队列7——单调栈结构(进阶问题)
  3. java修改配置不重启,java运行时修改应用数据,通过jmx修改应用运行数据
  4. Groovy 设计模式 -- 借贷
  5. [JTA] Java事务api
  6. 槽函数会被执行多次的问题原因及解决方法
  7. 综述:编程语言的发展趋势及未来方向
  8. 力扣1025.除数博弈
  9. Selenium爬虫 -- 操控滚动条方法
  10. android软键盘控制
  11. Java获取本机ip地址的代码
  12. 支付宝支付对账单java_java下载支付宝对账单,实现与支付宝实收对账和日清日结对账...
  13. 计算机搜不到word了,电脑word找不到路径
  14. 初等函数的麦克劳林级数展开+逆函数的展开求法
  15. 丰巢取快递系统(一)
  16. 抖音吸粉_抖音上热门快速吸粉的6个方法,新手建议收藏看看
  17. 【用过的抢票软件汇总】
  18. Java 操作数据库插入失败原因
  19. php实现国外邮箱,发送电子邮件 · 国外PHP框架Nette官网教程 · 看云
  20. android博学谷实验报告,《Android项目实战-博学谷》我的模块

热门文章

  1. day67 ORM模型之高阶用法整理,聚合,分组查询以及F和Q用法,附练习题整理
  2. java 对象和类 教程_Java从入门到放弃教程三 --java的对象和类
  3. wireshark java_Wireshark使用
  4. Wireshark常用命令
  5. Python3全栈之面向对象基础
  6. 编译个性化的openwrt固件
  7. Scrum敏捷项目管理入门
  8. 什么是网关,网关的作用是什么?
  9. 项目实例:H3C端口镜像 (镜像单目的端口 镜像多目的端口)
  10. 市场调研报告-全球与中国广告创作软件市场现状及未来发展趋势