Cum se utilizează baza de date. Stateful în Batch Apex în Salesforce

Publicat: 2023-11-21

În primul rând, trebuie să înțelegem că, dacă dorim să folosim Batch Apex, trebuie să scriem o clasă Apex care implementează interfața de bază de date furnizată de Salesforce. Batchable și apoi invocați clasa în mod programatic. Pentru a monitoriza sau a opri execuția jobului Apex în lot, din Setup, introduceți Apex Jobs în caseta Quick Find, apoi selectați Apex Jobs.

În acest articol, analizăm funcțiile puternice ale bazei de date. Stateful în Batch Apex. Înțelegerea bazei de date. Stateful este esențial pentru menținerea stării în toate execuțiile loturilor, permițând dezvoltatorilor să păstreze variabilele de instanță și să realizeze procese batch mai sofisticate, conștiente de stare.

Sintaxă pentru lot:

 clasa globală BatchName implementează Database.Batchable{}

Metode de clasa de lot:

 global (Database.QueryLocator | Iterable) start (Database.BatchableContext bc) {
 //Aici vom adăuga interogarea și vom returna rezultatul pentru metoda de execuție
}

global void execute (Database.BatchableContext BC, list<P>){
 //Logica trebuie să fie aici
}

finisare globală a golului (Database.BatchableContext BC){
 //după procesarea tuturor loturilor, această metodă va fi apelată. Putem scrie orice cod în el. Like dacă doriți să trimiteți e-mail la toate înregistrările care sunt create sau actualizate în metoda execute.
}

Citiți și: Cum să creați un tip de raport personalizat în Salesforce?

Implementarea bazei de date.Interfață batchable

Exemplu:

 clasa globală BatchAccountUpdate implementează Database.Batchable{
    String query = „Selectați numele din contul WHERE Nume! = null AND (Nume = \'Compania Virendra\' SAU Nume = \'Virendra Sharma\') ';
    global Database.QueryLocator start (Database.BatchableContext bc) {
        // colectează loturile de înregistrări sau obiecte care urmează să fie trecute la executare
        return Database.getQueryLocator(interogare);
    }
    
    global void execute (Database.BatchableContext bc, List records) {
        // procesează fiecare lot de înregistrări
        pentru (account cont: records){
            acc.Name = acc.Name + 'Actualizat';
        }
        actualizarea înregistrărilor;
    }
    
    finisare globală a golului (Database.BatchableContext bc){
        // execută orice operațiuni de post-procesare, Apelarea clasei batch.
        BatchUpdateAccountRelatedContacts b = nou BatchUpdateAccountRelatedContacts();
        Database.executeBatch(b, 200);
    }    
}
baza de date cu stare

Baza de date.Stateful

Următoarea clasă exemplu găsește toate înregistrările de cont care sunt transmise prin metoda start() utilizând un QueryLocator și actualizează contactele asociate cu adresa poștală a contului lor. În cele din urmă, trimite un e-mail cu rezultatele lucrării în bloc și, deoarece folosim Database.Stateful pentru a urmări starea, numărul de înregistrări actualizat.

cod cu stare a bazei de date
cod cu stare a bazei de date

Exemplu:

angajați dezvoltatori forțe de vânzări

Bază de date.Permite înștiințări

Database.AllowsCallout in Batch ajută la integrarea Salesforce cu un server extern. Pentru a folosi un callout în batch Apex, trebuie să folosim o interfață Database.AllowsCallouts în definiția clasei batch class.

Sintaxă:

 clasa globală SearchAndReplace implementează Database.Batchable, Database.AllowsCallouts{}

Exemplu:
Aici, integrez obiectul Opportunity cu Razorsync.com
/*
Obțineți cererea de service de la razorsync și actualizați-o în forța de vânzări
*/

 clasa globală Batch_SR_RazorSyncAPI implementează Database.Batchable, Database.AllowsCallouts{
    pornire globală Database.QueryLocator (Database.BatchableContext BC){
        Interogare șir = 'SELECT Id, Razorsync_Service_Request_Id__c FROM Opportunity WHERE Razorsync_Service_Request_Id__c != null AND Razorsync_Job_Status__c != \'Job Done\' AND RazorSync_Status__c = \'';
        return Database.getQueryLocator(interogare);
    }
   
    global void execute (Database.BatchableContext BC, List scope){
        Stare șir;
        pentru (Oportunitate s: domeniul de aplicare){
            //get ServiceRequest
            System.debug(s.Id);
            Http http1 = Http nou();
            HttpRequest cerere1 = HttpRequest nou ();
            request1.setEndpoint('https://DomainName.0.razorsync.com/ApiService.svc/ServiceRequest/'+ s.Razorsync_Service_Request_Id__c);
            request1.setMethod('GET');
            request1.setHeader('Content-Type', 'application/json');
            request1.setHeader('Gazdă', 'NumeDomeniu.0.razorsync.com');
            request1.setHeader('Lungimea conținutului', '0');
            request1.setHeader('Conexiune', 'Păstrează-n viaţă');
            request1.setHeader('ServerName', 'DomainServerName');
            request1.setHeader('Token', 'XXXXXXXXXXXXXXXXXXXXXXXXX');
            
            HttpResponse response1 = http1.send(request1);
            
            if(response1.getStatusCode() == 200) {
                Stare;
                JSONParser parser = 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(StatusId);
                if(StatusId == String.valueOf(1) || Test.isRunningTest()){
                    s.Razorsync_Job_Status__c = „Lucrare gata”;
                    s.StageName = „Câștigat închis”;
                }altfel{
                    s.Razorsync_Job_Status__c = „În lucru”;
                }
            }
        }
        actualizare domeniul de aplicare;
    }
    finisare globală a golului (Database.BatchableContext BC){
    }
}

Citiți și: Beneficiile Salesforce Commerce Cloud și cum să apelați fluxuri de la Apex în Salesforce

Concluzie

Utilizarea Database.Stateful în Batch Apex în cadrul Salesforce permite păstrarea stării în diferite metode de execuție într-un job batch. Acest lucru este crucial pentru scenariile în care este necesară o prelucrare complexă a datelor, iar starea trebuie păstrată între bucățile batch.

Prin implementarea Database.Stateful , dezvoltatorii pot asigura coerența datelor și pot gestiona seturi mari de date în mod eficient. Cu toate acestea, este important să utilizați această funcție în mod judicios pentru a evita consumul excesiv de memorie și potențialele probleme de performanță.

Cele mai bune practici includ menținerea variabilelor de stare minime și concentrarea asupra datelor esențiale, făcând astfel Database.Stateful un instrument puternic pentru procesarea loturilor complexă, dependentă de stare în Salesforce.

Pentru asistență suplimentară cu un proiect de forță de vânzări, angajați-ne ca consultant în forța de vânzări și obțineți beneficiile.