影刀RPA子流程设计:让复杂流程变清晰
影刀RPA子流程设计:让复杂流程变清晰
作者:林焱 | 难度:⭐⭐⭐ | 预计阅读:10分钟
写在前面
当你的流程只有10步以内,全写在main里没问题。
但一旦流程超过20步,全是平铺的指令——维护起来会非常痛苦。
改一个地方,要在一堆指令里翻半天。
子流程的本质,就是把大流程拆成小模块,每个模块各司其职。
这篇文章讲清楚:什么时候用子流程、怎么设计子流程、流程参数怎么传。
一、什么是子流程?
用一个类比:
主流程(main)就像主要)函数,负责整体调度。
子流程就像其他函数,负责具体的事情。
比如一个"电商订单处理"流程:
主流程 main ├── 子流程:初始化(打开浏览器、读取配置) ├── 子流程:登录(输入账号密码、处理验证码) ├── 子流程:处理订单(读取订单列表、逐条处理) ├── 子流程:写入结果(把处理结果写到Excel) └── 子流程:清理(关闭浏览器、释放资源)每个子流程只做一件事,主流程只负责"调用顺序"。
二、什么时候该用子流程?
不是所有情况都需要拆子流程。
以下场景,建议拆:
场景1:流程步骤超过20步
步骤多了,编辑区里全是指令,找起来费劲。
拆成子流程后,主流程里只看到子流程调用,结构清晰很多。
场景2:有一段逻辑需要复用
在这里插入图片描述
比如你写了"发送钉钉通知"的逻辑,在流程里要用到3次。
如果不拆子流程,要复制粘贴3份——以后要改,得改3个地方。
拆成子流程后,调用3次同一个子流程就行,改也只要改一处。
场景3:逻辑功能明显可以分组
比如"数据采集流程"明显可以分成:初始化、采集、清洗、保存、清理。
这种天然的分组,就应该拆成子流程。
三、如何在影刀RPA里创建子流程?
操作步骤很简单:
拼多多店群自动化上架方案
- 在影刀RPA编辑器的左侧,右键点击「子流程」
- 选择「新建子流程」
- 给子流程起个名字(命名规范后面会讲)
- 双击子流程,进入编辑界面
- 在里面添加指令,和编辑主流程一模一样
调用子流程:
在主流程(或其他子流程)里,拖入「调用子流程」指令,选择要调用的子流程名称即可。
四、流程参数:子流程之间传数据
子流程拆出来了,新的问题来了:
子流程A处理完的数据,怎么传给子流程B?
这就是流程参数的作用。
流程参数的有两种方向:
| 类型 | 作用 |
|---|---|
| 输入参数 | 调用子流程时,传进去的数据 |
| 输出参数 | 子流程执行完后,传出来的数据 |
举个实际例子
假设有一个子流程叫登录,它需要知道"用哪个账号登录"——这是个输入参数。
登录完成后,它返回"登录是否成功"——这是个输出参数。
在主流程里调用登录时:
调用子流程:登录 输入参数: username = "myaccount" password = "mypassword" 输出参数: login_success = ${login_result}子流程登录里面:
- 读取输入参数
username和password,用来填写登录表单 - 登录完成后,把成功/失败的结果,写入输出参数
login_success
五、流程参数的配置步骤
5.1 在子流程里定义参数
- 双击进入子流程编辑界面
- 点击编辑区上方的「子流程设置」按钮
- 在弹出的对话框里,添加参数:
- 参数名:用英文,见名知意,比如
username、result_list - 方向:选择「输入」或「输出」
- 类型:文本、数值、列表、字典等
- 参数名:用英文,见名知意,比如
- 点击确定,保存
5.2 在子流程里使用输入参数
定义了输入参数之后,在子流程内部的指令里,可以直接用${参数名}来引用。
比如输入参数叫search_keyword,在子流程里:
输入文本(目标元素:搜索框,内容:${search_keyword})5.3 在子流程里设置输出参数
子流程里处理完数据之后,需要把结果"存"到输出参数里。
用「赋值」指令:
赋值: 变量:${output_result} ← 输出参数名 值:"登录成功" ← 要传出去的结果六、子流程设计的最佳实践
实践1:一个子流程只做一件事
这是最重要的原则。
子流程的名字,应该能清晰描述它做的事情。
好的命名:
登录采集商品列表写入Excel结果
不好的命名:
处理← 太模糊步骤1← 没有描述功能登录并采集并保存← 一件事做了太多
实践2:子流程嵌套不要太深
子流程A调用子流程B,子流程B调用子流程C……
嵌套超过3层,调试和维护都会变得困难。
如果必须嵌套很深,说明你的拆分方式可能有问题,考虑重新设计。
实践3:用全局变量传递"全局状态"
有些数据,几乎所有子流程都需要用到。
比如:网页对象、Excel对象、当前账号信息。
这种数据,放在全局变量里,比每次都通过流程参数传递要方便。
全局变量在哪定义?
在影刀RPA的「全局变量」面板里(通常在左侧,和指令面板在一起)。
定义好之后,所有子流程都可以直接引用,不需要通过参数传递。
实践4:子流程要有"默认值"或"校验输入"
子流程的输入参数,如果调用方没有传值,可能会出错。
好的做法是在子流程开头,加一段参数校验逻辑:
If (${username} == "") 打印日志:"错误:username参数为空") 终止应用 End If七、实战案例:一个完整的数据采集流程
用子流程的方式,重新设计一个"采集商品数据并保存"的流程。
主流程 main
1. 调用子流程:初始化 2. 调用子流程:登录(输入:账号/密码) 3. 调用子流程:采集商品列表(输入:关键词,输出:商品列表) 4. 调用子流程:写入Excel(输入:商品列表) 5. 调用子流程:清理子流程:初始化
1. 打开网页(目标网址) 2. 等待页面加载(3000ms) 3. 输出参数:网页对象 → ${page_obj}子流程:登录
输入参数:username, password 1. 捕获:用户名输入框 → 填写 ${username} 2. 捕获:密码输入框 → 填写 ${password} 3. 捕获:登录按钮 → 点击 4. 等待(2000ms) 5. 校验:是否出现"登录成功"文字 如果成功 → 输出参数 login_success = true 如果失败 → 输出参数 login_success = false子流程:采集商品列表
输入参数:search_keyword 输出参数:product_list(列表类型) 1. 捕获:搜索框 → 输入 ${search_keyword} 2. 捕获:搜索按钮 → 点击 3. 等待页面加载 4. 获取相似元素列表(商品标题元素)→ 保存到 ${title_list} 5. 循环(ForEach,item in ${title_list}): a. 获取元素文本(item)→ 保存到 ${title_text} b. 把 ${title_text} 添加到 ${product_list} 6. 返回 ${product_list}子流程:写入Excel
输入参数:data_list 1. 打开Excel文件(路径:./result.xlsx) 2. 循环(index, item in ${data_list}): a. 写入Excel(行:index+2,列:1,内容:item) 3. 保存并关闭Excel子流程:清理
TEMU店群如何管理运营?
1. 关闭网页 2. 打印日志:"流程执行完成"八、子流程的常见错误
错误1:输入参数没传值
调用子流程时,忘记给输入参数赋值。
表现:子流程运行时,相关变量是空的,导致后续指令出错。
解决方法:检查「调用子流程」指令的参数映射,确保每个输入参数都有值。
错误2:输出参数没赋值
子流程里忘记给输出参数赋值,导致调用方拿不到结果。
表现:调用子流程后,输出参数的值是空的或者默认值。
解决方法:在子流程末尾,检查是否所有输出参数都正确赋值了。
错误3:全局变量和流程参数混用
有些数据既放在全局变量里,又通过流程参数传递,导致混乱。
建议:
- 真正"全局"的数据(如网页对象),用全局变量
- 子流程之间"传递"的数据,用流程参数
- 不要两种方式混着用,选一种,保持一致
九、子流程命名规范
和元素命名一样,早点养成好的命名习惯,后面会省很多时间。
推荐格式
方案A:直接用功能描述(适合小型项目)
登录 采集商品列表 写入Excel 清理方案B:用编号+功能描述(适合中型项目)
A1_初始化 A2_登录 B1_采集商品列表 B2_采集商品详情 C1_写入Excel D1_清理编号的含义:
A开头:初始化相关B开头:数据采集相关C开头:数据处理相关D开头:清理相关
方案C:用文件夹分组(影刀RPA支持)
在子流程面板里,可以右键创建"文件夹",把相关子流程分组存放:
📁 01_初始化 └── 打开网页 └── 登录 📁 02_数据采集 └── 采集商品列表 └── 采集商品详情 📁 03_数据处理 └── 数据清洗 └── 写入Excel 📁 04_清理 └── 关闭网页 └── 释放资源十、结语
子流程设计的核心思想是:分而治之。
把复杂问题拆成多个简单问题,每个简单问题用一个子流程解决。
主流程只关心"先调谁、再调谁",不关心每个子流程内部怎么实现。
这样设计出来的流程:
- 可读性好:一看主流程就知道整体逻辑
- 可维护性好:改某个功能,只要改对应的子流程
- 可复用性好:写好的子流程,其他项目也能用
下一篇讲异常处理(Try-Catch),教你如何让流程更健壮,不会因为一个意外就全盘崩溃。
作者:林焱 | 转载请注明出处