预订演示
前页 后页

信息事件

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

  • 向参与者发送消息时,复制所有属性参数的值;一旦发送消息,令牌将继续沿着序列流
  • 接收消息时,当收到消息时触发该事件。
这个例子展示了信息事件的特征。我们将首先创建 BPMN模型,然后配置运行并运行仿真。

创建 BPMN模型

MessageEvent Business Process Simulation in Sparx Systems Enterprise Architect

序列

池1

  • 令牌从 StartEvent1 开始
  • 收到令牌后,Sender(一个 Throwing Intermediate信息事件)创建一条消息并将当前属性值复制到该消息中
  • 发件人将消息发送给“收件人”参与者(Pool2,StartEvent2)
  • 发送者沿着它的序列流转发令牌,直到接收者
  • 令牌在 Receiver 处等待,直到消息到达

池2

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

池 1 续

  • 等待的 Receiver 被唤醒,属性值从到达的消息中更新

创建图表

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

池1内

  • 创建一个类型为“None”的开始事件,命名为StartEvent1
  • 向目标“Throwing信息”类型的中间事件添加一个序列流,称为Sender
  • 添加一个序列流到'abstract'类型的目标活动,称为Activity1
  • 将序列流添加到目标:
    - 类型为“无”的结束事件,称为EndEvent1
          - 类型为“无”的结束事件,称为EndEvent2

池2内

  • 创建一个“信息”类型的开始事件,称为StartEvent2
  • 添加一个序列流到'abstract'类型的目标活动,称为Activity2
  • 将一个序列流添加到“独占”类型的目标网关,称为Gateway2
  • 将序列流添加到目标:
    -“抽象”类型的活动,称为Activity3
          -“抽象”类型的活动,称为Activity4
  • Activity3Activity4中的序列流添加到“Exclusive”类型的目标网关,称为Gateway3
  • 在“信息”类型的结束事件中添加一个序列流,称为EndEvent3

信息流

  • 添加一个从SenderStartEvent2的信息流
  • EndEvent3中的信息流添加到Receiver

配置 BPSim

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

任务

描述

创建工件包

  • 打开配置 BPSim窗口('仿真>过程分析>进程>打开BPSim 管理器')
  • Browse.“事件/创建工件”字段中的“事件/创建按钮”并创建一个工件“消息事件-开始事件-中间事件-结束事件”的浏览器
  • 在“选择包”字段中选择包含模型的包
模型中的所有 BPMN 元素都加载到配置 BPSim模型中。

属性值

我们将在StartEvent1处为属性参数“M1”赋予初始值 10。然后我们在令牌流经流程时更改值,并且值在参与者之间复制。

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

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

提示: {PropertyName} 的格式是 getProperty("PropertyName") 的一种方便的缩写形式

控件参数

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

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

运行仿真

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

分析

由于Activity1的 'ProcessingTime' 被设置为分布值,结果是:

  • [Process1] 在Pool1.StartEvent1之后的 'M1' 值为 '10',正如预期的那样
  • *[Process2] Pool2.StartEvent2的 'M1' 值为 '10';此值来自Pool1.Sender发送的消息
现在实际上有两个'M1' - Process1.M1Process2.M1
  • [Process2] Pool2.Activity2增加Process2.M1 10; [进程2.M1 == 20]
  • 【Process1】 Pool1.Activity1增加Process1.M1 100; [过程1.M1 == 110]
  • [Process2] 评估条件表达式;当 '20 > 15' 时,令牌将流向Activity3 [Process2.M1 == 20]
  • [Process2] Pool2.Activity3增加Process2.M1 10; [进程2.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]

注记

  • 标有星号 (*) 的行是信息流的效果
  • 定义了流程中的顺序;然而,两个进程之间的顺序并不总是可预测的
  • 投掷信息事件分叉另一个进程;捕获信息用作线程同步