Jak korzystać z bazy danych. Stanowe w partii Apex w Salesforce
Opublikowany: 2023-11-21Po pierwsze musimy zrozumieć, że jeśli chcemy używać Batch Apex, musimy napisać klasę Apex, która implementuje bazę danych interfejsu udostępnioną przez Salesforce. Batchable, a następnie programowo wywołaj klasę. Aby monitorować lub zatrzymać wykonywanie wsadowego zadania Apex, w Ustawieniach wpisz Apex Jobs w polu Szybkie wyszukiwanie, a następnie wybierz Apex Jobs.
W tym artykule zagłębiamy się w zaawansowane funkcje bazy danych. Stanowy w partii Apex. Zrozumienie bazy danych. Stanowość jest niezbędna do utrzymywania stanu podczas wykonywania zadań wsadowych, umożliwiając programistom zachowanie zmiennych instancji i tworzenie bardziej wyrafinowanych procesów wsadowych uwzględniających stan.
Składnia dla partii:
klasa globalna BatchName implementuje Database.Batchable{}
Metody klasy wsadowej:
globalny (Database.QueryLocator | Iterable) start (Database.BatchableContext bc) { //Tutaj dodamy zapytanie i zwrócimy wynik do metody wykonania } globalne wykonanie void (Database.BatchableContext BC, list<P>){ //Musi tu być logika } globalne wykończenie pustych przestrzeni (Database.BatchableContext BC){ //po przetworzeniu wszystkich partii ta metoda zostanie wywołana. Możemy w nim napisać dowolny kod. Podobnie jak w przypadku chęci wysłania wiadomości e-mail do wszystkich rekordów utworzonych lub zaktualizowanych w metodzie wykonywania. }
Przeczytaj także: Jak utworzyć niestandardowy typ raportu w Salesforce?
Implementacja interfejsu Database.Batchable
Przykład:
klasa globalna BatchAccountUpdate implementuje Database.Batchable{ Zapytanie tekstowe = 'Wybierz nazwę z konta GDZIE Nazwa! = null ORAZ (Nazwa = \'Firma Virendra\' LUB Nazwa = \'Virendra Sharma\') '; globalne uruchomienie bazy danych.QueryLocator (Database.BatchableContext bc) { // zbiera partie rekordów lub obiektów, które mają zostać przekazane do wykonania return Database.getQueryLocator(zapytanie); } globalne wykonanie void (Database.BatchableContext bc, Lista rekordów) { // przetwarza każdą partię rekordów za (Konto: zapisy){ nazwa.akta = nazwa.akta + 'Zaktualizowano'; } aktualizować zapisy; } globalne wykończenie puste (Database.BatchableContext bc){ // wykonaj dowolne operacje przetwarzania końcowego, Wywołaj klasę wsadową. BatchUpdateAccountRelatedContacts b = nowy BatchUpdateAccountRelatedContacts(); Baza danych.executeBatch(b, 200); } }
Baza danych.Stanowy
Następująca przykładowa klasa wyszukuje wszystkie rekordy konta przesłane metodą start() przy użyciu QueryLocator i aktualizuje powiązane kontakty za pomocą adresu pocztowego ich konta. Na koniec wysyła wiadomość e-mail z wynikami zadania zbiorczego oraz, ponieważ do śledzenia stanu używamy Database.Stateful, zaktualizowaną liczbą rekordów.
Przykład:
Baza danych.AllowsCallout
Database.AllowsCallout in Batch pomaga w integracji Salesforce z serwerem zewnętrznym. Aby użyć wywołania w wsadowym Apexie, musimy użyć interfejsu Database.AllowsCallouts w definicji klasy wsadowej.
Składnia:
klasa globalna SearchAndReplace implementuje Database.Batchable, Database.AllowsCallouts{}
Przykład:
Tutaj integruję obiekt Opportunity z Razorsync.com
/*
Uzyskaj zgłoszenie serwisowe od razorsync i zaktualizuj je w Salesforce
*/
klasa globalna Batch_SR_RazorSyncAPI implementuje Database.Batchable, Database.AllowsCallouts{ globalne uruchomienie Database.QueryLocator (Database.BatchableContext BC){ Zapytanie łańcuchowe = 'WYBIERZ Identyfikator, Razorsync_Service_Request_Id__c Z Opportunity WHERE Razorsync_Service_Request_Id__c != null ORAZ Razorsync_Job_Status__c != \'Zadanie wykonane\' ORAZ RazorSync_Status__c = \'Success\''; return Database.getQueryLocator(zapytanie); } globalne wykonanie void (Database.BatchableContext BC, zakres listy){ Stan ciągu; dla (Możliwości: zakres){ //pobierz żądanie usługi System.debug(s.Id); Http http1 = nowy Http(); Żądanie HttpRequest1 = nowe żądanie HttpRequest(); request1.setEndpoint('https://DomainName.0.razorsync.com/ApiService.svc/ServiceRequest/'+ s.Razorsync_Service_Request_Id__c); request1.setMethod('GET'); request1.setHeader('Typ zawartości', 'aplikacja/json'); request1.setHeader('Host', 'NazwaDomeny.0.razorsync.com'); request1.setHeader('Długość treści', '0'); request1.setHeader('Połączenie', 'Keep-Alive'); request1.setHeader('NazwaSerwera', 'NazwaSerweraDomeny'); request1.setHeader('Token', 'XXXXXXXXXXXXXXXXXXXXX'); Odpowiedź HttpResponse1 = http1.send(żądanie1); if(response1.getStatusCode() == 200) { Status; Parser JSONParser = JSON.createParser(response1.getBody()); while(parser.nextToken() != null) { if( (parser.getCurrentToken() == JSONToken.FIELD_NAME) && (parser.getText() == 'StatusId') || Test.isRunningTest()) { parser.nextToken(); StatusId = parser.getText(); } } System.debug(Identyfikator stanu); if(StatusId == String.valueOf(1) || Test.isRunningTest()){ s.Razorsync_Job_Status__c = 'Zadanie wykonane'; s.StageName = 'Zamknięte wygrane'; }w przeciwnym razie{ s.Razorsync_Job_Status__c = 'Praca'; } } } zakres aktualizacji; } globalne wykończenie pustych przestrzeni (Database.BatchableContext BC){ } }
Przeczytaj także: Korzyści z Salesforce Commerce Cloud i wywoływanie przepływów z Apex w Salesforce
Wniosek
Korzystanie z Database.Stateful w Batch Apex w Salesforce pozwala na zachowanie stanu dla różnych metod wykonywania w zadaniu wsadowym. Ma to kluczowe znaczenie w scenariuszach, w których wymagane jest złożone przetwarzanie danych, a stan musi zostać zachowany pomiędzy fragmentami wsadowymi.
Implementując Database.Stateful , programiści mogą zapewnić spójność danych i skutecznie zarządzać dużymi zbiorami danych. Jednak ważne jest, aby korzystać z tej funkcji rozsądnie, aby uniknąć nadmiernego zużycia pamięci i potencjalnych problemów z wydajnością.
Najlepsze praktyki obejmują utrzymywanie zmiennych stanu na minimalnym poziomie i skupianie się na istotnych danych, dzięki czemu Database.Stateful jest potężnym narzędziem do złożonego, zależnego od stanu przetwarzania wsadowego w Salesforce.
Aby uzyskać dalszą pomoc w projekcie Salesforce, zatrudnij nas jako konsultanta Salesforce i czerp korzyści.