Výukový program APEX: Třída programování Apex a příklady kódování
Co je Apex v Salesforce?
Vrchol je objektově orientovaný a silně typovaný programovací jazyk vyvinutý společností Salesforce pro vytváření softwaru jako služby (SaaS) a řízení vztahů se zákazníky (CRM). Apex pomáhá vývojářům vytvářet aplikace SaaS třetích stran a přidávat obchodní logiku do systémových událostí tím, že poskytuje podporu back-end databází a rozhraní klient-server.
Apex pomáhá vývojářům přidat obchodní logiku do systémových událostí, jako jsou kliknutí na tlačítka, související aktualizace záznamů a stránky Visualforce. Apex má podobnou syntaxi jako Java. Zaregistrujte se do Salesforce se dozvíte, jak CRM funguje
Vlastnosti programovacího jazyka Apex
Zde jsou důležité funkce Salesforce Apex:
- Apex je jazyk, který nerozlišuje malá a velká písmena.
- Můžete provádět operace DML jako INSERT, UPDATE, UPSERT, DELETE na záznamech sObject pomocí apex.
- Záznamy sObject můžete dotazovat pomocí SOQL (jazyk dotazování objektů salesforce) a SOSL (jazyk pro vyhledávání objektů salesforce) v apexu.
- Umožňuje vytvořit a jednotkový test a provést je, abyste ověřili pokrytí kódem a účinnost kódu v apex.
- Apex se spouští v prostředí s více nájemci a Salesforce definoval některé limity regulátoru, které uživateli brání v ovládání sdílených prostředků. Jakýkoli kód, který překročí limit správce Salesforce, selže, zobrazí se chyba.
- Objekt Salesforce lze použít jako datový typ v apexu. Například -
Account acc = new Account();
,zde Účet je standardní objekt salesforce.
- Apex se automaticky upgraduje s každou verzí Salesforce.
Kdy by měl vývojář zvolit Apex
Apex kód by měl být napsán pouze v případě, že je obchodní scénář příliš složitý a nelze jej implementovat pomocí předem vytvořené funkce poskytované Salesforce.
Následuje několik scénářů, kdy potřebujeme napsat apex kód:
- Chcete-li vytvořit webové služby, které integrují Salesforce s jinými aplikacemi.
- Implementovat vlastní ověřování na objektech.
- Spuštění vlastní logiky vrcholu při provádění operace DML.
- Implementovat funkcionalitu, kterou nelze implementovat pomocí stávajících pracovních toků a funkcí tvůrců procesů.
- Zřídit e-mailové služby, musíte zahrnout zpracování obsahu, záhlaví a příloh e-mailu pomocí apex kódu.
Pracovní Struktura Apexu
Nyní se v tomto tutoriálu Apex seznámíme s pracovní strukturou Apex:
Následuje postup akcí pro apex kód:
- Akce vývojáře: Veškerý apex kód napsaný vývojářem je zkompilován do sady instrukcí, které jsou srozumitelné pro apex runtime interpret, když vývojář uloží kód na platformu a tyto instrukce pak uloží jako metadata na platformu.
- Akce koncového uživatele: Když uživatelská událost spustí apexový kód, platformový server získá zkompilované instrukce z metadat a spustí je přes apexový interpret, než vrátí výsledek.
Syntaxe vrcholu
Proměnná deklarace
Protože apex je silně typovaný jazyk, je povinné deklarovat proměnnou s datovým typem v apexu.
Například:
contact con = new contact();
zde je proměnná con deklarována s kontaktem jako datovým typem.
SOQL dotaz
SOQL je zkratka pro salesforce object query language. SOQL se používá k načítání záznamů sObject z databáze Salesforce. Například-
Account acc = [select id, name from Account Limit 1];
Výše uvedený dotaz načte záznam účtu z databáze salesforce.
Příkaz smyčky
Příkaz Loop se používá k iteraci záznamů v seznamu. Počet iterací se rovná počtu záznamů v seznamu. Například:
list<Account>listOfAccounts = [select id, name from account limit 100]; // iteration over the list of accounts for(Account acc : listOfAccounts){ //your logic }
Ve výše uvedeném fragmentu kódu je listOfAccounts proměnná datového typu seznamu.
Prohlášení o řízení toku
Příkaz řízení toku je výhodný, když chcete provést některé řádky kódu na základě určitých podmínek.
Například:
list<Account>listOfAccounts = [select id, name from account limit 100]; // execute the logic if the size of the account list is greater than zero if(listOfAccounts.size() >0){ //your logic }
Výše uvedený fragment kódu dotazuje záznamy účtů z databáze a kontroluje velikost seznamu.
prohlášení DML
DML je zkratka pro jazyk manipulace s daty. Příkazy DML se používají k manipulaci s daty v databázi Salesforce. Například -
Account acc = new Account(Name = ‘ Test Account’); Insert acc; //DML statement to create account record.
Vývojové prostředí Apex
Nyní v tomto tutoriálu programování Apex se dozvíme o vývojovém prostředí Apex:
Apex kód lze vyvinout buď v sandboxu, nebo ve vývojářské edici Salesforce.
Nejlepším postupem je vyvinout kód v prostředí sandbox a poté jej nasadit do produkčního prostředí.
Nástroje pro vývoj apex kódu: Následují tři nástroje dostupné pro vývoj apex kódu ve všech edicích Salesforce.
- Vývojářská konzole Force.com
- Force.com IDE
- Editor kódu v uživatelském rozhraní SalesforceYou
Typ dat v Apexu
Následují datové typy podporované apexem:
Primitivní
Celé číslo, Double, Long, Date, Date Time, String, ID a Boolean jsou považovány za primitivní datové typy. Všechny primitivní datové typy jsou předávány hodnotou, nikoli odkazem.
Kolekce
V Apexu jsou k dispozici tři typy kolekcí
- Seznam: Je to uspořádaná kolekce primitiv, sObjects, kolekce nebo Apex objektů na základě indexů.
- Sada: Neuspořádaná sbírka jedinečných primitiv.
- Mapa: Je to kolekce jedinečných, primitivních klíčů, které se mapují na jednotlivé hodnoty, které mohou být primitivy, objekty sObjects, kolekce nebo objekty Apex.
sObject
Toto je speciální datový typ v Salesforce. Je to podobné jako u stolu v SQL a obsahuje pole, která jsou podobná sloupcům v SQL.
Výčty
Enum je abstraktní datový typ, který ukládá jednu hodnotu z konečné sady zadaných identifikátorů
vyučování
Objekty
Odkazuje na jakýkoli datový typ, který je podporován v Apex.
rozhraní
Apex Access Specifier
Následuje specifikátor přístupu podporovaný apexem:
Veřejné
Tento specifikátor přístupu umožňuje přístup ke třídě, metodě, proměnné, kterou má použít apex v rámci jmenného prostoru.
soukromý
Tento specifikátor přístupu umožňuje přístup ke třídě, metodě, proměnné, která má být použita lokálně nebo v rámci sekce kódu, je definována. Všechny techniky, proměnné, které nemají definován žádný specifikátor přístupu, mají výchozí specifikátor přístupu private.
Chráněný
Tento specifikátor přístupu umožňuje přístup k metodě, proměnné, kterou mohou používat všechny vnitřní třídy v rámci definující třídy Apex.
Globální
Tento specifikátor přístupu umožňuje přístup ke třídě, metodě, proměnné, kterou má použít apex v rámci jmenného prostoru i mimo něj. Je osvědčeným postupem nepoužívat globální klíčové slovo, dokud to není nutné.
Klíčová slova v Apexu
Se sdílením
Pokud je pomocí tohoto klíčového slova definována třída, jsou vynucena všechna pravidla sdílení, která se vztahují na aktuálního uživatele, a pokud toto klíčové slovo chybí, kód se spustí v kontextu systému.
Pro příklad:
public with sharing class MyApexClass{ // sharing rules enforced when code in this class execute }
Bez sdílení
Pokud je pomocí tohoto klíčového slova definována třída, nebudou vynucována všechna pravidla sdílení platná pro aktuálního uživatele.
Pro příklad:
public without sharing class MyApexClass{ // sharing rules is not enforced when code in this class execute }
statický
Proměnná, metoda je definována pomocí klíčového slova static, je jednou inicializována a přidružena ke třídě. Statické proměnné, metody lze volat podle názvu třídy přímo bez vytvoření instance třídy.
Poslední
Konstantu Method je definována s klíčovým slovem final nelze přepsat. Například:
public class myCls { static final Integer INT_CONST = 10; }
Pokud se pokusíte přepsat hodnotu této proměnné INT_CONST, dostanete výjimku – System.FinalException: Finální proměnná již byla inicializována.
Návrat
Toto klíčové slovo vrací hodnotu z metody. Například:
public String getName() { return 'Test' ; }
Null
Definuje nulovou konstantu a může být přiřazena k proměnné. Například
Boolean b = null;
Virtuální
Pokud je třída definována pomocí virtuálního klíčového slova, lze ji rozšířit a přepsat.
Abstraktní
Pokud je třída definována s klíčovým slovem abstract, musí obsahovat alespoň jednu metodu s klíčovým slovem abstract a tato metoda by měla mít pouze podpis.
Například
public abstract class MyAbstrtactClass { abstract Integer myAbstractMethod1(); }
Apex String
Řetězec je sada znaků bez omezení počtu znaků. Například:
String name = 'Test';
Existuje několik vestavěných metod, které poskytuje třída String v salesforce. Následuje několik často a nejčastěji používaných funkcí:
zkrátit (maxWidth)
Tato metoda zkrátí řetězec na zadanou délku a vrátí jej, pokud je délka daného řetězce delší než zadaná délka; jinak vrátí původní řetězec. Pokud je hodnota proměnné maxWidth menší než 4, tato metoda vrátí výjimku za běhu – System.StringException: Minimální šířka zkratky je 4
Například:
String s = 'Hello World'; String s2 = s.abbreviate(8); System.debug('s2'+s2); //Hello...
velká písmena()
Tato metoda převede první písmeno řetězce na velikost písmen a vrátí je.
Například:
String s = 'hello; String s2 = s.capitalize(); System.assertEquals('Hello', s2);
obsahuje (podřetězec)
Tato metoda vrátí hodnotu true, pokud String volající metodu obsahuje zadaný podřetězec.
String name1 = 'test1'; String name2 = 'test2'; Boolean flag = name.contains(name2); System.debug('flag::',+flag); //true
rovná se(stringOrId)
Tato metoda vrátí hodnotu true, pokud předaný parametr není null a označuje stejnou binární sekvenci znaků jako řetězec, který metodu volá.
Při porovnávání hodnot ID nemusí být délka ID stejná. Například: pokud je řetězec, který představuje 15 znaků id, porovnán s objektem, který představuje 18 znaků ID, tato metoda vrátí hodnotu true. Například:
Id idValue15 = '001D000000Ju1zH'; Id idValue18 = '001D000000Ju1zHIAR'; Boolean result4 = stringValue15.equals(IdValue18); System.debug('result4', +result4); //true
Ve výše uvedeném příkladu metoda equals porovnává 15znakový objekt Id s 18znakovým objektovým ID a pokud oba tyto id představují stejnou binární sekvenci, vrátí hodnotu true.
Tuto metodu použijte k porovnání velikosti písmen.
escapeSingleQuotes(stringToEscape)
Tato metoda přidá před každou jednoduchou uvozovku v řetězci znak escape (\) a vrátí ji. Tato metoda zabraňuje vkládání SOQL při vytváření dynamického dotazu SOQL. Tato metoda zajišťuje, že všechny jednoduché uvozovky jsou považovány za uzavírající řetězce namísto databázových příkazů.
Například:
String s = 'Hello Tom'; system.debug(s); // Outputs 'Hello Tom' String escapedStr = String.escapeSingleQuotes(s); // Outputs \'Hello Tom\'
odstranit (podřetězec)
Tato metoda odstraní veškerý výskyt zmíněného podřetězce z String, který metodu volá, a vrátí výsledný řetězec.
Například
String s1 = 'Salesforce and force.com'; String s2 = s1.remove('force'); System.debug( 's2'+ s2);// 'Sales and .com'
podřetězec (startIndex)
Tato metoda vrací podřetězec začínající od znaku na startIndex sahá až k poslednímu z řetězce.
Pro příklad:
String s1 = 'hamburger'; String s2 = s1.substring(3); System.debug('s2'+s2); //burger
zvrátit()
Tato metoda obrátí všechny znaky řetězce a vrátí jej. Například:
String s = 'Hello'; String s2 = s.reverse(); System.debug('s2::::'+s2);// olleH // Hello
trim(): Tato metoda odstraní všechna úvodní bílá místa z řetězce a vrátí jej.
valueOf(toConvert)
Tato metoda vrací řetězcovou reprezentaci předávaného objektu.
Apex Governor Limits
Limity Apex Governor jsou limity vynucené apex runtime enginem, aby bylo zajištěno, že žádný kód apexu dráhy a procesy neřídí sdílené prostředky a nenarušují zpracování pro ostatní uživatele v prostředí s více nájemci. Tyto limity jsou ověřovány proti každé apexové transakci. Níže jsou uvedeny limity guvernéra definované salesforce pro každou transakci vrcholu:
Description | Omezit |
---|---|
SOQL dotazy, které lze provést v synchronní transakci | 100 |
Dotazy SOQL, které lze provést v asynchronní transakci | 200 |
Záznamy, které lze získat dotazem SOQL | 50000 |
Záznamy, které lze načíst pomocí Database.getQueryLocator | 10000 |
SOSL dotazy, které lze provést v apex transakci | 20 |
Záznamy, které lze získat dotazem SOSL | 2000 |
Příkazy DML, které lze provést v apex transakci | 150 |
Záznamy, které lze zpracovat jako výsledek příkazu DML, Approval.process nebo database.emptyRecycleBin | 10000 |
Popisky, které lze provést v apex transakci. | 100 |
Kumulativní časový limit pro všechna volání, která jsou prováděna v transakci vrcholu | 120 sekund |
Omezte úlohy vrcholů, které lze přidat do fronty pomocí System.enqueueJob | 50 |
Časový limit pro každou transakci Apex | 10 minut |
Omezte počet znaků, které lze použít ve třídě apex a spouště | 1 milionu |
Časový limit CPU pro synchronní transakci | 10,000 milisekund |
Časový limit CPU pro asynchronní transakci | 60,000 milisekund |
Apex Getter a Setter
Vlastnost Apex je podobná jako proměnná apex. Getter a setter jsou nezbytné pro vlastnost apex. Getter a setter lze použít ke spuštění kódu před přístupem k hodnotě vlastnosti nebo její změnou. Kód v přístupovém objektu get se spustí při čtení hodnoty vlastnosti. Kód v přístupovém objektu sady se spustí, když se změní hodnota vlastnosti. Jakákoli vlastnost s přístupovým objektem get je považována pouze za čtení, jakákoli vlastnost s nastaveným přístupovým objektem je považována za zapisovající pouze jakákoli vlastnost, která má přístupový objekt get i set, je považována za vlastnost pro čtení i zápis. Syntaxe vlastnosti apex:
public class myApexClass { // Property declaration access_modifierreturn_typeproperty_name { get { //code } set{ //code } }
Access_modifier je zde modifikátor přístupu vlastnosti. return_type je datový typ vlastnosti. název_vlastnosti je název vlastnosti.
Níže je uveden příklad vlastnosti apex, která má přístupový objekt get i set.
public class myApex{ public String name{ get{ return name;} set{ name = 'Test';} } }
Zde je název vlastnosti name a je to veřejná vlastnost a vrací řetězec dataType.
Není povinné mít nějaký kód v bloku get and set. Tyto bloky lze ponechat prázdné pro definování automatické vlastnosti. Například:
public double MyReadWriteProp{ get; set; }
Přístupový objekt získat a nastavit lze také definovat s jeho modifikátorem přístupu. Pokud je přístupový objekt definován s modifikátorem, přepíše modifikátor přístupu pro vlastnost. Například:
public String name{private get; set;}// name is private for read and public to write.
Třída Apex
Třída Apex je plán nebo šablona, ze které se vytvářejí objekty. Objekt je instancí třídy.
Existují tři způsoby, jak vytvořit apex třídy v Salesforce:
Konzole pro vývojáře
Force.com IDE
Detailní stránka třídy Apex.
V apexu můžete definovat vnější třídu nazývanou také třída nejvyšší úrovně a můžete také definovat třídy v rámci vnější třídy nazývané vnitřní třídy.
V deklaraci vnější třídy je povinné použít modifikátor přístupu jako globální nebo veřejný.
V deklaraci vnitřních tříd není nutné používat modifikátor přístupu.
Apex třída je definována pomocí klíčového slova class následovaného názvem třídy.
Klíčové slovo Extends se používá k rozšíření existující třídy o třídu apex a klíčové slovo implements se používá k implementaci rozhraní třídou Apex.
Salesforce Apex nepodporuje vícenásobnou dědičnost, třída apex může rozšířit pouze jednu existující třídu apex, ale může implementovat více rozhraní.
Třída Apex může obsahovat uživatelsky definovaný konstruktor, a pokud uživatelsky definovaný konstruktor není k dispozici, použije se výchozí konstruktor. Kód v konstruktoru se spustí, když je vytvořena instance třídy.
Syntaxe příkladu třídy Apex:
public class myApexClass{ // variable declaration //constructor public myApexClass{ } //methods declaration }
Klíčové slovo new se používá k vytvoření instance třídy Apex. Níže je uvedena syntaxe pro vytvoření instance třídy Apex.
myApexClass obj = new myApexClass();
Apex Trigger
Apex triggery vám umožňují spustit vlastní apex před a po provedení DML operace.
Apex podporuje následující dva typy spouštěčů:
Před spouštěči: Tyto spouštěče se používají k ověření a aktualizaci hodnoty pole před uložením záznamu do databáze.
Po spouštěčích: Tyto spouštěče se používají pro přístup k polím (ID záznamu, pole LastModifiedDate) nastavených systémem po záznamu přijatém do databáze. Hodnoty těchto polí lze použít k úpravě dalších záznamů. Záznamy, které se spouštějí po aktivačních událostech, jsou pouze pro čtení.
Nejlepším postupem je psát objemné spouštěče. Objemný spouštěč může zpracovat jeden záznam i více záznamů najednou.
Syntaxe apexového spouštěče:
trigger TriggerName on ObjectName (trigger_events) { //Code_block }
TriggerName je zde název spouštěče, ObjectName je název objektu, na který má být trigger zapsán, trigger_events je čárkami oddělený seznam událostí.
Následují události podporované apexovými spouštěči: před vložením, před aktualizací, před smazáním, po vložení, po aktualizaci, po smazání, po obnovení smazání.
Statická klíčová slova nelze použít ve spouštěči Apex. Všechna klíčová slova použitelná pro vnitřní třídy lze použít ve spouštěči Apex.
Každý spouštěč, který vrací kontext běhu, definuje implicitní proměnné. Tyto proměnné jsou definovány v systému. Třída spouště. Tyto proměnné se nazývají kontextové proměnné. Níže uvedený snímek obrazovky ukazuje kontextovou proměnnou podporovanou apex triggerem.
Následují úvahy o kontextové proměnné ve spouštěči apex:
- Nepoužívejte trigger.new a trigger.old v operacích DML.
- Trigger.new nelze smazat.
- Trigger.new je pouze pro čtení.
- Trigger.new lze použít ke změně hodnot polí na stejném objektu pouze před spuštěním.
Níže uvedené snímky obrazovky obsahují informace o konkrétních akcích v různých spouštěcích událostech.
Batch Class v Apex
Třída dávky v salesforce se používá ke zpracování velkého počtu záznamů, které by při normálním zpracování překročily limity apex Governor. Třída Batch provádí kód asynchronně.
Níže jsou uvedeny výhody dávkové třídy:
- Třída Batch zpracovává data v blocích a pokud se chunk nepodaří úspěšně zpracovat, všechny úspěšně zpracované bloky se nevrátí zpět.
- Každý kus dat v dávkové třídě je zpracován s novou sadou limitů regulátoru, které zajišťují, že se kód spustí v rámci limitů provedení regulátoru.
- Databáze. Dávkové rozhraní musí být implementováno třídou Apex, aby bylo možné použít jako třídu dávky. Poskytuje tři metody, které musí být implementovány třídou dávky.
Níže jsou uvedeny tři metody poskytované databází. Dávkovatelné rozhraní:
1.start()
Tato metoda generuje rozsah záznamů nebo objektů, které mají být zpracovány provedením metody rozhraní. Během provádění dávky je volána pouze jednou. Tato metoda buď vrátí objekt Database.QueryLocator nebo Iterable. Počet záznamů načtených dotazem SQL pomocí objektu Database.QueryLocator je 50 milionů záznamů, ale při použití iterovatelného je celkový počet záznamů, které lze načíst pomocí SQL dotazu, pouze 50000 XNUMX. Iterable se používá ke generování komplexního rozsahu pro třídu dávky.
Syntaxe metody start:
global (Database.QueryLocator | Iterable<sObject>) start(Database.BatchableContextbc) {}
2.execute()
Tato metoda se používá pro zpracování každého kusu dat. Pro každý blok záznamů je volána metoda spuštění. Výchozí velikost dávky pro spuštění je 200 záznamů. Metoda Execute vyžaduje dva argumenty:
Odkaz na objekt Database.BatchableContext,
Seznam sObjects, například List , nebo seznam parametrizovaných typů. Syntaxe metody spuštění:
global void execute(Database.BatchableContext BC, list<P>){}
3.dokončit()
Metoda dokončení je volána jednou během provádění třídy dávky. Operace následného zpracování lze provádět metodou dokončování. Například: odeslání potvrzovacího e-mailu. Tato metoda je volána, když se zpracuje celá dávka. Syntaxe metody Finish:
global void finish(Database.BatchableContext BC){}
Objekt Database.BatchableContext
Každá metoda databáze. Rozhraní Batchable má odkaz na objekt Database.BatchableContext.
Tento objekt se používá ke sledování průběhu dávkové úlohy.
Níže jsou uvedeny metody instance poskytované BatchableContext :
- getChildJobId(): Tato metoda vrací ID dávkové úlohy, která je aktuálně zpracovávána.
- getJobId(): Tato metoda vrací ID dávkové úlohy.
Níže je syntaxe dávkové třídy:
global class MyBatchClass implements Database.Batchable<sObject> { global (Database.QueryLocator | Iterable<sObject>) start(Database.BatchableContextbc) { // collect the batches of records or objects to be passed to execute } global void execute(Database.BatchableContextbc, List<P> records){ // process each batch of records } global void finish(Database.BatchableContextbc){ // execute any post-processing operations } }
Database.executeBatch Method
Pro spuštění třídy dávky se používá metoda Database.executeBatch.
Tato metoda vyžaduje dva parametry: Instance třídy dávky, která má být zpracována, Parametr Options pro určení velikosti dávky, pokud není zadán, má výchozí velikost 200.
Syntaxe Database.executeBatch :
Database.executeBatch(myBatchObject,scope)
Spuštění dávkového názvu třídy MyBatchClass:
MyBatchClassmyBatchObject = new MyBatchClass(); Id batchId = Database.executeBatch(myBatchObject,100);
Databáze.stavový
Třída dávky je ve výchozím nastavení bezstavová. Pokaždé, když je zavolána metoda execute, je přijata nová kopie objektu, jsou inicializovány všechny proměnné třídy.
Database.stateful je implementován tak, aby byla dávková třída stavová.
Pokud vaše dávková třída implementovala Databáze , stavové rozhraní všechny proměnné instance si zachovají své hodnoty, ale statické proměnné se mezi transakcemi resetují.
Shrnutí
- Apex je silně typovaný, objektově orientovaný programovací jazyk který se zkompiluje a spustí na platformě force.com
- Programovací jazyk Apex je jazyk, který nerozlišuje malá a velká písmena
- Dva typy toku akcí v Apexu jsou 1) Akce vývojáře 2) Akce koncového uživatele
- Apex vám pomůže vytvořit webové služby, které integrují Salesforce s jinými aplikacemi.
- Datové typy podporované apexem jsou: 1).Primitivní 2) Kolekce 3) sObject, Enums, 4) Classes, 5) Objects and Interfaces
- Apex specifikuje podporu Public, Private, Protected a Global
- Klíčová slova používaná v Apexu jsou: 1) se sdílením, 2) bez sdílení, 3) statická, 4) konečná 5) návratová, 6) nulová, 7) virtuální, 8) abstraktní
- Řetězec je sada znaků bez omezení počtu znaků
- Limity Apex Governor jsou limity vynucené modulem apex runtime, aby bylo zajištěno, že jakýkoli kód a procesy vrcholu dráhy
- Getter a setter lze použít ke spuštění kódu před přístupem k hodnotě vlastnosti nebo změnou
- Existují tři způsoby, jak vytvořit třídy Apex v Salesforce: 1) Konzole pro vývojáře 2) IDE Force.com a 3) stránka s podrobnostmi třídy Apex.
- Apex triggery vám umožňují spustit vlastní apex před a po provedení DML operace.
- Třída dávky v salesforce se používá ke zpracování velkého počtu záznamů, které by při normálním zpracování překročily limity apex Governor.