影刀RPA流程参数详解:子流程之间传数据的正确方式

作者:林焱 | 难度:⭐⭐⭐ | 预计阅读:11分钟


写在前面

写RPA流程,最让人头疼的问题之一:

数据怎么在不同子流程之间传递?

A子流程处理完的数据,B子流程怎么拿到?

C子流程需要用D子流程的结果,怎么传?

答案就是:流程参数

这篇文章专门讲透流程参数——定义、使用、传值、常见错误,全部讲清楚。


一、为什么需要流程参数?

在这里插入图片描述

先看一个不用流程参数的场景:

场景:采集商品数据并保存

主流程 main
├── 子流程:打开网页 → 网页对象存在全局变量里
├── 子流程:采集数据 → 数据也存在全局变量里
└── 子流程:保存数据 → 从全局变量读取数据

这种方式能用。但问题是:

  • 全局变量太多——流程一复杂,全局变量几十个,容易混乱
  • 不知道哪个子流程用了哪个变量
  • 多个子流程同时改同一个全局变量,互相覆盖

流程参数的作用就是解决这些问题:

  • 明确声明:这个子流程需要什么输入,输出什么结果
  • 隔离作用域:参数只在调用时生效,不会污染全局空间
  • 可读性好:一看参数就知道子流程的功能和依赖关系

二、两种数据传递方式的对比

对比项 全局变量 流程参数
定义位置 全局变量面板 在每个子流程里单独定义
可见范围 所有子流程都能访问 只有调用方和被调用的子流程能看到
适用场景 跨所有子流程共享的状态(网页对象等) 单次调用的输入/输出
维护难度 高(多了容易乱) 低(职责清晰)

什么时候用全局变量?什么时候用流程参数?

用全局变量的情况

  • 网页对象(几乎所有子流程都要用)

  • Excel对象(多个子流程操作同一个Excel)

  • 配置信息(账号密码、文件路径等)

  • 在这里插入图片描述

  • 当前登录状态(是否已登录)

用流程参数的情况

  • 每次调用可能不同的值(如搜索关键词)
  • 子流程的计算结果(如采集到的数据列表)
  • 临时性的中间值(不需要跨整个流程共享)

三、在影刀RPA中创建和使用流程参数

3.1 创建子流程并定义参数

第一步:新建一个子流程,比如叫计算总价

第二步:双击进入该子流程编辑界面

第三步:点击编辑区上方的「子流程设置」或「参数设置」按钮

拼多多店群自动化报活动上架!

第四步:添加参数:

参数名 方向 类型 说明
price_list 输入 列表 商品价格列表
discount_rate 输入 数值 折扣率
total_price 输出 数值 计算后的总价

第五步:保存设置


3.2 在子流程内部使用输入参数

在这里插入图片描述

定义好输入参数后,在子流程内部可以直接引用:

【打印日志】(内容:"收到价格列表,共" + ${price_list}.length + "条")
【打印日志】(内容:"折扣率:" + ${discount_rate} + "%")

${price_list}${discount_rate} 就是刚才定义的两个输入参数


3.3 在子流程内部给输出参数赋值

输出参数是子流程要"交出去"的结果。

在子流程末尾,用赋值指令把结果写到输出参数里:

【给变量赋值】(变量:${total_price},值:${sum_result})

// 或者更复杂的逻辑
【循环】(item in ${price_list})
    【给变量赋值】(变量:${total_price},值:${total_price} + item * ${discount_rate} / 100)
【结束循环】

3.4 调用子流程时传值

回到主流程(或其他子流程),拖入【调用子流程】指令:

选择子流程名称:计算总价

然后填写参数映射:

在这里插入图片描述

输入参数:
    price_list = ${my_product_prices}      ← 把主流程里的变量传进去
    discount_rate = ${my_discount}

输出参数:
    total_price = ${final_total}           ← 接收子流程返回的结果

调用完成后,${final_total} 就存着子流程计算出来的总价了。


四、流程参数的类型

影刀RPA支持多种参数类型:

基础类型

类型 说明 示例值
文本 字符串类型 "hello""用户名"
数值 数字类型 1003.140
布尔值 true/false truefalse

复合类型

类型 说明 示例值
列表 有序集合 ["苹果", "香蕉", "橙子"]
字典 键值对 {"name":"张三","age":28}

选择类型的建议

  • 如果只传一个字符串或数字,用文本数值
  • 如果要传一组数据(如商品列表、关键词列表),用列表
  • 如果要传结构化的数据(如一条完整记录),用字典

五、实战案例:完整的参数流转

在这里插入图片描述

用一个实际例子,展示参数在整个流程中的流转过程。

案例:电商订单自动处理

主流程 main
1. 调用子流程:初始化
   (无参数)

2. 调用子流程:登录
   输入:username = "admin"
         password = "123456"
   输出:login_success = ${is_logged_in}

3. If(${is_logged_in} == true)
     4. 调用子流程:读取订单
        输入:status = "待处理"
        输出:order_list = ${orders}

     5. ForEach(order in ${orders})
          6. 调用子流程:处理单条订单
             输入:order_data = ${order}
             输出:result = ${process_result}

          7. If(${process_result} == success)
               8. 调用子流程:发送通知
                  输入:message = "订单处理成功:" + ${order.order_id}
             End If
     End ForEach
   End If

9. 调用子流程:清理
   (无参数)
各子流程的参数定义

子流程:登录

输入参数:
    username(文本)— 登录账号
    password(文本)— 登录密码

输出参数:
    login_success(布尔值)— 是否登录成功

内部逻辑:
    1. 打开登录页面
    2. 填写 username 到用户名框
    3. 填写 password 到密码框
    4. 点击登录按钮
    5. 校验是否出现"欢迎"文字
    6. 给 login_success 赋值 true 或 false

子流程:读取订单

输入参数:
    status(文本)— 订单状态筛选条件

输出参数:
    order_list(列表/字典列表)— 符合条件的订单列表

内部逻辑:
    1. 进入订单管理页面
    2. 用 status 参数筛选订单状态
    3. 循环获取每条订单的信息
    4. 把每条订单封装成字典,加入 order_list

子流程:处理单条订单

输入参数:
    order_data(字典)— 一条订单的完整数据

输出参数:
    result(文本)— 处理结果(success/fail)

内部逻辑:
    1. 解析 order_data(订单号、金额、买家信息...)
    2. 根据业务规则处理订单
    3. 返回处理结果

六、流程参数的常见错误与排查

在这里插入图片描述

错误1:调用时忘记给某个输入参数传值

表现:子流程运行到某一步,相关变量为空,报错"变量未初始化"

排查

  1. 检查「调用子流程」指令的参数映射表
  2. 确认每个输入参数都有对应的值

错误2:输出参数没有正确接收

表现:调用完子流程后,用来接收输出的变量还是空的或者默认值

排查

  1. 确认子流程内部确实给输出参数赋值了
  2. 确认调用方的输出参数映射正确

错误3:类型不匹配

表现:传入的是文本,但子流程期望数值;或者反过来

比如:你传了字符串"100",但子流程里拿它做数学运算时报错

排查

  1. 检查参数类型定义(文本/数值/列表/字典)
  2. 必要时用「类型转换」指令转换
  3. 在这里插入图片描述

错误4:同名变量冲突

表现:全局变量和流程参数名字相同,导致取到了错误的值

排查

  1. 查看是否有同名的全局变量
  2. 命名规范上区分开:流程参数加前缀,如p_;全局变量加前缀,如g_

七、流程参数命名规范

好的命名能大幅降低出错率。

推荐规则

TEMU店群矩阵自动化运营核价报活动

规则 示例 说明
小写英文 username 不用中文,不混合大小写
下划线分隔 product_name 多个单词用下划线连接
见名知意 login_success 一看就知道是什么
方向前缀(可选) in_username, out_result 区分输入和输出
类型暗示(可选) price_list, user_dict 后缀暗示数据类型

反面示例(不要这样命名)

❌ 不好的命名 问题
a 太短,看不出含义
参数1 中文且无意义
data 太泛泛,任何数据都能叫 data
MyUserName 驼峰命名,不符合习惯
input_1 数字编号,不如用功能描述

八、高级用法:可选参数与默认值

在这里插入图片描述

有些情况下,某个参数不一定每次都传

比如:搜索功能,有时候需要按分类筛选(传category参数),有时候不需要。

影刀RPA支持可选参数默认值

设置默认值

在子流程参数设置里,可以给参数设置默认值

如果调用方没有传这个参数,就使用默认值。

输入参数:
    search_keyword(文本,必填)
    category(文本,可选,默认值:"全部")
    page_size(数值,可选,默认值:20)

调用时:

// 只传必填参数
调用子流程:搜索
    search_keyword = "iPhone"
    // category 自动使用默认值 "全部"
    // page_size 自动使用默认值 20

// 也可以显式传值,覆盖默认值
调用子流程:搜索
    search_keyword = "iPhone"
    category = "数码"
    page_size = 50

九、调试技巧:如何追踪参数值?

当流程出问题时,经常是因为参数值不对

方法1:打印日志

在这里插入图片描述

在每个子流程的开头和结尾,加上打印日志指令:

【打印日志】(内容:"[开始] 子流程:xxx,输入参数:a=" + ${a} + ", b=" + ${b})
...(子流程逻辑)
【打印日志】(内容:"[结束] 子流程:xxx,输出参数:result=" + ${result})

运行时查看日志面板,就能看到每一步的参数值变化。

方法2:断点调试

在关键指令处设置断点,运行到断点处会暂停。
此时可以在变量监视窗口里查看当前所有参数和变量的值。

方法3:单步执行

用「单步运行」(F10)模式,一步一步观察参数的变化过程。


十、结语

流程参数的核心思想很简单:

子流程就像一个函数——你给它什么输入(参数),它给你什么输出(返回值)。

设计好流程参数之后,你的RPA流程会有这些好处:

  • 模块化:每个子流程职责单一,接口清晰

  • 可维护:修改某个子流程,不影响其他部分

  • 可复用:写好的子流程,换个参数就能用在别的项目

  • 在这里插入图片描述

  • 可测试:单独测试某个子流程,只需要构造合适的参数即可

下一篇讲调试技巧,教你快速定位流程里的bug。


作者:林焱 | 转载请注明出处

Logo

电商企业物流数字化转型必备!快递鸟 API 接口,72 小时快速完成物流系统集成。全流程实战1V1指导,营造开放的API技术生态圈。

更多推荐