Q:多个流程块之间,如何共享和传递数据?
A:使用流程图变量或者流程块的输出和输入,可实现多个流程块之间传递数据。前者使用起来更加直观,且当流程块之间的箭头发生变化时,也不会影响流程图变量的值;后者依赖于两个次序相邻的流程块,逻辑上更加清晰一些。
采用哪种方式,取决于开发者的习惯。
流程图变量
如果在流程图中定义了一个变量,那么在流程图所包含的所有流程块中,都可以直接使用这个变量。
【具体用法】
例:有一张流程图,包含两个流程块,分别命名为“流程块1”和“流程块2”(如下图)。
两个依次运行的流程块“流程块1”先运行,功能是获得当前系统时间,并将系统时间转换为字符串格式。
“流程块2”后运行,功能是把“流程块1”生成的字符串格式的系统时间,以调试信息的方式显示出来。
由于“流程块1”和“流程块2”之间需要传递“字符串格式的系统时间”这一数据,可以将其保存在流程图变量中。
首先,在流程图中定义这个变量。在“流程图”视图,找到并点击右侧的“变量”标签,可看到所有的流程图变量,点击“添加”按钮,输入变量名x(不区分大小写),即可增加一个流程图变量。
每个流程图变量还可指定“使用方向”(包括“输入”“输出”“无”)。
其中“输入”和“输出”都是高阶功能,在子流程中才需要使用。只考虑当前流程的话,将使用方向设为“无”就好。
在流程图视图添加变量点击“流程块1”的“纸和笔”图标,进入可视化视图,插入“获取本机当前时间”和“获取指定格式的时间文本”命令(在“时间”分类下),并把“获取指定格式的时间文本”中的“时间”属性设为“获取系统时间”的结果,即可得到当前时间,并以字符串格式保存在流程图变量x中。
由于x是流程图变量,因此在下个流程块中,可以直接使用x的值。
流程块1的实现如果觉得输入变量名太麻烦,或者变量名太长记不住,也可在流程块的“可视化视图”的“属性”区域,找到标有字母fx的按钮或者下拉按钮。
按下后,会弹出一个菜单,列出所有可用的流程块变量、流程图变量和系统变量,用鼠标点选即可。
在下拉菜单中选择变量
“流程块变量”:仅限于当前流程块使用;
“流程图变量”:可以在整个流程图的任意一个流程块中使用
;“系统变量”:是不需要定义也不需要赋值的,可以直接使用里面预置的值。
然后,进入“流程块2”的可视化视图,插入“输出调试信息”命令,并把“输出内容”属性设为x(变量x为流程图变量,可以直接使用,不需要再定义)。
流程块2的实现回到流程图界面,然后点击“运行”按钮,即可看到运行结果,显示出当前时间。
流程块的输入输出
此外,不依靠流程图变量,两个相邻的流程块之间,也可以传递数据。前一个流程块运行结束时,可将一个值“输出”,这个输出值通过两个流程块之间连接的箭头,直接“传导”到下一个流程块中。
首先,进入前一个流程块,在“命令区”里面找到“词法语法”下面的“跳出返回”命令,将其拖拽到“组装区”,并在“属性区”里面设置其输出值,可以是数值、字符串、变量或表达式。
如果习惯使用源代码视图,可在流程中书写Return <输出值>,效果一样。在运行时,遇到这条命令,就会跳出当前流程块,并且把输出值传到后一个流程块。
而后,进入后一个流程块,当其中有某条命令需要使用前一个流程块的输出值(也就是当前流程块的输入)时,直接在“属性区”里面,找到相应的属性,点击右侧标有字母fx的按钮,并在弹出的菜单中选择“系统变量”中的“流程块的输入”(如下图),即可在运行的时候自动获得这个值。
选择系统变量“流程块的输入”当然,如果习惯使用源代码视图,也可以直接书写$BlockInput(变量前面的$符号表示这是一个系统变量)。
【具体用法】沿用上述例子:首先,进入“流程块1”(功能是获得当前系统时间,并将系统时间转换为字符串格式)。假设转换后的结果保存在变量sRet中,那么只需要拖入一条“跳出返回”命令,并把sRet作为其输出值即可。
*小技巧当“获取指定格式的时间文本”命令和“跳出返回”命令相邻的时候,甚至连变量sRet都不需要,直接在“跳出返回”的属性里面按fx按钮,并选择系统变量“上一条命令的结果”即可。这样可以省去一个变量,并且效果也一样。
选择系统变量“上一条命令的结果”然后,进入“流程块2”,插入“输出调试信息”命令,并把“输出内容”属性设为系统变量“流程块的输入”。运行整个流程图,也可得到预期的结果。(这里不能只运行“流程块2”,否则由于缺乏“流程块1”的输出,结果就会不正确。)
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。