影刀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七、实战案例一个完整的数据采集流程用子流程的方式重新设计一个采集商品数据并保存的流程。主流程 main1. 调用子流程初始化 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. 循环ForEachitem 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行index2列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教你如何让流程更健壮不会因为一个意外就全盘崩溃。作者林焱 | 转载请注明出处