前页 | 后页 |
讯息事件
在正常顺序流中使用时,“消息事件”可用于发送或接收消息。
- 向参与者发送消息时,将复制所有属性参数的值。发送消息后,令牌将继续沿顺序流
- 接收到消息时,事件将在接收到消息时触发。
创建BPMN模型
序列
池1
- 令牌从StartEvent1开始
- 收到令牌后,发件人(引发中间消息事件)将创建一条消息,并将当前属性值复制到该消息中
- 发件人将消息发送给“收件人”参与者(Pool2,StartEvent2)
- 发送方将令牌沿其顺序流转发到接收方
- 令牌等待接收者,直到消息到达
泳池2
- StartEvent2收到消息并启动令牌
- StartEvent2复制消息中的值并将其设置在令牌中
- StartEvent2沿其顺序流转发令牌,直到EndEvent3
- EndEvent3创建一条消息并将当前属性值复制到该消息
- EndEvent3将消息发送给“收件人”参与者(Pool1,Receiver)
池1继续
- 等待中的接收器被唤醒,并且属性值从到达的消息中更新
创建图
- 创建BPMN 2.0协作图
- 选择选项“在新的CollaborationModel中创建此图”
- 通过将“ Pool”图标从“工具箱”拖到图表上来创建Pool1和Pool2
在池1内
- 创建类型为“ None”的启动事件,名为StartEvent1
- 将序列流添加到“投掷消息”类型的目标中间事件,称为发送者
- 将序列流添加到“抽象”类型的目标活动,称为活动1
- 将序列流添加到目标:
-类型为“无”的结束事件,称为EndEvent1
-类型为“无”的结束事件,称为EndEvent2
在池2内
- 创建类型为“消息”的开始事件,称为StartEvent2
- 将序列流添加到类型为“抽象”的目标活动中,称为活动2
- 将序列流添加到类型为“ Exclusive”的目标网关,称为Gateway2
- 将序列流添加到目标:
-类型为“抽象”的活动 ,称为Activity3
-类型为“抽象”的活动 ,称为Activity4
- 将来自Activity3和Activity4的序列流添加到类型为“ Exclusive”的目标网关,称为Gateway3
- 将序列流添加到“消息”类型的结束事件,称为EndEvent3
消息流
- 将消息流从发件人添加到StartEvent2
- 将消息流从EndEvent3添加到Receiver
配置BPSim
为了显示消息流携带值的能力,我们创建了一个属性参数“ M1”,并在每个活动中更改其值。然后,我们将'M1'的值用作序列流条件的表达式的一部分。
任务 |
描述 |
---|---|
创建工件和包装 |
|
物业价值 |
我们将在StartEvent1处给属性参数'M1'初始值为10。然后,当令牌流过流程时,我们将更改值,并将值复制到参与者之间。 在对话框左侧的元素列表中:
提示: {PropertyName} 的格式 是 getProperty(“ PropertyName”) 的便捷缩写形式 。 |
控制参数 |
在此模拟中,我们只需要一个令牌即可评估模型的行为。
|
运行模拟
- 在“配置BPSim”对话框工具栏上,单击“运行”按钮。显示“ BPSim Simulation Controller”对话框
- 单击“运行”图标下拉箭头,然后选择“标准仿真”;模拟开始
- 模拟完成后,单击按钮;然后单击“ 。显示“属性参数值”对话框,在仿真过程中跟踪属性的值
- 在“令牌编号”字段中键入“ 0”,然后单击“查询”按钮和“按属性分组”选项卡
分析
由于将Activity1的“ ProcessingTime”设置为分布值,因此可以得出:
- 如预期的那样, Pool1.StartEvent1之后[Process1]的'M1'值为'10'
- * [Process2] Pool2.StartEvent2的'M1'值为'10';此值由Pool1.Sender发送的消息携带
- [过程2] Pool2.Activity2增加Process2.M1 10; [Process2.M1 == 20]
- [Process1] Pool1.Activity1将Process1.M1增加了100; [ Process1.M1 == 110]
- [Process2]对条件表达式求值;当'20> 15'时,令牌将流向Activity3 [Process2.M1 == 20]
- [过程2] Pool2.Activity3增加Process2.M1 10; [Process2.M1 == 30]
- [Process1] Pool1.Receiver已到达并正在等待[Process1.M1 == 110]
- [Process2] Pool2.Gateway3充当Merge节点并继续到EndEvent3 [Process2.M1 == 30]
- * [Process1] Pool1.Receiver被一条消息唤醒(携带M1 == 30 ), Process1.M1的值从110变为30
- [Process1]对条件表达式求值;当'30 <50'时,令牌将流向EndEvent2 [Process1.M1 == 30]
笔记
- 标有星号(*)的行是消息流的效果
- 定义了流程中的顺序;但是,两个过程之间的顺序并不总是可预测的
- Throwing Message Event派生另一个进程。捕获消息充当线程同步