Metoda viitoare vs. Apex în așteptare în Salesforce
Publicat: 2023-11-20În lumea rapidă a dezvoltării Salesforce, înțelegerea celor mai bune instrumente și metode pentru o codificare eficientă și eficientă este crucială. Acest articol analizează două concepte cheie: Metoda viitoare și Apex în așteptare. Ambele sunt tehnici puternice utilizate în Salesforce pentru a gestiona operațiuni asincrone, dar au caracteristici și cazuri de utilizare distincte.
Vom explora nuanțele Future Method și Queueable Apex, comparând funcționalitățile, avantajele și când să le folosim pe fiecare în proiectele Salesforce. Indiferent dacă sunteți un dezvoltator experimentat sau nou în Salesforce, această comparație vă va oferi informații valoroase, ajutându-vă să luați decizii informate pentru optimizarea codului.
Rămâneți pe fază pe măsură ce dezvăluim complexitățile și dezvăluim potențialul metodei viitoare și al Apex-ului în așteptare în Salesforce!
Cuprins
De ce metoda viitorului?
Dacă doriți să rulați procese într-un fir separat, mai târziu și doriți să executați codul asincron, trebuie să folosim metode viitoare.
Când este folosit?
Acestea sunt utilizate pentru operațiuni de lungă durată, cum ar fi înștiințări către servicii web externe sau orice operațiune pe care ați dori să o rulați în propriul fir
De ce Queueable Apex?
Ca și viitorul, este folosit și pentru a executa codul asincron și vă permite să adăugați joburi într-o coadă și să îmbunătățiți modul de a rula codul asincron în comparație cu metoda viitoare.
Când este folosit?
Pentru procesele Apex care rulează o perioadă lungă de timp, cum ar fi operațiuni extinse de baze de date sau înștiințări de servicii web externe, le puteți rula asincron prin implementarea interfeței Queueable
Citiți și: Cum să implementați Salesforce SSO folosind OAuth?
Diferențele dintre Apexul viitor și cel aflat la coadă:
Metoda viitorului | Apex în coadă |
---|---|
1. Viitorul nu va folosi niciodată să lucreze pe SObjecturi sau tipuri de obiecte. 2. Când folosim metoda viitoare, nu putem monitoriza joburile care sunt în proces. 3. Metoda viitoare nu poate fi apelată în cadrul clasei viitoare sau lot. 4. Metoda viitoare nu va fi niciodată pusă în coadă. | 1. Joburile aflate în coadă pot conține variabila membru ca SObjects sau Tipuri Apex personalizate. 2. Când folosiți joburi aflate la coadă, va crea AsyncApexJob pe care îl putem monitoriza ca și joburi programate. 3. Queueable Apex poate fi apelat din clasa viitor și lot. 4. Utilizarea Queueable Apex va înlănțui până la joburi aflate în coadă, iar în Developer Edition sunt doar 5 joburi. |
Apex în coadă
Clasa Queueable este o clasă care este creată prin implementarea interfeței predefinite „Queueable”. Această interfață permite modul de a rula joburile asincrone sau codul jobului în comparație cu metoda viitoare. Vă va permite să monitorizați joburile care sunt în coadă (această coadă este creată de interfața Queueable, astfel încât joburile să poată rula asincron).
Sintaxă:
clasă publică <Numele clasei în așteptare> implementează Queueable { //Aceasta este singura metodă care este conținută de interfața Queueable și necesară pentru a moșteni această metodă în clasa Queueable. public void execute (context QueueableContext) { //Cod care trebuie executat } }
Orice proces Apex care durează mult timp în execuție, cum ar fi operațiuni extinse de baze de date sau înștiințări ale serviciului web extern, le puteți rula asincron prin implementarea interfeței Queueable și adăugând un job la coada de joburi Apex.
Lucrarea Apex asincronă rulează în fundal în propriul fir de execuție și nu întârzie execuția logicii principale Apex. Fiecare job din coadă rulează atunci când resursele de sistem devin disponibile. Un avantaj al utilizării metodelor de interfață este că unele limite ale guvernatorului sunt mai mari decât pentru Apex sincron, cum ar fi limitele de dimensiune a heap-ului.
Metoda Apex viitoare
Apexul viitor este folosit pentru a rula procese într-un fir separat, mai târziu când resursele sistemului devin disponibile. Pentru utilizarea apex-ului viitor, nu trebuie să creăm nicio clasă, trebuie doar să folosim adnotarea „@future” pentru a identifica metodele care rulează asincron și pentru a indica faptul că metoda descrisă mai jos această adnotare este o metodă viitoare.
Când utilizați procesarea sincronă, toate apelurile de metodă sunt efectuate din același fir de execuție care execută codul Apex și nu poate avea loc nicio procesare suplimentară până la finalizarea procesului. Puteți folosi metode viitoare pentru orice operațiune pe care doriți să o rulați asincron în propriul thread. Acest lucru oferă beneficiile de a nu bloca utilizatorul să efectueze alte operațiuni și de a oferi limite mai mari de guvernare și execuție pentru proces.
Sintaxă:
clasa globala <ClassName> { //Mai jos este o adnotare viitoare care definește metoda dată este metoda viitoare. @viitor public static void <FutureMethodName>(List<Id> recordIds) { Listă conturi<Contact> = [Selectați Id, Prenume, Nume din Contact Unde ID IN :recordIds]; // procesează înregistrările de contacte pentru a face lucruri minunate } }
Citiți și: Cum să conectați Pipedrive și integrarea Salesforce?
Metodele viitoare sunt de obicei folosite pentru
Înștiințări către servicii Web externe. Dacă efectuați înștiințări de la un declanșator sau după efectuarea unei operații DML, trebuie să utilizați o metodă viitoare sau pusă în coadă. O înștiințare într-un declanșator ar menține deschisă conexiunea la baza de date pe durata de viață a înștiințării.
Operațiuni pe care doriți să le executați în propriul fir de execuție atunci când timpul o permite, cum ar fi un fel de calcul care necesită mult resurse sau procesarea înregistrărilor
Notă: Motivul obiectelor nu poate fi transmis ca argumente unei metode viitoare, deoarece obiectul se poate schimba între momentul în care apelați metoda și momentul în care se execută efectiv. Metodele viitoare rulează atunci când resursele sistemului devin disponibile. Când o metodă viitoare este executată, aceasta poate avea o valoare de obiect veche, ceea ce poate provoca tot felul de lucruri rele.
Lucruri de amintit
- Metoda viitoare trebuie să fie statică
- Tipul de returnare trebuie să fie nul
- Parametrii specificați trebuie să fie tipuri de date primitive, matrice de tipuri de date primitive sau colecții de tipuri de date primitive
- Puteți apela metode viitoare în același mod în care apelați orice altă metodă. Cu toate acestea, o metodă viitoare nu poate apela o altă metodă viitoare
- Nu mai mult de 50 de apeluri de metodă per invocare Apex
- Apelurile asincrone, cum ar fi @future sau executeBatch, apelate într-un bloc startTest, stopTest, nu sunt luate în considerare în limitele dvs. pentru numărul de joburi aflate în coadă
Exemplu pentru metoda viitoare și clasa de așteptare
Aici iau valoarea a 4 valute în dolarul canadian. Pentru GBP, USD, AUD, CAD. Și salvarea valorii în moneda personalizată a metadatelor. Pentru HTTPREQUEST aici am folosit metoda Future. Și pentru că actualizează mai multe înregistrări în același timp în timp ce rulează lotul, am folosit Queueable Apex, care actualizează mai multe înregistrări simultan.
Actualizarea personalizată a metadatelor personalizate
Clasă în așteptare
Apelarea metodei Future și trimiterea listei pentru actualizare în clasa Queueable
Emizentech este o companie de consultanță autentică și cu experiență în forța de vânzări, iar dezvoltatorii noștri adepți ai forței de vânzări vă pot oferi asistență profesională pentru următorul proiect de forță de vânzări.