网站首页 > 技术文章 正文
一、前言
启动事件是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{
//重写委托的提交方法
@Override
public 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{
//重写委托的提交方法
@Override
public void execute(DelegateExecution execution) throws Exception {
//receiveTaskprocess
System.out.println("ErrorTestRunningTask is running!");
}
}
?
?
下一篇文章将介绍activiti的结束事件
后续文章计划:
1、开始事件
2、结束事件
3、顺序流
4、用户任务
5、排他网关
6、监听器
7、多实例
8、子流程
9、边界与中间事件
猜你喜欢
- 2024-11-15 在 Spring Boot 项目中使用 activiti
- 2024-11-15 开箱即用-activiti流程引擎(active 流程引擎)
- 2024-11-15 在springBoot项目中整合使用activiti
- 2024-11-15 activiti中的网关是干什么的?(activiti包含网关)
- 2024-11-15 SpringBoot集成工作流Activiti(完整源码和配套文档)
- 2024-11-15 Activiti工作流介绍及使用(activiti工作流会签)
- 2024-11-15 SpringBoot集成工作流Activiti(实际项目演示)
- 2024-11-15 activiti工作流引擎(activiti工作流引擎怎么用)
- 2024-11-15 工作流Activiti初体验及在数据库中生成的表
- 2024-11-15 Activiti工作流浅析(activiti6.0工作流引擎深度解析)
你 发表评论:
欢迎- 最近发表
-
- 在 Spring Boot 项目中使用 activiti
- 开箱即用-activiti流程引擎(active 流程引擎)
- 在springBoot项目中整合使用activiti
- activiti中的网关是干什么的?(activiti包含网关)
- SpringBoot集成工作流Activiti(完整源码和配套文档)
- Activiti工作流介绍及使用(activiti工作流会签)
- SpringBoot集成工作流Activiti(实际项目演示)
- activiti工作流引擎(activiti工作流引擎怎么用)
- 工作流Activiti初体验及在数据库中生成的表
- Activiti工作流浅析(activiti6.0工作流引擎深度解析)
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)