Salesforce Apex - Gubernator ograniczenia

Salesforce Apex - Gubernator ograniczenia

Salesforce pozwala nam przetwarzać lub wykonywać określoną liczbę oświadczeń/rekordów. Istnieją pewne limity dla instrukcji DML, klas wierzchołków itp., Aby wykonać lub przetwarzać. Te granice są znane jako granice gubernatora. W tym samouczku zobaczymy, jakie są granice gubernatora i jak można je rozwiązać. Ponadto Salesforce APEX zapewnia klasę „limitu”, aby poznać limity związane z obojętnością, klasami Apex, komponentami Błyskawicy, instrukcjami SOSL i SOQL.

Gubernator limity

Rozważ scenariusz, w którym Alish i Subash to dwie osoby korzystające z Org Salesforce. Alice chce przetworzyć lub wykonać 1000 instrukcji DML w jednej transakcji. Równolegle, Subash chce załadować 5000 rekordów jednocześnie. Jeśli zrobią to równolegle, Salesforce nie zaakceptuje i staje się gorączkowy. Stąd granice gubernatora pojawiają się w obrazie. W takim przypadku Alish może przetwarzać 100 DML na raz, a subash może przetwarzać 500 rekordów jednocześnie. Mogą używać wierzchołka asynchronicznego do wykonywania każdej transakcji w osobnym wątku bez zakłócania każdego z nich i wykonania zadania.

Zasadniczo gubernator limitów Salesforce ograniczają przetwarzanie i wykonywanie w wielu transakcjach. Liczba „wierzchołków wierzchołków na transakcję” dla każdej transakcji, a „limit wierzchołka szczytu specyficznego dla wielkości” dotyczy rozmiaru kodu. Salesforce obsługuje dwa procesy: procesy synchroniczne i asynchroniczne. W procesie synchronicznym skrypt wierzchołkowy jest wykonywany w jednym Go, podczas gdy w procesie asynchronicznym skrypt wierzchołkowy jest wykonywany przez podział na wiele zadań.

Dozwolone limity

Omów liczbę limitów dla różnych scenariuszy:

  1. Możliwe może być przetworzenie/uruchomienie 100 zapytań SOQL w synchronicznym wierzchołku i 200 zapytań SOQL w Asynchronicznym wierzchołku.
  2. Tylko 50 000 rekordów powróci z zapytania SOQL zarówno dla szczytu synchronicznego, jak i asynchronicznego.
  3. Jeśli używamy bazy danych.getQueryLocator (), tylko 10 000 jest zwracanych jednocześnie dla wierzchołka synchronicznego i asynchronicznego.
  4. W obu scenariuszach liczba wydanych zapytań SOSL wynosi 20.
  5. Rozmiar sterty wymagany do przetworzenia synchronicznego wierzchołka wynosi 6 MB. W przypadku wierzchołka asynchronicznego wymagany rozmiar sterty jest podwójny, co czyni go 12 MB.
  6. Maksymalny czas procesora, który jest dozwolony dla synchronicznego wierzchołka wynosi 10 000 milisekund i 60 000 milisekund dla asynchronicznego wierzchołka.
  7. Dopuszcza się tylko 10 minut na wykonanie obu wierzchołków.
  8. W obu przypadkach możemy użyć tylko 10 metody sendEmail () ze 100 odbiorcami.
  9. Postacie obecne w klasie wierzchołkowej lub w spustu wierzchołkowym muszą być w odległości 1 miliona.
  10. W wierzchołku wsadowym (asynchroniczny) rozmiar wynosi 200. QueryLocator () klasy „baza danych” zwraca 50 milionów rekordów na transakcję.
  11. Tylko 5 miejsc pracy wierzchołkowych będzie w kolejce lub aktywnie.

Ogranicz przykład klasy:

Apex może określić limity gubernatora w klasie „limitu”. Ta klasa zawiera niektóre metody, które wskazują gubernatorowi limity. Spójrzmy na poniższy przykład, który wykazuje limity gubernatora:

System.Debugowanie („Liczba zagregowanych zapytań można przetwarzać:”+ limity.getlimitagregregatequeries ());
System.debugowanie („można przetwarzać liczbę instrukcji usług internetowych:”+ limity.getLimitCallouts ());
System.debugowanie („można przetwarzać liczbę rekordów:”+ limity.getLimitdmlrows ());
System.debugowanie („Liczba instrukcji DML można nazwać:”+ limity.getLimitdmlStatements ());
System.debugowanie („całkowita kwota pamięci w bajtach:”+ limity.getLimitheapSize ());
System.debugowanie („można wydać liczbę zapytań SOQL:”+ limity.getLimitqueries ());
System.debugowanie („można wydać liczbę rekordów:”+ limity.getLimitQueryRows ());
System.debugowanie („można wydać liczbę zapytań SOSL:”+ limity.getLimitsoSlqueries ());

Wyjście:

Możliwe jest również sprawdzenie, ile instrukcji/wierszy DML można zwrócić za pomocą metod „kopuły”, które są obecne w klasie „Limit”.

  1. Limity.getDMlStatements () Zwraca całkowite instrukcje DML używane w instancji.
  2. Limity.getdmlrows () zwraca całkowitą liczbę wierszy zwracanych przez instrukcje DML.
  3. Limity.getCputime () Zwraca procesor wykorzystany czas na bieżącą transakcję w milisekundach.

Przykład użycia:

Napiszmy zapytanie SOQL, które zwraca dwie rekordy z obiektu „Workorder”. Następnie usuń te dwa rekordy za pomocą „Usuń” DML.

System.debugowanie („Oświadczenia DML:”+limity.getDMlStatements ());
System.debugowanie („wiersze:”+limity.getdmlrows ());
System.debugowanie („czas procesora”+limity.getCputime ());
// Zapytanie SoQL, aby wybrać 2 wiersze z obiektu Workorder
LIST RACHOWY = [Wybierz ID z Limit Workorder 2];
// Użyj Usuń DML, aby usunąć dwa wiersze
usunąć konta;
System.debug ('** po Soql: **');
System.debugowanie („Oświadczenia DML:”+limity.getDMlStatements ());
System.debugowanie („wiersze:”+limity.getdmlrows ());
System.debugowanie („czas procesora”+limity.getCputime ());

Wyjście:

W danym przykładzie nie ma instrukcji DML i 0 wierszy. Istniejący czas procesora wynosi 1 milisekundy. Po zwróceniu 2 wierszy z zapytania SOQL i usunięciu tych dwóch wierszy, całkowita liczba instrukcji DML, które są zwracane przez limity.getDMlStatements () to 1, całkowite rzędy zwrócone przez limity.getdmlrows () wynosi 2, a czas procesora, który jest potrzebny do wykonania tej transakcji, wynosi 51 milisekund.

Przykład najlepszej praktyki: „Nigdy nie używaj DML wewnątrz pętli”

Zobaczmy, jak możemy uruchomić kod bez uzyskania limitu gubernatora. Najpierw tworzymy rekord na obiekcie „Produkt” (API - Product2) z obiektu „Workorder”, przypisując „Workorder” pod warunkiem „nazwy produktu” w samej pętli „for” samej. Zobaczmy następujący kod:

Product2 Prod_Obj;
dla (WorkOrder WO_Object: [Wybierz temat z WorkOrder])

produkt_obj = nowy produkt2 (name = WO_Object.Temat);
wstaw PROD_OBJ;

Możemy to zrobić w lepszy sposób, deklarując listę (PROD_S), a następnie przechowywanie Prod_Obj na liście. Możemy wstawić tę listę do produktu poza pętlą.

Lista produkt_s = nowa lista ();
Product2 Prod_Obj;
dla (WorkOrder WO_Object: [Wybierz temat z WorkOrder])

produkt_obj = nowy produkt2 (name = WO_Object.Temat);
Prod_s.add (PROD_OBJ);

wstaw PROD_OBJ;

Wniosek

Teraz dowiedzieliśmy się, jakie limity wierzchołkowe są w Salesforce ze szczegółowym wyjaśnieniem. Lepiej jest iść z asynchronicznym procesem wierzchołkowym, aby uzyskać lepsze granice gubernatora w porównaniu z synchronicznym wierzchołkiem. Dowiedzieliśmy się również o granicach gubernatora dla różnych scenariuszy i przedstawiliśmy przykładową demonstrację dotyczącą liczby limitów z klasy „limitu”. Weryfikowaliśmy również liczbę instrukcji DML, wierszy i czasu procesora, uruchamiając jedno instrukcja DML. Zakończyliśmy ten przewodnik, omawiając jeden przykład najlepszych praktyk.