流程接口及数据传递
为什么使用接口?
- 流程建模时合理利用数据接口能实现解耦,使逻辑更清,就像编程时定义带有形参的函数或方法,能提高搭建和阅读模型的效率
- 被调用者只需定义好传入数据的格式,调用者只需要按要求传入正确格式的数据,双方建模都无需关心对方逻辑
如何为流程设置接口?
-
创建接口
-
外观样式
设置接口后,所在流程边框外部和调用对象(调用组件或请求调用组件)外部会出现相应端口,用于传递数据
提示可能你想明显区分不同端口的样式,你可以(在数据对象的样式控制条中)设置该接口数据对象的颜色,则对应的端口会保持相同颜色。
-
数据类型
接口决定了传递数据的类型,从端口传入的数据类型必须一致
接口有几种?
流程内如何使用接口?
-
从接口读取数据
流程中的任意表达式中直接使用接口名字即可,如"
some_variable = interface_name * 2" -
输出数据到接口
流程中的任意计算公式中,等号左边使用接口名时,表达将等号右边的表达式计算结果赋值到接口对象上,如 "
interface_name = some_expression" -
对接口进行资源操作
Go流程调用了to Trade被动流程,对WalletA和Pool容器以ExchangeRate进行$USDC和$ETH代币的交换
- to Trade流程设置了
ExchangeRate变量接口和WalletIn资源接口,所以在Go流程中Ask对象传递了对应的变量和资源到相应 端口
如何传递数据到端口?
为端口传递数据有两种方式
状态链传入数据对象
用状态链连接相同数据格式的数据对象或其引用到端口即可,表示将传入数据对象本身

- 灰色被动流程Plus10负责将
OutNum接口赋值为InNum接口+10 - 绿色流程传入了 名为Number初值为0的变量到
InNum端口,名为Output的变量传递到OutNum端口 - 最终运行结果变量
OutPut=10
状态链传入数据对象与读取还是写入无关,这仅仅取决于你在流程内如何使用。
以上模型中,Number变量传入Plus10流程后,在计算组件中仅仅读取了它的值,可以理解为"读取";而OutPut变量传入后,计算组件进行了结果赋值,可以理解为"写入",所以最终OutPut变量可以看到调用后的计算结果。
传入值
-
为端口传入表达式的取值
-
在端口所属对象 属性面板的参数传入输入框中填写表达式

-
该输入框接受能够返回接口要求Number格式的表达式
- 灰色被动流程Plus10将
OutNum接口赋值为InNum接口+10 - 蓝色流程传入表达式"
Number"运算的值到InNum端口,并在Call组件的动作后计算给出了公式OutPut = This.OutNum将OutNum端口的值赋给变量OutPut - 最终运行结果 变量
Output值为10
两种方式的区别
-
性质不同,效果不同
-
状态链对象传入:传入的是对象本身,被调用流程内任意位置计算修改接口都针对 对象本身
-
取值传入:传入的是值,具体说是在流程被触发时表达式的取值,并赋予接口对象。类似于Python给函数形参传值。被调用流程内任意位置计算修改接口仅针对接口对象。
-
需要传递的变量名为V,以上述状态链和取值两种方式传递数据时
- 如果V的格式为简单类型,那么在被调用流程内多处读取接口时,前者获得V的实时最新值,后者获得是流程刚被调用时V的值;写入该接口时,前者会写入V,后者不会
- 如果V的格式为Dict或Set复杂变量,那么在被调用流程内多处读取接口时,二者都会获得最新值,修改接口时二者都会改写V。但覆盖接口时,前者会覆盖V,后者不会
- 这是由复杂数据类型本身的特点与简单类型不同造成的
-
系统优先识别状态链对象传入方式
-
对容器端口,只能采用状态链连接容器对象的传入方式
一个初值为0的变量InputNumber,将在第2Tick被紫色流程改为10
灰色流程被调用时将推迟2Tick后将NumberIn+10,传给NumberOut接口
在第1Tick,下方的黄色、蓝色流程都会调用灰色To Be Called流程。
黄色流程传入InputNumber变量本身,因此只要在Tick2之后,To Be Call的流程会得到其最新状态值10,所以+10后输出结果Output1值为20
蓝色流程在Tick1传入InputNumber取值0,因此在调用结束后,输出结果Output2值为10
注:To Be Called流程无并发限制,所以模型将在Tick3结束
如何访问端口?
建模中的表达式访问
- 在流程的后续组件的公式栏中,可以
step_name.port_name形式访问前序组件端口的值 - 端口所在的组件可以在动作后计算的公式栏中,以
This.port_name形式访问端口值 - 由状态链连接的端口无法使用公式访问端口
可视化查看接口状态

