流程元素
功能
流程元素用于构建流程
"A Process is depicted as a graph of Flow Elements, which are a set of Activities, Events, Gateways, and Sequence Flows that define finite execution semantics."
“一个流程被描绘成一个由流程元素构成的图,这些流程元素包括一组活动、事件、网关和顺序流,它们共同定义了有限的执行语义。”
一个Web3的农民进行流动性挖矿,可能会按顺序执行以下步骤
开始->检查资金和市场价格->计算交易量->购买配对代币->添加DEX流动性->协议质押LP代币->完成
因此,挖矿流程可以建模如下图:
1 流程对象
2 开始事件
3 后继链
4 网关
5 计算
6 请求
7 结束事件

分类

说明
- 事件:负责流程Trigger的产生、传递、和销毁
- 网关:负责Trigger流动路径的选择控制
- 动作:负责单一行动的逻辑效果
- 流程链:负责连接组件,表达前后执行顺序(后继链)、容器操作(容器操作链)和数据对象传输(状态链)
:::[提示]
流程步骤和流程链既可以用于流程实例组装,也可以用于流程块组装,使用方法完全一致
:::
流程语法
- 所有流程步骤只能放置在流程单元对象内
- 一个流程只能以开始事件起、以结束事件止
- 流程内有且仅有1个开始,至少1个结束
- 在开始和结束之间,其它的组件在流程组装中没有先后顺序的语法限制,只要按逻辑顺序需要和各个组件的语法要求以后继链连接即可
流程运行机制
流程运行由Trigger驱动,运行机制如下
- Trigger由开始事件(主动或被动触发而)创建并出发沿后继链流动
- Trigger抵达任意流程步骤对象会触发其运行,运行完成后继续沿后继链流动
- 只要Trigger抵达任意一个结束事件就会被销毁,于是整个流程本次执行结束
- 当Trigger抵达子流程时会暂停流动,并触发该子流程开始事件产生内部Trigger,并于子流程Trigger全部抵达结束事件被销毁之后,继续沿后继链流动
模拟运行结束时不一定所有的Trigger都被销毁,可能因为建模逻辑有些Trigger在模拟完成后仍残留在流程中,在控制中心的输出信息窗口可以查看信息,这并不意味着模型一定存在Bug。
流程的并行分叉
多后继分支和相容网关都会产生流程并行分叉
-
多后继分支
流程中一个非互斥网关组件以多条后继链连接组件时会产生多后继并行分叉
-
分叉开始
出现并行分叉时,流程Trigger将被"分"为多份"子Trigger"同时沿各条后继链流动,因此会触发这些后继链连接的组件并行的运行
-
分叉结束
使用同步网关"合流"分叉后,各分叉子Trigger销毁,原有Trigger继续向后流动
- 没有正确的使用同步网关"合流"分叉,将导致运行错误。
- 当互斥网关具有多条后继分支时,由于任意Trigger只会走其后多分支的一条,因此虽然外观上多条分支,但不是并行分叉,也就无需使用同步网关,详见网关章节。
对初值为0的Count变量的+1计算在流程的2个分叉并行执行,最终合流后结束。
- 流程元素既可以用于流程实例组装,也可以用于流程块(定义)组装,使用方法完全一致
动作步骤的计算

- 动作前计算:你可以在一个商品交换(资源操作)的动作前计算好交易量和交易手续费
- 动作后计算:交换成功后更新最新价格
- HoloMind 中所有的公式栏公式输入方法相同,详见计算组件
流程动作的数据输出
-
部分动作组件会输出动作结果数据,如请求 组件会输出找到的目标实体、移动组件会输出本次移动的距离和角度变化量等,详见相应组件
-
输出的数据可在本组件动作后计算中使用"
This.output_key_name"形式,或本流程后续对象的任意公式中使用"process_step_name.output_key_name"访问到
显然,一个流程动作对象的输出,只能在动作后被访问,因为当它还没动作也就没有动作输出,则其前序组件无法得到输出结果。
-
所有组件的输出都不能被修改
-
寄存机制 流程动作组件输出数据与Trigger绑定。当一个流程内同时有多个Trigger流动时,系统通过寄存机制来保证流程中前序动作的数据输出能够被后续组件计算正确的访问,这与流程临时变量的寄存机制完全相同。
-
流程的数据传递详见相关章节
构建流程建模操作
将组件放入流程单元
- 流程处于展开状态时可以直接拖放流程步骤或数据组件到流程内画布,此时边框会高亮代表可以放入

- 或者进入目标流程单元的画布,直接将流程步骤拖放到画布上

从当前组件连接另一个已有组件
- 鼠标悬停在起点组件上时,在其周围将出现“+”出发点如下图

- 鼠标左键点击任意出发点不松,此时任意合法目的组件的锚点会亮起,如下图,拖动到目标锚点后松开鼠标会完成连接

更换链类型
连接完成后,如果链不是你希望的类型,你可以在鼠标右键菜单中选择你需要的类型,如下图
当前 HoloMind 中任意两种组件对象间可连接的链类型是唯一的,所以不需要更换链类型。

从当前组件直接生成下一个组件
- 鼠标悬停在起点组件上时,在其周围将出现“+”出发点
- 单击任意出发点将弹出下一个组件的选择盘,如下 图

:::[提示] 系统自动弹出的组件选择盘中按流程建模语法列出了基于当前起点组件的、所有可能的下一个组件 :::
- 在组件盘中挑选需要的下一个组件后点击,系统将以后继链连接好目标组件,如下图,选择好位置后再次单击鼠标即可完成

在已连接的2个组件间插入一个新的组件
- 从后继链的样式控制条中点击添加组件按钮,将弹出组件选择盘,如下图

- 在组件盘中挑选需要的下一个组件后点击即可完成,如下图
