影刀RPA 多流程协作编排:主流程调用子流程与参数传递实战

📅 2026/7/14 18:30:11
影刀RPA 多流程协作编排:主流程调用子流程与参数传递实战
影刀RPA 多流程协作编排主流程调用子流程与参数传递实战做自动化一段时间后你会发现单文件流程根本扛不住复杂的业务。一个流程几千步改一个小地方就可能整个崩掉。这时候就需要多流程协作——把一个大流程拆成多个子流程主流程负责调度子流程各司其职。影刀原生支持子流程调用而且参数传递做得很顺手。这篇文章就讲清楚什么时候拆流程、怎么调用、参数怎么传、出错怎么办。什么情况用多流程先判断要不要拆。不是所有流程都值得拆以下四种情况是必须拆的1. 同一段逻辑在多个主流程里用到。比如登录系统这个动作A流程采集数据要登录B流程发报表也要登录。不拆的话每次改密码你得改两个地方早晚漏一个。2. 单文件流程超过500步。不是说500步就崩而是超过这个量级你找bug的时候CtrlF都救不了你。拆成子流程后每个子流程几百步在单独文件里定位问题快得多。3. 业务逻辑有明显边界。比如一个流程做从淘宝采集订单 → 写入ERP → 发邮件通知。三个动作之间是松耦合的天然适合拆成三个子流程。4. 不同人负责不同环节。团队协作时A负责数据采集B负责数据处理C负责结果推送。每个人在自己的子流程文件里折腾主流程只负责串起来。不会互相踩代码。怎么调用子流程影刀里调用子流程用的动作叫**【运行子流程】**在流程控制分类下。操作步骤在主流程的合适位置拖入**【运行子流程】**动作点击动作配置选择要调用的.flow文件设置输入参数和输出参数的映射基本调用结构主流程一般长这样主流程.flow ↓ 【运行子流程】— 调用 采集订单.flow传入关键词、页码传出订单列表 ↓ 【运行子流程】— 调用 写入ERP.flow传入订单列表传出写入结果 ↓ 【运行子流程】— 调用 发送通知.flow传入写入结果传出无 ↓ 完成每个子流程是独立的.flow文件放在同一个项目目录下就行。拼多多店群自动化上架方案子流程的入口设置子流程文件里需要在开头声明输入参数和输出参数。在子流程编辑器中点击左侧的流程参数面板添加入参和出参。比如一个登录系统的子流程输入参数用户名字符串、密码字符串输出参数登录结果布尔值、SessionToken字符串主流程调用时把主流程里的变量映射到子流程的输入参数子流程执行完后输出参数会自动写回主流程对应的变量。参数传递的三种方式方式一直接变量映射推荐最常用的方式。主流程里有一个变量account子流程的输入参数叫用户名在**【运行子流程】**的配置里直接把account映射给用户名。主流程变量 account admin123 子流程输入参数 用户名 ← account 子流程执行... 子流程输出参数 登录结果 → 主流程变量 is_login_success影刀的参数映射是值传递不是引用传递——子流程里改了参数值不会影响主流程的原始变量除非通过输出参数写回。方式二全局变量中转在主流程和子流程里都用全局变量。影刀的全局变量是在变量管理面板里定义的所有流程文件都能读写。主流程 【设置全局变量】g_username admin123 【运行子流程】调用 子流程.flow 【读取全局变量】result g_login_result 子流程 【读取全局变量】username g_username 执行登录... 【设置全局变量】g_login_result True全局变量方式灵活但问题是你不知道哪个流程在什么时候改了全局变量。调试时变量被莫名其妙覆盖是常事。建议只在传少量简单值的时候用复杂流程老老实实用参数映射。方式三文件/数据库中转大数据场景当需要传递的数据很大比如几千条订单记录参数映射和全局变量都扛不住。这时候用文件或数据库做中转主流程 【写入Excel】把订单列表导出到 temp/orders.xlsx 【运行子流程】传入文件路径 temp/orders.xlsx 子流程 【读取Excel】从传入的文件路径读取订单数据 处理订单... 【写入Excel】把处理结果导出到 temp/result.xlsx 主流程子流程返回后 【读取Excel】从 temp/result.xlsx 读取处理结果大数据的场景还是老老实实走文件不要用变量硬传。子流程的错误处理子流程出错怎么办这是多流程协作里最容易被忽略的问题。子流程崩了主流程不能跟着崩。错误传播机制**【运行子流程】**动作有一个配置项叫执行失败时继续。勾上这个选项后子流程抛出异常不会中断主流程。但代价是你得自己检查子流程是否执行成功。做法是让子流程永远通过输出参数返回状态子流程的输出参数 success: True/False error_message: 主流程 【运行子流程】失败时继续 True 【IF】子流程输出 success False 【日志输出】子流程失败 error_message 【运行子流程】调用 告警通知.flow 【END IF】子流程超时控制有些子流程可能挂死——比如网页一直加载不出来。影刀的**【运行子流程】**没有内置超时设置需要自己在子流程里加。在子流程的关键步骤前加一个超时检测子流程内部 【记录时间】t_start 执行采集... 【记录时间】t_now 【IF】(t_now - t_start) 600 秒 【设置输出】success False, error_message 子流程超时 【终止流程】 【END IF】或者更简单的——在子流程结尾加一个总的判断如果某个关键变量为空说明中间出了问题没执行完直接返回失败。重试机制子流程失败不一定是真失败很多是网络波动之类的临时问题。在主流程里加个重试循环主流程 retry_count 0 【WHILE】retry_count 3 AND 子流程输出 success False retry_count retry_count 1 【日志输出】第 retry_count 次重试... 【等待】5 秒 【运行子流程】重新调用 【END WHILE】 【IF】retry_count 3 AND 子流程输出 success False 【日志输出】重试3次仍失败终止主流程 【终止流程】 【END IF】实战案例电商订单处理全流程一个真实的多流程协作案例——从电商平台采集订单、写入ERP、发邮件通知三个子流程加一个主流程调度。主流程订单处理调度主流程 orchestrator.flow ┌─────────────────────┐ │ 1. 读取配置 │ │ - 采集日期范围 │ │ - ERP登录信息 │ │ - 通知邮箱列表 │ └──────┬──────────────┘ ↓ ┌─────────────────────┐ │ 2. 运行子流程 │ │ 采集订单.flow │ │ 入参日期范围 │ │ 出参success, │ │ orders_data │ └──────┬──────────────┘ ↓ 【IF success False】 → 记录日志发告警终止 ↓ ┌─────────────────────┐ │ 3. 运行子流程 │ │ 写入ERP.flow │ │ 入参orders_data │ │ 出参success, │ │ import_count│ └──────┬──────────────┘ ↓ 【IF success False】 → 记录日志发告警终止 ↓ ┌─────────────────────┐ │ 4. 运行子流程 │ │ 发送通知.flow │ │ 入参import_count│ │ 出参success │ └──────┬──────────────┘ ↓ ┌─────────────────────┐ │ 5. 记录主流程日志 │ │ 本次处理订单数 │ │ 成功/失败状态 │ └─────────────────────┘子流程1采集订单采集订单.flow 输入参数start_date, end_date 输出参数success, orders_data, error_message 步骤 1. 【打开网页】进入商家后台 2. 【IF】检测登录状态 → 未登录调用 登录模块内置在子流程里的小逻辑 3. 【填写】设置日期筛选条件 4. 【点击】搜索按钮 5. 【等待元素】等待结果表格加载 6. 【获取元素列表】提取订单数据 7. 对每条订单做字段补全Python节点处理 8. 设置输出success True, orders_data 订单列表 异常处理整个子流程包裹在try-catch里 → 任何异常success False, error_message 异常信息子流程2写入ERP写入ERP.flow 输入参数orders_data 输出参数success, import_count, error_message 步骤 1. 【打开网页】ERP系统登录页 2. 【填写】用户名密码 3. 【点击】登录 4. 遍历 orders_data 的每条订单 a. 【点击】新增订单按钮 b. 【填写】客户信息、商品信息、金额等 c. 【点击】保存 d. import_count 1 5. 设置输出success True, import_count 导入成功数子流程3发送通知发送通知.flow 输入参数import_count 输出参数success 步骤 1. Python节点拼接邮件内容 2. [video(video-OuLhzuaz-1784019385261)(type-csdn)(url-https://live.csdn.net/v/embed/524993)(image-https://v-blog.csdnimg.cn/asset/a547123d88ad712dccba346c9217e237/cover/Cover0.jpg)(title-TEMU店群如何管理运营)] subject f订单同步完成 - {今日日期} body f本次成功导入 {import_count} 条订单 3. 【执行SMTP发送】影刀的邮件动作或Python smtplib 4. 设置输出success True三个最容易踩的坑坑1子流程里用了主流程的变量名子流程和主流程的变量是隔离的。你在子流程里定义了一个叫result的变量跟主流程里的result完全不是同一个东西。踩坑现场主流程里把数据写进orders变量然后调用子流程。子流程里也有个orders变量用来存储本地结果。主流程以为子流程执行完orders就更新了其实没有——因为变量是隔离的。正确做法子流程的数据永远通过输出参数传回来。不要在思想上依赖同名变量会互相影响——不会的。坑2子流程结束后浏览器窗口被释放如果你的子流程里打开了浏览器子流程执行完成后浏览器默认会被关闭取决于影刀的浏览器管理策略。后续子流程想用同一个浏览器会话发现窗口已经没了。正确做法设计原则每个子流程自己打开浏览器自己关闭浏览器。不自作聪明地共享浏览器实例。如果确实需要共享登录态用**【保存Cookie】和【加载Cookie】**动作而不是共享浏览器窗口。坑3子流程路径硬编码子流程文件路径写死了绝对路径换个电脑就跑不了。错误C:\Users\张三\Desktop\project\子流程.flow 正确.\子流程.flow相对于主流程文件所在目录影刀的**【运行子流程】**支持相对路径。项目目录结构统一后整个项目拷到别的电脑上也能直接跑。另一个常见翻车子流程文件名包含中文和特殊字符在某些版本的影刀里路径解析会出问题。建议子流程文件名尽量用英文数字如fetch_orders.flow、import_erp.flow。编排模式总结最后总结三种常见的编排模式选哪种看你的业务模式结构适用场景特点线性编排A→B→C步骤之间有严格先后顺序简单直接易调试条件编排A→(条件)→B或C根据子流程返回结果决定下一步加IF判断即可并行编排A和B同时跑→汇合B不依赖A的结果且互不冲突影刀不支持真并行但可用多开窗口模拟线性编排占了80%的场景够用了。条件编排在线性基础上加IF就行。并行编排比较进阶影刀原生不太好做真需要的话可以考虑开多个浏览器窗口分别操作。核心原则就一句话拆流程是为了让每个文件职责单一、好改好测。拆完以后参数传递靠映射错误处理留后路子流程永远通过输出参数汇报结果。多流程协作搞好了复杂业务的自动化就不是噩梦了。作者林焱