Jak korzystać z bazy danych. Stanowe w partii Apex w Salesforce

Opublikowany: 2023-11-21

Po 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 stanowa

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.

kod stanowy bazy danych
kod stanowy bazy danych

Przykład:

zatrudnij programistów Salesforce

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.