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