Batch Apex i Salesforce

Batch Apex i Salesforce
I Salesforce er Batch Apex en asynkron prosess der hver prosess kjøres på en annen tråd; Derfor er det en asynkron prosess. Ved å bruke dette kan vi masseoppdatering og slette postene om gangen. Sammenlignet med den synkrone prosessen, er guvernørgrensene mer for denne asynkrone prosessen (siden hver prosess kjører på sin egen tråd). Som en del av denne opplæringen vil vi diskutere hvordan masseinnsats, masseoppdatering og masse sletter postene fra et Salesforce -objekt med eksempler. Vi fortsetter med scenariobaserte diskusjoner i hvert tilfelle. La oss dykke ned i opplæringen vår.

Scenario:

Sravan driver et selskap, og han bruker Salesforce org for å spore lønnen til sine ansatte. Det er bare 200 ansatte. Han lagret alle dataene deres i et "konto" -objekt i Salesforce -databasen, og han opprettet et tilpasset felt som er "kreditert" i en avkrysningsrute -type og oppdaterer det til sant når lønnen blir kreditert dem. Etter 2 år økte hans ansattes telling til 2 lakh. Det er ikke i stand til å oppdatere dette feltet ved en transaksjon. Så han ba Salesforce -utvikleren om å hjelpe ham ut av det. Deretter foreslo utvikleren batch -spissen for å oppdatere 2 lakh -poster om gangen (batch av batch).

Batch Apex:

Som vi allerede har diskutert, er Batch Apex en asynkron prosess der hver prosess kjøres på en annen tråd. Den behandler databatch etter batch og har 3 trinn mens du utfører denne operasjonen. Som standard er batchstørrelsen 200, men vi kan strekke oss opp til 2000. Minimumsstørrelsen er 1.

Fase I:

Dette er "start" -fasen der postene blir samlet inn fra Salesforce som skal behandles. Vi kan bruke SOQL -spørringen for å returnere postene i denne fasen. I utgangspunktet implementerer "batch" -klassen "databasen.Batchbar ”.

Vi kan definere Start () -metoden ved hjelp av QueryLocator (den kommer tilbake til spørring) fra "Database" -klassen. Det er veldig viktig å passere parameteren BatchableContext fra "Database" -klassen. Innenfor denne metoden kan vi spesifisere SOQL i databasen.getQuerylocator () -metode og returner den.

Se følgende metodestruktur:

Fase II:

Dette er "utfør" -fasen der partiet med poster blir samlet inn fra startfasen som returneres av SOQL -spørringen. Den behandler disse postene og får postene igjen fra spørringen til alle postene er fullført.

Vi kan definere Execute () -metoden ved å returnere som tomrom (tom). Det er veldig viktig å passere batchableContext som den første parameteren fra "Database" -klassen som ligner Start () -metoden. Den andre parameteren er Sobject (Salesforce Standard/Custom Object) inne i en "liste".

Se følgende metodestruktur:

Fase III:

Dette er "Finish" -fasen der postoperasjonene som å sende e -post, vise meldinger osv., blir tatt i denne fasen.

Vi kan definere finish () -metoden ved å returnere som tomrom (tom). Det er veldig viktig å passere batchableContext som den første parameteren fra "Database" -klassen som ligner Start () -metoden.

Se følgende metodestruktur:

Generell struktur:

Miljøoppsett

1. Gå til "Developer Console" og gå til "Velg nye" -filen. Velg deretter "Apex -klasse" (Apex -klassen lagres med .APXC Extension).

2. Du kan oppgi klassenavnet etter å ha klikket på “Apex Class”. Klikk deretter "OK".

3. Etter å ha skrevet klassen, kan du utføre den ved å lage en forekomst av den. Vi kan skrive det i det "anonyme vinduet".

Applikasjon 1: Oppdatering

La oss skrive en "batch -klasse" på Salesforce Standard Object -kampanjen for å oppdatere "kampanjenavn" til "Linuxhint Camp1" hvis statusen er "planlagt".

Global Class BatchExample1 implementerer database.Batchbar
Global database.QueryLocator Start (database.BatchableContext BC)

// Skriv SOQL -spørringen på kampanjeobjekt
// for å få postene med status - 'Planlagt'
Returdatabase.getquerylocator ('velg navn, status fra kampanje hvor status = \' planlagt \ 'ordre etter navn');

Global Void Execute (database.BatchableContext BC, liste camplist)

// iterere kampanjegistreringene
for (kampanje camp_obj: camplist)
if (camp_obj.Status == 'planlagt')
// Oppdater kampanjenavn
Camp_obj.Navn = 'Linuxhint Camp1';


prøv
// Bruk oppdatering - DML for å oppdatere kampanjenavn
oppdater camplist;
fangst (unntak e)
System.debug (e);


Global Void Finish (database.BatchableContext BC)

// ingenting som trengs her

Kjør klassen ved å lage en forekomst.

Batchexample1 firstExample_1 = new BatchExample1 ();
Database.executeBatch (firstExample_1);

Forklaring:

  1. Vi skriver en SOQL -spørring for å hente posten i start () -metoden med "planlagt" status.
  2. Bruker for sløyfe i Execute () -metoden, itererer vi "kampanjen" -objektet og spesifiserer "hvis" -tilstanden for å sjekke om statusen er "planlagt" eller ikke. Hvis det er planlagt, oppdaterer vi "kampanjenavn" til "Linuxhint Camp1". Vi bruker "oppdateringen" DML for å oppdatere postene under prøveblokken.

Kryss av:

Vi kan sjekke om batchen blir behandlet uten feil under "Apex Jobs". Søk etter det i "Quick Find".

2. For å se etter "batch" -klassen din, kan vi se at "partiene behandlet" er 1 og "feil" er 0.

3. Gå til "Kampanje -fanen" og sjekk om "kampanjenavn" er oppdatert eller ikke.

Det er bare en post med en "planlagt" status. "Kampanjenavn" blir oppdatert til "Linuxhint Camp1".

Søknad 2: Sletting

La oss skrive en "batch -klasse" på Salesforce Standard -objektet som er "kampanje" for å slette en post.

Global Class BatchExample2 implementerer database.batchbar
Global database.QueryLocator Start (database.BatchableContext bc)
// SOQL -spørring for å returnere en post fra kampanjeobjektet
Returdatabase.getquerylocator ('velg id fra kampanjegrense 1');

Global Void Execute (database.BatchableContext BC, liste omfang)
// slett dml
slette omfang;

Global Void Finish (database.BatchableContext bc)
// Ingen grunn til å gjøre noe her.

Kjør klassen ved å lage en forekomst.

Batchexample2 Eksempel_2 = new BatchExample2 ();
Database.executeBatch (eksempel_2);

Forklaring:

  1. Vi skriver en SOQL -spørring i start () -metoden for å hente bare en post fra "Kampanje" -objektet.
  2. Vi bruker "slett" DML i Execute () -metoden for å slette den posten. Du kan også bruke en prøveblokk rundt Delete DML.

Kryss av:

Vi kan sjekke de slettede postene under "papirkurven". Gå til "App Launcher" og sjekk for den.

Du kan se en som posten blir slettet fra "kampanjen" -objektet.

Søknad 3: Innsetting

La oss skrive en "batch -klasse" på Salesforce Standard -objektet som er "konto" for å sette inn en post.

Global Class BatchExample3 implementerer database.Batchbar
Global database.QueryLocator Start (database.BatchableContext bc)
// SOQL -spørring for bare å returnere en post fra kontoobjektet
Returdatabase.getquerylocator ('Velg ID, navn fra kontogrense 1');

Global Void Execute (database.BatchableContext BC, liste omfang)
// Opprett liste over type - konto
Liste Alist = ny liste();
// Opprett objekt for konto
Konto på nytt = ny konto ();
// Angi feltet med verdi
på nytt.Navn = 'Linuxhint Record';
// Legg til objektet (forekomst) i listen
en liste.Legg til (på nytt);
// Sett inn DML
Sett inn Alist;

Global Void Finish (database.BatchableContext bc)
// Ingen grunn til å gjøre her

Kjør klassen ved å lage en forekomst.

Batchexample3 Eksempel_3 = new BatchExample3 ();
Database.executeBatch (eksempel_3);

Forklaring:

  1. Vi skriver en SOQL -spørring i start () -metoden for å hente bare en post fra “Konto” -objektet.
  2. Vi oppretter en liste over "kontotype" og oppretter en "kontoinstans" i Execute () -metoden. Etter det tildeler vi "kontonavnet" til "Linuxhint Record" og legger forekomsten til Apex List -samlingen. Til slutt bruker vi “Sett inn” DML for å sette inn denne posten i kontoen.

Kryss av:

Gå til "konto" og søk etter posten. Du kan finne den der.

Klikk på "Kontonavn" for å åpne posten med detaljer.

Konklusjon

Vi lærte nå hvordan vi skal utføre Mass DML -operasjoner som Sett inn, oppdatere og slette med batch -spiss i Salesforce. Batch Apex er en asynkron prosess der hver prosess kjøres på en annen tråd. Den behandler databatch etter batch og har 3 trinn mens du utfører denne operasjonen. Som standard er batchstørrelsen 200, men vi kan utvide den opp til 2000 der minimumsstørrelsen er 1. Vi benyttet oss.