把大流程拆成子流程之后,问题来了:子流程A采集到的商品链接,怎么传给子流程B去打开?
流程参数就是子流程之间的“数据快递”。 主流程把数据打包(输入参数)发给子流程,子流程处理完再把结果打包(输出参数)送回主流程。
我也是拆了子流程之后才发现,不会传参数等于没拆。
一、参数长什么样?
在影刀里,参数就是带类型的变量,专门用来在流程之间传递。
三种参数类型:
| 类型 | 方向 | 谁给谁 | 举例 |
|---|---|---|---|
| 输入参数 | → | 主流程传给子流程 | 把“连衣裙”传给搜索子流程 |
| 输出参数 | ← | 子流程返回给主流程 | 子流程返回“采集到30条数据” |
| 输入输出参数 | ↔ | 双向传递 | 比较少用 |
视觉区分:在子流程顶部,输入参数是绿色箭头进入,输出参数是蓝色箭头出去。
二、第一步:定义子流程的输入参数
场景:写一个子流程“B_搜索商品”,需要主流程告诉它搜什么关键词。
操作步骤:
- 打开子流程“B_搜索商品”
2. 点击顶部工具栏的“流程参数”按钮(齿轮图标)
- 点击“添加” → 选择“输入参数”
- 填写:
- 参数名:
关键词(英文或拼音,不要中文) - 显示名:
搜索关键词(中文说明,方便看)
- 参数名:
- 参数类型:字符串
- 默认值:留空或者填“连衣裙”
- 点确定
参数类型怎么选:
| 你要传什么 | 选类型 |
|---|---|
| 文本、单个词 | 字符串 |
| 数字(价格、数量) | 整数 / 小数 |
| 是/否 | 布尔 |
| 多个值(如商品列表) | 列表 |
| Excel行数据 | 字典 / 列表 |
子流程内部怎么用输入参数:
在子流程的指令里,用{关键词}(花括号包起来)代表这个参数。
比如“输入文本”指令,输入内容填{关键词}。
三、第二步:定义子流程的输出参数
场景:搜索完成后,要告诉主流程“找到了多少商品”。
操作步骤:
- 还是在“流程参数”窗口
- 添加 → 选择“输出参数”
- 填写:
- 参数名:
搜索结果数量 - 显示名:
搜索结果数量 - 参数类型:整数
- 参数名:
4. 点确定
子流程内部怎么赋值给输出参数:
在子流程的最后,用“设置变量”指令,把值赋给输出参数。
设置变量:搜索结果数量 = {采集到的商品列表长度}
注意:输出参数的名字在子流程内部也是当变量用,可以直接赋值。
多个输出参数:可以定义多个,比如是否成功(布尔)、第一条商品链接(字符串)。
四、第三步:主流程调用子流程并传参
操作步骤:
- 在主流程里拖入“调用子流程”指令
- 选择子流程“B_搜索商品”
- 右侧详情面板会出现“输入参数”区域
- 在“关键词”这一行,选择主流程里的变量,比如
{主流程关键词} - 如果有输出参数,下方“输出参数”区域会自动出现
- 新建变量接收输出结果,比如
{采集数量}
配置示例:
# 主流程
设置变量:主流程关键词 = “连衣裙”
调用子流程:B_搜索商品
输入参数:关键词 = {主流程关键词}
输出参数:搜索结果数量 → 存到变量 {商品数量}
输出日志:“搜索完成,找到{商品数量}个商品”
五、实战案例:关键词搜索+采集+写入(完整传参链)
子流程A:B_搜索并采集(输入:关键词,输出:商品列表)
内部逻辑:
- 打开拼多多,输入
{关键词}搜索 - 等待结果
- 获取相似元素列表(所有商品标题)
- 把标题列表赋值给输出参数
商品列表
子流程B:C_写入Excel(输入:商品列表,输出:写入行数)
内部逻辑:
- 打开Excel
- 列表循环遍历
{商品列表} - 逐行写入
- 输出参数
写入行数= 循环次数
主流程:
1. 设置变量:待搜索词 = “连衣裙”
2. 调用 B_搜索并采集
输入:关键词 = {待搜索词}
输出:商品列表 → {采集到的标题列表}
3. 调用 C_写入Excel
输入:商品列表 = {采集到的标题列表}
输出:写入行数 → {行数}
4. 输出日志:“成功写入{行数}条数据”
六、高级技巧:参数传对象(元素、Excel对象)
场景:主流程打开了Excel,想把“这个打开的Excel”传给子流程去写入。
方法:输出参数类型选“通用值”,可以传Excel对象、Web页面对象等。
操作:
- 主流程:“打开Excel” → 输出到变量
Excel对象 - 调用子流程时,把
{Excel对象}作为输入参数传进去 - 子流程的输入参数类型选“通用值”
- 子流程内部直接用这个对象,不需要再打开一次
注意:传对象时,子流程里不能关闭这个对象,否则主流程再用会报错。
七、常见误区
误区1:参数名用中文
❌ 输入参数名写“关键词”(中文),在子流程里用{关键词}有时会识别不了
✅ 用英文或拼音guanjianci或keyword
误区2:输出参数忘记赋值 ❌ 定义了输出参数,但子流程结束前没给它赋值 → 主流程收到的是空值 ✅ 子流程结束前,用“设置变量”把值赋给输出参数
误区3:输入参数和子流程内部变量重名
❌ 输入参数叫keyword,子流程内部也用keyword作为临时变量 → 会覆盖
✅ 输入参数叫p_keyword,内部临时变量用temp_keyword
误区4:传列表时忘了用列表循环 ❌ 把整个列表一次性写入Excel的一行 ✅ 用列表循环遍历列表,逐行写入
八、调试技巧:看参数传没传对
在主流程调用子流程前,加一条“输出日志”打印要传的参数:
输出日志:“准备调用搜索子流程,关键词={主流程关键词}”
在子流程的第一条指令,打印收到的输入参数:
输出日志:“子流程收到关键词:{关键词}”
在子流程的最后,打印输出参数的值:
输出日志:“子流程准备返回,搜索结果数量={搜索结果数量}”
这样跑一遍日志,就能看到数据在哪个环节丢了。
常见问题/易错速查
| 问题 | 原因 | 解决方法 |
|---|---|---|
| 主流程调用子流程时输入参数区域是空的 | 子流程没定义输入参数 | 去子流程的“流程参数”里添加 |
| 子流程里用{参数名}报错 | 参数名拼错了或大小写不对 | 检查参数名,影刀区分大小写 |
| 输出参数在主流程里是空值 | 子流程忘记给输出参数赋值 | 在子流程结束前加“设置变量” |
| 传列表进去,子流程收到的是字符串 | 参数类型选成了“字符串” | 改成“列表”类型 |
| 传Excel对象报错 | 子流程里关闭了Excel | 不要在子流程里关闭,回主流程关 |
推荐资源
影刀官方示例:市场搜索“流程参数示例”,下载后看主流程和子流程的参数配置。
我的习惯命名规范:
- 输入参数:
in_xxx(如in_keyword) - 输出参数:
out_xxx(如out_count) - 内部临时变量:
tmp_xxx
这样一眼就能看出变量的作用域。
最后说一句:
参数传递是子流程拆分的“黏合剂”。没学会之前,我把所有代码写在一个流程里,因为不知道怎么传数据。学会之后,一个应用拆成十多个子流程,每个都能单独测试和维护。
记住:输入参数是问子流程“你需要什么”,输出参数是问子流程“你给了我什么”。
作者:林焱
本文为《影刀RPA学习手册》系列文章之一,内容源于实操经验的整理与分享。
