wprowadzenie
w przypadku scenariuszy biznesowych, które wymagają platformy do przetwarzania ponad 50000 rekordów, Batch Apex przychodzi z pomocą. Batch Apex ułatwia asynchroniczne przetwarzanie rekordów w wielu partiach lub fragmentach i jest łatwy do wdrożenia dla programisty.
implementacja Batch Apex
Batch Apex implementuje bazę danych.interfejs dozowalny. Interfejs posiada metody Start (), Execute() i Finish (), które powinny być zaimplementowane w klasie Apex.
- Startmethod: metoda Start jest punktem zbierania rekordów do przetworzenia w metodzie execute Apex partii
- metoda Execute: rzeczywiste przetwarzanie rekordów odbywa się w metodzie execute.
- metoda wykończenia: Metody Finish mogą mieć akcje przetwarzania post job, takie jak wysyłanie wiadomości e-mail lub mogą być również używane do łańcuchowania innej klasy wsadowej.
planowanie partii Apex
Metoda 1: Korzystanie z funkcji OOTB Schedule Apex
kroki:
- kliknij Ustawienia i wyszukaj klasy Apex w oknie szybkiego wyszukiwania.
- kliknij przycisk Schedule Apex w górnym panelu.
3. Wypełnij informacje na stronie rekordu Apex harmonogramu i zapisz. Klasa apex powinna być klasą Schedulera implementującą metodę executebatch (batch).
fragment kodu dla klasy Scheduler:
global class AccBatchScheduleClass implements Schedulable { global void execute(SchedulableContext ctx) { AccBatchApex batch = new AccBatchApex(); database.executebatch(batch); }}
Metoda 2: wywoływanie klasy wsadowej za pomocą Schedulable Apex:
należy utworzyć klasę Apex, która powinna implementować Schedulable apex. Planowany apex musi zaimplementować System.Metoda Schedule () do zapytania wierzchołka partii w kolejce wykonania. System.Metoda Schedule () oczekuje trzech argumentów: nazwy zadania, wyrażenia Cron dla harmonogramu partii i nazwy klasy partii.
przykładowy planowany Apex:
Batch Apex Chaining
z początkiem wersji API 29.0 i po, Klasa wsadowa może być połączona łańcuchowo z inną klasą wsadową. Łańcuchowanie wsadu Apex uruchamia wykonywanie klasy wsadowej łańcuchowej po zakończeniu wykonywania klasy wsadowej bazowej. Maksymalnie można połączyć ze sobą tylko 5 zadań wsadowych. Przykładowy fragment kodu do łączenia wierzchołka partii jest zilustrowany poniżej:
przykład wierzchołka partii
przypadek użycia: wypełnij Stan rozliczeniowy jako Kalifornia dla wszystkich kont z krajem jako USA i bez informacji o stanie rozliczeniowym.
Projektowanie Rozwiązań: Org ma ponad 50 000 rekordów, które należy przeszukiwać pod kątem brakujących informacji o stanie Fakturowania, więc pisanie Apex partii jest optymalnym rozwiązaniem. Również wyzwalacze, przepływy pracy, twórcy procesów itp. będzie potrzebował operacji DML, aby wystrzelić, więc te rozwiązania nie pasują do wymagań biznesowych.
rzeczy do zapamiętania
- można jednocześnie kolejkować lub aktywować do 5 zadań wsadowych.
- Maksymalna liczba partii wykonania metody Apex w ciągu 24 godzin wynosi 250 000 lub liczba licencji użytkownika w organizacji pomnożona przez 200-w zależności od tego, która z tych wartości jest większa.
- w obiekcie QueryLocator można zwrócić maksymalnie 50 milionów rekordów. Jeśli zostanie zwróconych więcej niż 50 milionów rekordów, zadanie wsadowe zostanie natychmiast zakończone i oznaczone jako nieudane.
- jeśli startmethod klasy batch zwraca QueryLocator, opcjonalny parametr zakresu executeBatch może mieć maksymalną wartość 2000.
- jeśli metoda start klasy batch Zwraca wartość iteracyjną, wartość parametru scope nie ma górnego limitu.
- metody start, execute i finish mogą zaimplementować do 100 objaśnień każda. Zaimplementuj AllowsCallouts, aby włączyć objaśnienia z wierzchołka partii.
- metody zadeklarowane jako przyszłe nie mogą być wywoływane z klasy Apex.
- wszystkie metody w klasie muszą być zdefiniowane jako globalne lub publiczne.
Optymalizacja Twojej implementacji
- wsadowe zadania Apex działają szybciej, gdy startmethod zwraca obiekt QueryLocator, który nie zawiera powiązanych rekordów za pośrednictwem podquery. Unikanie pod-zapytań relacji w Querylocatorze pozwala na uruchamianie zadań wsadowych przy użyciu szybszej, pociętej implementacji.
- aby zapewnić szybką realizację zadań wsadowych, Minimalizuj czasy wywoływania usług internetowych i dostrajaj zapytania używane w kodzie Apex partii.
- dla każdego 10 000 rekordów AsyncApexJobrecords Apex tworzy rekord AsyncApexJob typu BatchApexWorker do użytku wewnętrznego. Podczas zapytania o wszystkie rekordy AsyncApexJob zalecamy odfiltrować rekordy typu BatchApexWorker za pomocą JobType
- w celu ponownego obliczenia udostępniania, zalecamy wykonanie metody usuń, a następnie ponownie utwórz wszystkie zarządzane udostępnianie Apex dla rekordów w partii. Proces ten zapewnia, że udostępnianie jest dokładne i kompletne.
- użyj metod testowych startTest i stopTest wokół metody executeBatch, aby upewnić się, że zakończy się przed kontynuowaniem testu.