Loading
Автоматизация бизнес-процессов
Содержание
Выбрать фильтры

          Результаты отсутствуют
          Результаты отсутствуют
          Ниже приведены некоторые советы по поиску.

          Проверьте орфографию ключевых слов.
          Воспользуйтесь более общим поисковым запросом.
          Выберите несколько фильтров для расширения области поиска.

          Выполните поиск по всей справке Salesforce.
          Пример пакетной обработки записей во избежание ограничений процессора

          Пример пакетной обработки записей во избежание ограничений процессора

          Узнайте, как реорганизовать потоки для использования пакетных схем, предотвращающих ошибки Apex_CPU_TIME_LIMIT_EXCEEDED. Этот пример показывает разницу между неэффективным и оптимизированным дизайном потока.

          Требуемые версии

          Просмотр поддерживаемых версий.
          Требуемые полномочия пользователя
          Для открытия, редактирования, создания, активации или деактивации потока посредством всех типов потоков, элементов и функций, доступных в Flow Builder, включая Einstein и Agentforce for Flow: Управление потоком

          Данный пример показывает, как трансформировать поток, выполняющий язык манипуляции данными (DML) внутри цикла, в пакетный поток, эффективно обрабатывающий записи. Просмотрите сравнение до и после и ознакомьтесь с принципами пакетирования потоков.

          Сценарий

          Создайте поток, запущенный записью, который выполняется при закрытии возможности. Для каждой закрытой и реализованной возможности поток создает последующую задачу для каждого участника группы, работающей с возможностями. Поток выполняет действия ниже.

          • Получает всех участников группы, работающей с возможностями.
          • Создает задачу, назначенную каждому участнику рабочей группы.
          • Работает эффективно, даже если пользователи одновременно обновляют несколько возможностей.
          • Избегает ошибок Apex_CPU_TIME_LIMIT_EXCEEDED во время пакетных операций.

          Salesforce применяет одно ограничение времени процессора 10 000 миллисекунд (10 секунд) на синхронную транзакцию. Каждая часть автоматизации в этой транзакции — триггеры Apex, потоки, бизнес-правила и процессы — использует один бюджет. Неэффективная структура потока усугубляет проблему. Другие автоматизации в транзакции сперва сокращают общий бюджет, а неэффективный поток потребляет больше, чем необходимо.

          Порядок выполнения потоков зависит от типа потока. Данный пример использует поток, запущенный записью после сохранения, который выполняется позже в порядке, чем потоки до сохранения. Дополнительную информацию о порядке выполнения см. в разделе Триггеры и порядок выполнения.

          Неэффективный подход: Операции DML внутри цикла

          Этот метод приводит к ошибкам ограничения процессора при обработке нескольких возможностей.

          Структура потока: Поток начинается с потока, запущенного записью, в объекте «Возможность», который выполняется после обновления записи, когда «Этап» равно «Закрыто и реализовано». Поток использует получение записей для получения участников группы, работающей с возможностями, для запускающей записи, а потом выполняет цикл по коллекции. В цикле элемент создания записей создает одну задачу для каждого участника рабочей группы.

          Почему этот метод не удается:

          • Каждая итерация цикла выполняет отдельную операцию DML.
          • Возможность с 5 участниками рабочей группы приводит к 5 операциям DML.
          • Когда пользователи одновременно обновляют 20 возможностей, поток обрабатывает все возможности одной транзакцией.
          • 20 возможностей × 5 участников рабочей группы каждая = 100 операций DML в одной транзакции.
          • Совокупное процессорное время от 100 операций DML превышает контролирующее ограничение.
          • Результат: APEX_CPU_TIME_LIMIT_EXCEEDED error.

          Эффективный подход: Пакетная обработка на основе коллекции

          Этот метод обрабатывает записи эффективно, вне зависимости от объема.

          Структура потока: Поток начинается с потока, запущенного записью, в объекте «Возможность» и использует получение записей для получения участников группы, работающей с возможностями. Поток создает переменную записи задачи и переменную коллекции записи задачи. Переменная записи содержит текущую задачу, над которой работает поток, а коллекция записей содержит задачи для создания. Поток выполняет цикл по участникам рабочей группы. В цикле элемент назначения создает каждую запись задачи посредством установки значений для переменной записи задачи и связывает задачу с текущим участником рабочей группы в цикле. Другой элемент назначения добавляет значения переменной записи задачи в коллекцию записей задачи. После завершения цикла один элемент создания записей создает все задачи из коллекции.

          Почему это работает:

          • Цикл создает коллекцию записей задач без выполнения операций DML.
          • После завершения цикла выполняется только одна операция DML.
          • Возможность с 5 участниками рабочей группы и дальше приводит к 1 операции DML (создание 5 задач одновременно).
          • Когда пользователи одновременно обновляют 20 возможностей, поток выполняет в общей сложности 20 операций DML (по одной на возможность).
          • Значительное сокращение расхода процессорного времени.
          • Результат: Поток выполняется успешно, не достигая контролирующих ограничений.

          Сравнение производительности

          Сценарий Неэффективный (DML в цикле) Эффективное (пакетное)
          1 возможность с 5 участниками рабочей группы 5 операций DML 1 операция DML
          20 возможностей (пакетное обновление) с 5 участниками рабочей группы в каждой

          100 операций DML

          (Скорее всего, ошибка ограничения процессора)

          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. В разделе «Фильтрация записей роли контакта возможности» в поле выберите «Код возможности».
            4. В поле "Оператор" выберите "Равно".
            5. В поле «Значение» выберите «Запуск возможности», а потом «Код возможности».
            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>Status Равно Не начато
              TaskRecord>Priority Равно Высокий
              TaskRecord>Assigned To ID Равно Текущий элемент из цикла>Код контакта
              TaskRecord>Связано с кодом Равно Запуск возможности>Код возможности

          Добавление задач в коллекцию

          Добавьте каждую запись задачи к переменной коллекции TasksToCreate для пакетного создания.

          1. После элемента «Назначение» нажмите «Значок добавления элемента плюс», а потом найдите и выберите «Назначение».
          2. Настройте назначение.
            1. В поле «Метка» введите «Добавить задачу в коллекцию».
            2. В переменной выберите TasksToCreate.
            3. Для оператора выберите «Добавить».
            4. В поле «Значение» выберите TaskRecord, а потом «Весь ресурс».

          Создание всех задач после цикла

          Используйте один элемент создания записей для создания всех задач в одной операции.

          1. После завершения цикла нажмите Значок добавления элемента плюс, а потом найдите и выберите «Создать записи».
          2. Настройте элемент.
            1. В поле «Метка» введите «Создать все задачи».
            2. В поле «Как задать значения полей записи» выберите «В переменной записи».
            3. В поле «Сколько записей для создания» выберите «Несколько».
            4. В коллекции записей выберите «Задачи для создания».
          3. Сохраните поток.
          4. В поле «Метка» введите «Создание задач для участников группы, работающей с возможностями».
          5. Имя API заполняется автоматически.

          Добавление обработки ошибок

          Настройте управление ошибками для сбора ошибок и составления отчетов.

          1. Для управления ошибками добавьте путь ошибки к элементу «Создание записей».
            1. Нажмите на три точки в элементе «Создать все задачи» и выберите «Добавить путь ошибки».
          2. Чтобы уведомить администраторов Salesforce об ошибках на пути ошибки, добавьте действие «Отправка эл. почты».
            1. В пути ошибки нажмите «Значок добавления элемента плюс», а потом найдите и выберите «Отправить электронное сообщение».
            2. В поле «Метка» введите «Уведомить администратора об ошибке».
            3. Имя API заполняется автоматически.
            4. В поле «Адреса получателей» введите адрес эл. почты лица, которое должно получать уведомление.
            5. В поле «Тема» введите Поток требует вашего внимания
            6. В поле «Текст» введите «Ошибка потока создания задач для участников группы, работающей с возможностями». Вот ошибка: .
            7. Нажмите «Вставить ресурс».
            8. Выберите «Текущий поток», а потом выберите «Сообщение об ошибке».
          3. Сохраните выполненную работу.

          Тестирование с помощью пакетных данных

          Тестирование пакетных потоков требует имитации пакетных операций.

          1. Чтобы протестировать отдельную запись, используйте режим отладки для обновления одной возможности и проверки корректности создания задач потоком.
          2. Активируйте поток.
          3. Чтобы протестировать пакетные операции в безопасной среде, используйте мастер импорта данных, приложение Data Loader или списковое представление для одновременного обновления нескольких возможностей.
            1. Создайте от 10 до 20 возможностей тестирования.
            2. Добавьте участников рабочей группы к каждой возможности.
            3. Используйте приложение Data Loader или пакетное обновление для одновременного изменения этапа на «Закрыто и реализовано» во всех возможностях.
            4. Убедитесь, что поток создает все задачи без ошибок.
          4. Для проверки производительности просмотрите журнал отладки Apex, чтобы убедиться, что расход процессорного времени находится в допустимых пределах.

          Дополнительные методы оптимизации

          Дальнейшая оптимизация пакетных потоков с помощью данных методов.

          Использование условий записи для ограничения выполнения

          Добавьте условия к элементу запуска потока, чтобы убедиться, что он выполняется только при необходимости. Например, обрабатывайте только возможности сверх определенного количества или из определенных типов записей.

          Учитывать после сохранения для некритических операций

          Потоки, запущенные после сохранения записи, могут создавать дополнительные задачи после сохранения возможности. Они выполняются асинхронно и имеют более высокие губернаторские ограничения.

          Пакетный процесс для очень больших объемов

          Если возможности регулярно содержат десятки участников рабочей группы, используйте запланированный поток, обрабатывающий закрытые возможности в пакетах, а не в режиме реального времени.

          Преобразование существующих потоков

          Преобразование потоков посредством операций DML в циклах в пакетные схемы.

          Если у вас есть существующие потоки с операциями DML в циклах, выполните данные действия для их преобразования.

          1. Чтобы найти операции DML в циклах, определите все элементы создания записей, обновления записей и удаления записей в циклах.
          2. Для каждого элемента DML выполните преобразование.
            1. Чтобы создать записи, создайте переменную записи для этого типа объекта.
            2. Чтобы сохранить записи, которые нужно обработать, создайте переменную коллекции записей для этого типа объекта.
            3. Чтобы сохранить значения полей для записей, используйте элемент назначения для назначения значений переменной записи.
            4. Чтобы собрать записи для обработки, используйте назначение для добавления переменной записи в коллекцию записей.
            5. Для эффективного создания записей добавьте после цикла один элемент DML, обрабатывающий всю коллекцию записей.
          3. Чтобы проверить преобразование, тщательно протестируйте пакетные данные, чтобы проверить корректность работы рефакторинга.
           
          Загрузка
          Salesforce Help | Article