第4章:绘制开始与结束事件:各类开始事件(无触发、消息、定时)规范
开始事件是流程的起点,决定流程在何种条件下被触发。BPMN 2.0 定义了多种开始事件类型,本章聚焦于三种最常用类型:无触发开始事件(None Start Event)、消息开始事件(Message Start Event)和定时开始事件(Timer Start Event)。掌握它们的适用场景与绘制规范,是从流程建模走向企业级可执行流程的第一步。
适用场景
| 开始事件类型 | 典型场景 | 示例 |
|---|---|---|
| 无触发开始事件 | 流程由用户手动启动,无外部消息或定时条件 | 员工发起请假申请;管理员执行数据清理作业 |
| 消息开始事件 | 流程需等待外部系统发送消息后启动 | 收到客户订单消息后启动订单处理流程 |
| 定时开始事件 | 流程按固定时间、周期或日历表达式触发 | 每天23:00自动执行库存盘点;每月1日生成报表 |
前置条件
- 无触发开始事件:已定义流程启动入口(如用户界面按钮、API调用点);无需外部依赖。
- 消息开始事件:已定义消息的载荷结构(XML Schema 或 JSON Schema);消息发送方已同意使用 BPMN 定义的格式;流程引擎已配置消息接收端点。
- 定时开始事件:已确认定时表达式(日期/时间/周期);流程服务器时钟同步且时区正确;定时器资源(如 Quartz 调度器)已启用。
操作步骤
-
创建开始事件节点:在画布上拖拽一个开始事件形状(圆形)。右键选择
设为开始事件(若建模工具支持)。 -
指定事件类型:双击圆形,在属性面板中设置
事件定义:- 无触发:选择
None或不设置任何事件定义。 - 消息触发:选择
Message,并绑定消息定义(选择已导入的消息结构或输入消息名称)。 - 定时触发:选择
Timer,并填写以下配置之一:
时间日期: 2025-12-31T23:59:00 周期: R3/2025-01-01T09:00:00/PT24H 持续时间: PT1H (流程创建后1小时启动) 表达式: 0 0 8 * * ? (每天8点,cron格式) - 无触发:选择
-
配置属性(可选但推荐):设置名称、文档、执行监听器等。消息开始事件建议勾选
异步以避免阻塞。 - 连接序列流:从开始事件拖出序列流箭头,连接到第一个活动节点。规范中开始事件应只有一个出向序列流。
输入输出物
| 物料 | 说明 |
|---|---|
| 输入 |
|
| 输出 |
|
责任边界
- 流程分析师:选择正确的开始事件类型,并确保与业务场景匹配;定义消息结构或定时节奏。
- 流程架构师:审核开始事件是否与集成方案(消息通道、ESB)一致;确认定时器不会与服务器负载冲突。
- 开发工程师:在流程引擎中配置消息接收端点或定时器调度器;实现消息转换(若需要)。
记录材料
以下为消息开始事件的 BPMN XML 片段(包含消息定义和开始事件声明):
<definitions id="ProcessDef_1" targetNamespace="http://bpmn.io/schema/bpmn">
<message id="OrderMessage" name="orderMsg" />
<process id="OrderProcess" isExecutable="true">
<startEvent id="StartEvent_1" name="收到新订单">
<messageEventDefinition messageRef="OrderMessage" />
</startEvent>
...
</process>
</definitions>
定时开始事件的 BPMN 片段(使用 ISO 8601 周期表达式):
<startEvent id="TimerStart_1" name="每日盘点">
<timerEventDefinition>
<timeCycle>R/P1D</timeCycle>
</timerEventDefinition>
</startEvent>
异常处理
常见异常与对策:
- 消息开始事件接收不到:检查消息通道名称是否匹配;确认流程引擎已订阅该消息;验证消息结构是否与定义一致(使用 Schema 校验)。
- 定时开始事件未触发:排查服务器时区配置;检查 cron 表达式是否准确;查看流程引擎日志是否有定时器初始化错误。
- 开始事件连接了多个序列流:BPMN 规范不允许开始事件有多个出向流(只能有一个)。需删除多余连线,或使用并行网关延迟分支。
- 无触发开始事件被误配置为消息类型:若用户期望手动启动却配置了消息监听,会导致流程无法被用户触发。务必在属性面板中清楚区分。
验收标准
完成本节点绘制后,需满足以下条件方可通过验收:
- 开始事件图标正确显示对应类型(无触发:空心圆 / 消息:圆内信封 / 定时:圆内时钟)。
- 消息开始事件已关联到有效的消息定义(在 BPMN 文件中存在
<message>定义,且 ID 匹配)。 - 定时开始事件的时间表达式能被流程引擎解析(建议在测试环境执行一次模拟验证)。
- 开始事件只有一条出向序列流。
- 在流程引擎部署测试中,可按预期方式触发流程:手动启动/消息发送/定时到达。