Будущий метод против. Apex с возможностью постановки в очередь в Salesforce
Опубликовано: 2023-11-20В быстро меняющемся мире разработки Salesforce понимание лучших инструментов и методов эффективного и действенного кодирования имеет решающее значение. В этой статье рассматриваются две ключевые концепции: метод будущего и апекс с очередью. Оба являются мощными методами, используемыми в Salesforce для обработки асинхронных операций, но они имеют разные функции и варианты использования.
Мы рассмотрим нюансы Future Method и Queueable Apex, сравнивая их функциональные возможности, преимущества и случаи использования каждого из них в ваших проектах Salesforce. Независимо от того, являетесь ли вы опытным разработчиком или новичком в Salesforce, это сравнение предоставит ценную информацию, которая поможет вам принять обоснованные решения по оптимизации вашего кода.
Оставайтесь с нами, пока мы разгадываем сложности и раскрываем потенциал Future Method и Queueable Apex в Salesforce!
Оглавление
Почему метод будущего?
Если вы хотите запустить процессы в отдельном потоке позже и хотите выполнить код асинхронно, нам нужно использовать будущие методы.
Когда он используется?
Они используются для длительных операций, таких как вызовы внешних веб-служб или любой операции, которую вы хотели бы выполнить в отдельном потоке.
Почему апекс с возможностью очереди?
Like Future также используется для выполнения асинхронного кода и позволяет добавлять задания в очередь и расширять возможности выполнения асинхронного кода по сравнению с методом Future.
Когда он используется?
Процессы Apex, которые выполняются в течение длительного времени, например обширные операции с базой данных или вызовы внешних веб-служб, можно запускать асинхронно, реализуя интерфейс Queueable.
Читайте также: Как реализовать единый вход в Salesforce с использованием OAuth?
Различия между Future и Queueable Apex:
Будущий метод | Апекс с возможностью постановки в очередь |
---|---|
1. Future никогда не будет использоваться для работы с объектами SObject или типами объектов. 2. При использовании метода будущего мы не можем отслеживать выполняемые задания. 3. Метод Future не может быть вызван внутри класса Future или Batch. 4. Будущий метод никогда не будет поставлен в очередь. | 1. Задания, помещаемые в очередь, могут содержать переменную-член в виде SObject или пользовательских типов Apex. 2. При использовании заданий, помещаемых в очередь, создается AsyncApexJob, который мы можем отслеживать, как запланированные задания. 3. Apex, помещаемый в очередь, может быть вызван из будущего и пакетного класса. 4. Использование Queueable Apex будет объединять задания в очередь, а в Developer Edition это всего 5 заданий. |
Апекс с возможностью постановки в очередь
Класс Queueable — это класс, который создается путем реализации предопределенного интерфейса Queueable. Этот интерфейс позволяет выполнять асинхронные задания или код задания по сравнению с будущим методом. Это позволит вам отслеживать задания, находящиеся в очереди (эта очередь создается интерфейсом Queueable, чтобы задания могли выполняться асинхронно).
Синтаксис:
public class <Имя класса Queueable> реализует Queueable { //Это единственный метод, который содержится в интерфейсе Queueable и требуется для наследования этого метода в классе Queueable. public void выполнить (контекст QueueableContext) { //Код, который необходимо выполнить } }
Любой процесс Apex, выполнение которого занимает много времени, например обширные операции с базой данных или вызовы внешних веб-служб, можно запустить асинхронно, реализовав интерфейс Queueable и добавив задание в очередь заданий Apex.
Асинхронное задание Apex выполняется в фоновом режиме в отдельном потоке и не задерживает выполнение основной логики Apex. Каждое задание в очереди запускается, когда становятся доступны системные ресурсы. Преимущество использования методов интерфейса состоит в том, что некоторые ограничения регулятора выше, чем для синхронного Apex, например ограничения размера кучи.
Будущий метод Apex
Будущий апекс используется для запуска процессов в отдельном потоке позже, когда системные ресурсы станут доступны. Для использования будущего апекса нам не нужно создавать какой-либо класс, нам просто нужно использовать аннотацию «@future», чтобы идентифицировать методы, которые работают асинхронно, и обозначить, что метод, описанный ниже этой аннотации, является методом будущего.
При использовании синхронной обработки все вызовы методов выполняются из того же потока, в котором выполняется код Apex, и никакая дополнительная обработка не может выполняться до завершения процесса. Вы можете использовать будущие методы для любой операции, которую хотите выполнить асинхронно, в отдельном потоке. Это обеспечивает преимущества, заключающиеся в том, что пользователь не блокирует выполнение других операций, а также обеспечивает более высокие ограничения регулятора и выполнения для процесса.
Синтаксис:
глобальный класс <ИмяКласса> { //Ниже приведена будущая аннотация, которая определяет, что данный метод является будущим методом. @будущее public static void <FutureMethodName>(List<Id> RecordIds) { Список учетных записей <Контакт> = [Выберите идентификатор, имя, фамилию из контакта, где идентификатор IN :recordIds]; // обрабатываем записи контактов, чтобы делать крутые вещи } }
Читайте также: Как подключить интеграцию Pipedrive и Salesforce?
Методы будущего обычно используются для
Вызовы внешних веб-сервисов. Если вы делаете вызовы из триггера или после выполнения операции DML, вы должны использовать будущий метод или метод с постановкой в очередь. Вызов в триггере будет держать соединение с базой данных открытым в течение всего времени существования вызова.
Операции, которые вы хотите запускать в отдельном потоке, когда позволяет время, например какие-то ресурсоемкие вычисления или обработка записей.
Примечание. Причина объектов не может быть передана в качестве аргументов будущему методу, поскольку объект может измениться между моментом вызова метода и временем его фактического выполнения. Будущие методы запускаются, когда системные ресурсы становятся доступными. Когда будущий метод выполняется, он может иметь старое значение объекта, что может вызвать самые разные плохие вещи.
То, что нужно запомнить
- Будущий метод должен быть статическим
- Тип возвращаемого значения должен быть недействительным.
- Указанные параметры должны быть примитивными типами данных, массивами примитивных типов данных или коллекциями примитивных типов данных.
- Вы можете вызывать будущие методы так же, как и любой другой метод. Однако будущий метод не может вызывать другой будущий метод.
- Не более 50 вызовов методов на один вызов Apex.
- Асинхронные вызовы, такие как @future или ExecuteBatch, вызываемые в блоке startTest, stopTest, не учитываются в ваших ограничениях на количество заданий в очереди.
Пример метода Future и класса, помещаемого в очередь
Здесь я получаю стоимость 4 валют в канадском долларе. Для фунтов стерлингов, долларов США, австралийских долларов, канадских долларов. И сохранение значения в валюте пользовательских метаданных. Для HTTPREQUEST я использовал метод Future. И поскольку при запуске пакета одновременно обновляется несколько записей, я использовал Queueable Apex, который обновляет несколько записей одновременно.
Пользовательское обновление пользовательских метаданных
Класс с возможностью постановки в очередь
Вызов метода Future и отправка списка для обновления в классе Queueable
Emizentech — это аутентичная и опытная консалтинговая компания по продажам, и наши опытные разработчики по продажам могут предоставить вам профессиональную помощь в вашем следующем проекте по продажам.