前页 后页

讯息事件

在正常顺序流中使用时,“消息事件”可用于发送或接收消息。

  • 向参与者发送消息时,将复制所有属性参数的值。发送消息后,令牌将继续沿顺序流
  • 接收到消息时,事件将在接收到消息时触发。
本示例演示了消息事件功能。我们将首先创建BPMN模型,然后配置BPSim并运行仿真。

创建BPMN模型

MessageEvent Business Process Simulation in Sparx Systems Enterprise Architect

序列

池1

  • 令牌从StartEvent1开始
  • 收到令牌后,发件人(引发中间消息事件)将创建一条消息,并将当前属性值复制到该消息中
  • 发件人将消息发送给“收件人”参与者(Pool2,StartEvent2)
  • 发送方将令牌沿其顺序流转发到接收方
  • 令牌等待接收者,直到消息到达

泳池2

  • StartEvent2收到消息并启动令牌
  • StartEvent2复制消息中的值并将其设置在令牌中
  • StartEvent2沿其顺序流转发令牌,直到EndEvent3
  • EndEvent3创建一条消息并将当前属性值复制到该消息
  • EndEvent3将消息发送给“收件人”参与者(Pool1,Receiver)

池1继续

  • 等待中的接收器被唤醒,并且属性值从到达的消息中更新

创建图

  • 创建BPMN 2.0协作图
  • 选择选项“在新的CollaborationModel中创建此图”
  • 通过将“ Pool”图标从“工具箱”拖到图表上来创建Pool1Pool2

在池1内

  • 创建类型为“ None”的启动事件,名为StartEvent1
  • 将序列流添加到“投掷消息”类型的目标中间事件,称为发送者
  • 将序列流添加到“抽象”类型的目标活动,称为活动1
  • 将序列流添加到目标:
    -类型为“无”的结束事件,称为EndEvent1
          -类型为“无”的结束事件,称为EndEvent2

在池2内

  • 创建类型为“消息”的开始事件,称为StartEvent2
  • 将序列流添加到类型为“抽象”的目标活动中,称为活动2
  • 将序列流添加到类型为“ Exclusive”的目标网关,称为Gateway2
  • 将序列流添加到目标:
    -类型为“抽象”的活动 ,称为Activity3
          -类型为“抽象”的活动 ,称为Activity4
  • 将来自Activity3Activity4的序列流添加到类型为“ Exclusive”的目标网关,称为Gateway3
  • 将序列流添加到“消息”类型的结束事件,称为EndEvent3

消息流

  • 将消息流从发件人添加到StartEvent2
  • 将消息流从EndEvent3添加到Receiver

配置BPSim

为了显示消息流携带值的能力,我们创建了一个属性参数“ M1”,并在每个活动中更改其值。然后,我们将'M1'的值用作序列流条件的表达式的一部分。

任务

描述

创建工件和包装

  • 打开“配置BPSim”窗口(“模拟>过程分析> BPSim>打开BPSim Manager”)
  • 单击“选择/创建工件”字段中的Browse.按钮,然后创建一个名为“ MessageEvent-StartEvent-IntermediateEvent-EndEvent”的工件
  • 在“选择软件包”字段中,选择包含模型的软件包
该模型中的所有BPMN元素都被加载到Configure BPSim窗口中。

物业价值

我们将在StartEvent1处给属性参数'M1'初始值为10。然后,当令牌流过流程时,我们将更改值,并将值复制到参与者之间。

在对话框左侧的元素列表中:

  • 展开“ StartEvent”组,单击StartEvent1并在“属性”选项卡上,然后用“ M1”改写“ 新属性 ”;在“值”字段中,单击Browse.按钮,然后选择“常数”和“数值”,然后在“常数数值”字段中键入“ 10”
  • 展开“活动”组中,单击活动1和“属性”选项卡上,并与“M1”改写的新属性 ;在“值”字段中,单击Browse.按钮,然后选择“表达式”,然后在“表达式”字段中键入“ {M1} + 100”
  • 单击Activity2并在“属性”选项卡上,然后用“ M1”改写“ 新属性 ”;在“值”字段中,单击Browse.按钮并选择“表达式”,然后在“表达式”字段中键入“ {M1} + 10”
  • 单击Activity3并在“属性”选项卡上,然后用“ M1”改写“ 新属性 ”;在“值”字段中,单击Browse.按钮并选择“表达式”,然后在“表达式”字段中键入“ {M1} + 10”
  • 单击Activity4,然后在“属性”选项卡上,然后用“ M1”覆盖新属性 ;在“值”字段中,单击Browse.按钮,然后选择“表达式”,然后在“表达式”字段中键入“ {M1} + 1”

提示: {PropertyName} 的格式 getProperty(“ PropertyName”) 的便捷缩写形式

控制参数

在此模拟中,我们只需要一个令牌即可评估模型的行为。

  • 在展开的“ StartEvent”组中,单击StartEvent1和“ Control”选项卡;单击“新参数”下拉箭头,然后选择“触发计数”,然后键入“值”为“ 1”
现在设置网关的传出序列流的条件。在对话框左侧的元素列表中,展开“网关”组:
  • 展开Gateway1 ,单击EndEvent1并在“控件”选项卡上,然后单击“新参数”下拉箭头并选择“条件”;在“值”字段中,单击Browse.按钮,然后选择“表达式”,然后在“表达式”字段中键入“ {M1}> = 50”
  • 单击EndEvent2并在“控件”选项卡上,然后单击“新参数”下拉箭头并选择“条件”;在“值”字段中,单击Browse.按钮,然后选择“表达式”,然后在“表达式”字段中键入“ {M1} <50”
  • 展开Gateway2 ,单击Activity3并在“控件”选项卡上,然后单击“新参数”下拉箭头并选择“条件”;在“值”字段中,单击Browse.按钮并选择“表达式”,然后在“表达式”字段中键入“ {M1}> = 15”
  • 单击Activity4并在“控件”选项卡上,然后单击“新参数”下拉箭头并选择“条件”;在“值”字段中,单击Browse.按钮并选择“表达式”,然后在“表达式”字段中键入“ {M1} <15”

运行模拟

  • 在“配置BPSim”对话框工具栏上,单击“运行”按钮。显示“ BPSim Simulation Controller”对话框
  • 单击“运行”图标下拉箭头,然后选择“标准仿真”;模拟开始
  • 模拟完成后,单击按钮;然后单击“ 。显示“属性参数值”对话框,在仿真过程中跟踪属性的值
  • 在“令牌编号”字段中键入“ 0”,然后单击“查询”按钮和“按属性分组”选项卡

分析

由于将Activity1的“ ProcessingTime”设置为分布值,因此可以得出:

  • 如预期的那样, Pool1.StartEvent1之后[Process1]的'M1'值为'10'
  • * [Process2] Pool2.StartEvent2的'M1'值为'10';此值由Pool1.Sender发送的消息携带
现在居然有两个“M1的- Process1.M1Process2.M1
  • [过程2] Pool2.Activity2增加Process2.M1 10; [Process2.M1 == 20]
  • [Process1] Pool1.Activity1Process1.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派生另一个进程。捕获消息充当线程同步