Как использовать базу данных. Пакетное управление состоянием Apex в Salesforce
Опубликовано: 2023-11-21Во-первых, мы должны понимать, что если мы хотим использовать Batch Apex, мы должны написать класс Apex, который реализует интерфейс базы данных, предоставляемый Salesforce. Пакетный, а затем вызвать класс программно. Чтобы отслеживать или останавливать выполнение пакетного задания Apex, в меню «Настройка» введите «Задания Apex» в поле «Быстрый поиск», затем выберите «Задания Apex».
В этой статье мы углубимся в мощные возможности базы данных. С сохранением состояния в пакетном Apex. Понимание базы данных. Функция отслеживания состояния необходима для поддержания состояния при выполнении пакетных заданий, позволяя разработчикам сохранять переменные экземпляра и создавать более сложные пакетные процессы с учетом состояния.
Синтаксис для пакета:
глобальный класс BatchName реализует Database.Batchable{}
Методы пакетного класса:
global (Database.QueryLocator | Iterable) start (Database.BatchableContext bc) { //Здесь мы добавим запрос и вернем результат для метода выполнения } глобальное недействительное выполнение (Database.BatchableContext BC, list<P>){ //Здесь должна быть логика } глобальное недействительное завершение (Database.BatchableContext BC) { //после обработки всех пакетов будет вызван этот метод. Внутри него мы можем написать любой код. Например, если вы хотите отправить электронное письмо всем записям, которые создаются или обновляются в методе выполнения. }
Читайте также: Как создать настраиваемый тип отчета в Salesforce?
Реализация интерфейса Database.Batchable
Пример:
глобальный класс BatchAccountUpdate реализует Database.Batchable{ Строковый запрос = 'Выберите имя из учетной записи WHERE Name! = null AND (Name = \'Virendra Company\' OR Name = \'Virendra Sharma\') '; global Database.QueryLocator start (Database.BatchableContext bc) { // собираем пакеты записей или объектов, которые нужно передать на выполнение вернуть Database.getQueryLocator(запрос); } global void выполнить (Database.BatchableContext bc, List Records) { // обрабатываем каждый пакет записей для (аккаунт учетной записи: записи) { Имя аккаунта = Имя аккаунта + 'Обновлено'; } обновлять записи; } глобальное недействительное завершение (Database.BatchableContext bc) { // выполняем любые операции постобработки, вызываем пакетный класс. BatchUpdateAccountRelatedContacts b = новый BatchUpdateAccountRelatedContacts (); Database.executeBatch(б, 200); } }
База данных.С состоянием
Следующий пример класса находит все записи учетной записи, переданные методом start(), с помощью QueryLocator, и обновляет связанные контакты с почтовым адресом их учетной записи. Наконец, он отправляет электронное письмо с результатами массового задания, и, поскольку мы используем Database.Stateful для отслеживания состояния, обновляется количество записей.
Пример:
База данных.AllowsCallout
Database.AllowsCallout в пакетном режиме помогает интегрировать Salesforce с внешним сервером. Чтобы использовать выноску в пакетном Apex, мы должны использовать интерфейс Database.AllowsCallouts в определении класса пакета.
Синтаксис:
глобальный класс SearchAndReplace реализует Database.Batchable, Database.AllowsCallouts{}
Пример:
Здесь я интегрирую объект Opportunity с Razorsync.com.
/*
Получите запрос на обслуживание от razorsync и передайте его в отдел продаж.
*/
глобальный класс Batch_SR_RazorSyncAPI реализует Database.Batchable, Database.AllowsCallouts{ глобальный запуск Database.QueryLocator (Database.BatchableContext BC) { Строковый запрос = 'SELECT Id, Razorsync_Service_Request_Id__c FROM Opportunity WHERE Razorsync_Service_Request_Id__c != null AND Razorsync_Job_Status__c != \'Job Done\' AND RazorSync_Status__c = \'Success\''; вернуть Database.getQueryLocator(запрос); } глобальное недействительное выполнение (Database.BatchableContext BC, область списка) { Строковый статус; для (Возможность s: объем){ // получаем запрос на обслуживание System.debug(s.Id); Http http1 = новый Http(); HttpRequest request1 = новый HttpRequest(); request1.setEndpoint('https://DomainName.0.razorsync.com/ApiService.svc/ServiceRequest/'+ s.Razorsync_Service_Request_Id__c); request1.setMethod('GET'); request1.setHeader('Content-Type', 'application/json'); request1.setHeader('Хост', 'ИмяДомена.0.razorsync.com'); request1.setHeader('Content-Length', '0'); request1.setHeader('Соединение', 'Keep-Alive'); request1.setHeader('ИмяСервера', 'ИмяДоменСервера'); request1.setHeader('Токен', 'XXXXXXXXXXXXXXXXXXXXXXXXX'); HttpResponse ответ1 = http1.send(request1); если (response1.getStatusCode() == 200) { Положение дел; Анализатор JSONParser = JSON.createParser(response1.getBody()); while(parser.nextToken() != null) { if( (parser.getCurrentToken() == JSONToken.FIELD_NAME) && (parser.getText() == 'StatusId') || Test.isRunningTest()) { парсер.nextToken(); StatusId = parser.getText(); } } System.debug(StatusId); if(StatusId == String.valueOf(1) || Test.isRunningTest()){ s.Razorsync_Job_Status__c = 'Задание выполнено'; s.StageName = 'Закрытый выигран'; }еще{ s.Razorsync_Job_Status__c = 'Работает'; } } } область обновления; } глобальное недействительное завершение (Database.BatchableContext BC) { } }
Читайте также: Преимущества облака Salesforce Commerce и способы вызова потоков из Apex в Salesforce
Заключение
Использование Database.Stateful в Batch Apex в Salesforce позволяет сохранять состояние при различных методах выполнения пакетного задания. Это крайне важно для сценариев, где требуется сложная обработка данных и состояние должно сохраняться между пакетными фрагментами.
Реализуя Database.Stateful , разработчики могут обеспечить согласованность данных и эффективно управлять большими наборами данных. Однако важно использовать эту функцию разумно, чтобы избежать чрезмерного потребления памяти и потенциальных проблем с производительностью.
Лучшие практики включают сохранение минимальных переменных состояния и сосредоточение внимания на важных данных, что делает Database.Stateful мощным инструментом для комплексной пакетной обработки, зависящей от состояния, в Salesforce.
Для дальнейшей помощи в проекте отдела продаж наймите нас в качестве консультанта по продажам и воспользуйтесь преимуществами.