Loading
自动执行业务流程
目录
选择筛选器

          没有结果
          没有结果
          以下是一些搜索提示

          检查关键字的拼写。
          使用更普遍的搜索词。
          选择更少的筛选器,并扩大搜索范围。

          搜索所有 Salesforce 帮助
          批量化记录处理以避免 CPU 限制示例

          批量化记录处理以避免 CPU 限制示例

          了解如何重构流,以使用防止 Apex_CPU_TIME_LIMIT_EXCEEDED 错误的批量化模式。此示例显示了低效和优化流设计之间的差异。

          所需的 Edition

          查看支持的版本。
          所需用户权限
          要使用 Flow Builder 中提供的所有流类型、元素和功能(包括 Einstein 和 Agentforce for Flow)打开、编辑、创建、激活或取消激活流: 管理流

          此示例显示了如何将在循环中执行数据操作语言 (DML) 的流转换为高效处理记录的批量化流。查看前后比较,并了解流批量化的原理。

          场景

          构建记录触发的流,并在业务机会关闭时运行。对于每个已结束并赢得的业务机会,流会为业务机会团队的每个成员创建跟进任务。流程:

          • 获取所有业务机会团队成员。
          • 创建分配给每个团队成员的任务。
          • 即使用户一次更新多个业务机会,也能高效工作。
          • 避免批量操作期间的 Apex_CPU_TIME_LIMIT_EXCEEDED 错误。

          Salesforce 对每个同步事务强制实施 10,000 毫秒(10 秒)的单个 CPU 时间限制。该事务中的每个自动化项目 — Apex 触发器、流、工作流规则和流程 — 都来自相同的预算。低效的流设计使问题更加复杂。事务中的其他自动化会先减少共享预算,而低效的流会消耗掉剩余部分不必要的资源。

          流的运行顺序取决于流类型。本示例使用保存后记录触发的流,该流的运行顺序晚于保存前流。有关运行顺序的详细信息,请参阅触发器和执行顺序

          低效方法:循环中的 DML 操作

          此方法在处理多个业务机会时会导致 CPU 限制错误。

          流结构:该流从业务机会对象上的记录触发的流开始,该流在阶段等于“已结束并赢得客户”时在记录更新后运行。该流使用获取记录来获取触发记录的业务机会团队成员,然后循环遍历集合。在循环中,创建记录元素会为每个团队成员创建一个任务。

          此方法失败的原因:

          • 每个循环迭代执行单独的 DML 操作。
          • 包含 5 名团队成员的业务机会会导致 5 次 DML 操作。
          • 当用户一次更新 20 个业务机会时,流会在一个事务中处理所有业务机会。
          • 20 个业务机会 × 5 个团队成员 = 一个事务中的 100 个 DML 操作。
          • 100 个 DML 操作的累积 CPU 时间超过了调控器限制。
          • 结果:Apex_CPU_TIME_LIMIT_EXCEEDEDED 错误。

          高效方法:基于集合的批量化

          这种方法可以高效地处理记录,而不管数量如何。

          流结构:该流从业务机会对象上的记录触发的流开始,并使用获取记录来获取业务机会团队成员。该流创建任务记录变量和任务记录集合变量。记录变量保存流正在处理的当前任务,记录集合保存要创建的任务。流在团队成员之间循环。在循环中,分配元素通过设置任务记录变量的值来构建每个任务记录,并将任务与循环中的当前团队成员相关联。其他分配元素会将任务记录变量值添加到任务记录集合。循环完成后,单个创建记录元素会从集合中创建所有任务。

          为什么这样做:

          • 该循环在不执行 DML 操作的情况下构建任务记录集合。
          • 循环完成后,仅发生一次 DML 操作。
          • 包含 5 个团队成员的业务机会仍然只导致 1 个 DML 操作(一次创建 5 个任务)。
          • 当用户一次更新 20 个业务机会时,流总共执行 20 个 DML 操作(每个业务机会一个)。
          • 显著减少 CPU 时间消耗。
          • 结果:流成功完成,没有达到调控器限制。

          性能比较

          场景 低效(循环中的 DML) 高效(批量化)
          1 个包含 5 名团队成员的业务机会 5 个 DML 操作 1 个 DML 操作
          20 个业务机会(批量更新),每个业务机会 5 名团队成员

          100 个 DML 操作

          (可能因 CPU 限制错误而失败)

          20 个 DML 操作

          (成功完成)

          100 个业务机会(数据加载),每个业务机会 3 名团队成员

          300 个 DML 操作

          (肯定会失败)

          100 个 DML 操作

          (成功完成)

          批量化的关键原则

          • 切勿在循环中执行 DML 操作。始终在循环期间收集集合变量中的记录,然后在循环完成后执行 DML。
          • 从一开始就为批量操作设计。假设记录触发的流同时处理多个记录。
          • 使用记录集合变量。基于集合的 DML 操作比单个操作的效率要高得多。
          • 使用实际容量进行测试。带有一个记录的调试模式不会显示批量操作问题。使用数据导入向导、Data Loader 或批量更新进行测试。
          • 监控性能。查看调试日志,以在生产中失败前识别接近调控器限制的流。

          高级步骤

          查看本示例的步骤。按照它们的顺序操作,或转到部分,以获取更具体的说明。

          创建流

          设置记录触发的流,以在业务机会关闭时运行。

          1. 打开流列表视图。
            • 从“设置”中,在快速查找框中,输入,然后单击
            • 从自动化应用程序中,选择选项卡。
            • 从任何 Lightning 应用程序的“流”选项卡中,单击操作菜单并选择打开流
          2. 创建记录触发的流。
            1. 从 Automation Lightning 应用程序中,单击新建。搜索并选择记录触发流
            2. 从“设置”中,单击新建流,搜索并选择记录触发的流
            配置开始面板将打开。
          3. 配置“开始”元素。
            1. 对于对象,选择业务机会
            2. 对于何时触发流,选择更新记录
            3. 在“设置条目条件”部分,对于条件要求,选择满足所有条件 (AND)
            4. 对于字段,选择阶段
            5. 对于运算符,选择等于
            6. 对于值,选择已结束并赢得
            7. 对于优化流,选择操作和相关记录

          创建资源

          创建批量化处理所需的变量。

          1. 要构建每个任务,请创建用于构建任务记录的记录变量。
            1. 要打开工具箱,请单击工具箱图标。
            2. 单击新建资源,然后选择变量
            3. 对于 API 名称,输入 TaskRecord
            4. 对于数据类型,选择记录
            5. 对于对象,选择任务
            6. 单击“完成”
          2. 要存储所有任务,请为所有任务创建记录集合变量。
            1. 单击新建资源,然后选择变量
            2. 对于 API 名称,输入 TasksToCreate
            3. 对于数据类型,选择记录
            4. 对于对象,选择任务
            5. 选择以允许多个值(集合)。
            6. 单击“完成”

          获取团队成员

          使用获取记录元素获取业务机会团队成员记录进行处理。

          1. 单击添加元素加号图标,然后搜索并选择获取记录
          2. 配置元素。
            1. 对于标签,输入获取业务机会团队成员
            2. 对于对象,选择业务机会联系人角色
              在此示例中,流会将团队成员存储在业务机会联系人角色对象中。将业务机会链接到联系人的对象。
            3. 在“筛选业务机会联系人角色记录”部分,对于字段,选择业务机会 ID
            4. 对于运算符,选择等于
            5. 对于值,选择触发业务机会,然后选择业务机会 ID
            6. 对于存储的记录数量,选择所有记录
            7. 对于如何存储记录数据,选择自动存储所有字段

          添加决策以检查团队成员

          添加决策元素,以避免在没有团队成员时进行处理。

          1. 单击添加元素加号图标,然后搜索并选择决策
          2. 配置决策。
            1. 对于标签,输入找到团队成员?
            2. API 名称自动填写。
            3. 对于结果标签,输入
            4. API 名称自动填写。
            5. 对于资源,从获取业务机会团队成员中选择业务机会联系人角色。
            6. 对于运算符,选择为空
            7. 对于值,选择
            8. 单击默认结果
            9. 对于标签,输入

          添加循环元素

          添加循环元素以迭代团队成员。

          1. 在“是”路径中,单击添加元素加号图标,然后搜索并选择循环
          2. 配置循环。
            1. 对于标签,输入迭代团队成员
            2. API 名称自动填写。
            3. 对于集合变量,从获取业务机会团队成员中选择业务机会联系人角色。
              此资源显示为单数,即使它包含多个记录。
            4. 对于方向,选择第一项到最后一项。

          在循环中构建任务记录

          为循环中的每个团队成员填充 TaskRecord 记录变量的字段值。

          1. 在“每个”后,单击添加元素加号图标,然后搜索并选择分配
          2. 配置分配。
            1. 对于标签,输入构建任务记录
            2. API 名称自动填写。
            3. 对于变量,选择 TaskRecord,然后选择主题
            4. 对于运算符,选择等于
            5. 对于值,输入跟进已结束业务机会
            6. 单击 + 添加分配
            7. 继续添加分配和设置值。
              资源 运算符
              TaskRecord>状态 等于 未开始
              TaskRecord>优先级 等于
              TaskRecord>分配给 ID 等于 来自循环的当前项目>联系人 ID
              TaskRecord>相关 ID 等于 触发业务机会>业务机会 ID

          将任务添加到集合

          将每个任务记录添加到 TasksToCreate 集合变量,以便批量创建。

          1. 在分配元素后,并仍在循环中,单击添加元素加号图标,然后搜索并选择分配
          2. 配置分配。
            1. 对于标签,输入将任务添加到集合
            2. 对于变量,选择 TasksToCreate
            3. 对于运算符,选择
            4. 对于值,选择 TaskRecord,然后选择整个资源

          循环后创建所有任务

          使用单个创建记录元素,以在一个操作中创建所有任务。

          1. 循环结束后,单击添加元素加号图标,然后搜索并选择创建记录
          2. 配置元素。
            1. 对于标签,输入创建所有任务
            2. 对于如何设置记录字段值,选择从记录变量
            3. 对于要创建的记录数量,选择多个
            4. 对于记录集合,选择 TasksToCreate
          3. 保存流。
          4. 对于标签,输入创建业务机会团队成员的任务。
          5. API 名称自动填写。

          添加错误处理

          配置故障管理,以捕获和报告错误。

          1. 要管理错误,请将错误路径添加到创建记录元素。
            1. 单击“创建所有任务”元素上的三个点,并选择添加错误路径
          2. 要通知 Salesforce 管理员错误路径中的失败,请添加发送电子邮件操作。
            1. 在错误路径中,单击添加元素加号图标,然后搜索并选择发送电子邮件
            2. 对于标签,输入通知管理员错误
            3. API 名称自动填写。
            4. 对于收件人地址,输入您想要接收通知的人员的电子邮件地址。
            5. 对于主题,输入需要注意的流
            6. 对于正文,输入“为业务机会团队成员创建任务”流出错。以下是错误:.
            7. 单击插入资源
            8. 选择运行流,然后选择错误消息
          3. 保存操作。

          使用批量数据测试

          测试批量化流需要模拟批量操作。

          1. 要测试单个记录,请使用调试模式更新一个业务机会,并验证流是否正确创建任务。
          2. 启用流。
          3. 要在 Sandbox 中测试批量操作,请使用数据导入向导、Data Loader 或列表视图一次更新多个业务机会。
            1. 创建 10 到 20 个测试业务机会。
            2. 将团队成员添加到每个业务机会。
            3. 使用 Data Loader 或批量更新,以同时将所有业务机会的阶段更改为“已结束并赢得客户”。
            4. 验证流是否创建所有任务没有错误。
          4. 要验证性能,请查看 Apex 调试日志,以确认 CPU 时间消耗在可接受的限制内。

          更多优化技术

          使用这些技术进一步优化批量化流。

          使用条目条件限制执行

          将条件添加到流开始元素,以确保它仅在必要时运行。例如,仅处理超过一定数量或来自特定记录类型的业务机会。

          考虑非关键操作的保存后处理

          保存后记录触发的流可以在您保存业务机会后创建后续任务。它们异步运行,并具有更高的调控器限制。

          非常大的批量的批处理流程

          如果业务机会定期有数十名团队成员,请使用计划流程批量处理已结束的业务机会,而不是实时处理。

          转换现有流

          将循环中具有数据操作语言 (DML) 操作的流转换为批量化模式。

          如果您有循环中的 DML 操作的现有流,请按照以下步骤进行转换。

          1. 要在循环中查找 DML 操作,请识别循环中的所有创建记录、更新记录和删除记录元素。
          2. 对于每个 DML 元素,执行转换。
            1. 要构建记录,请为该对象类型创建记录变量。
            2. 要存储您想要处理的记录,请为该对象类型创建记录集合变量。
            3. 要保存记录的字段值,请使用分配元素将值分配到记录变量。
            4. 要收集要处理的记录,请使用分配将记录变量添加到记录集合。
            5. 为了高效地创建记录,在循环后,添加一个处理整个记录集合的 DML 元素。
          3. 要验证转换,请使用批量数据彻底测试,以验证重构是否正常工作。
           
          正在加载
          Salesforce Help | Article