Как использовать базу данных. Пакетное управление состоянием 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.
Для дальнейшей помощи в проекте отдела продаж наймите нас в качестве консультанта по продажам и воспользуйтесь преимуществами.
