Apice batch in Salesforce

Apice batch in Salesforce
In Salesforce, Batch Apex è un processo asincrono in cui ogni processo viene eseguito su un thread diverso; Ecco perché è un processo asincrono. Usando questo, possiamo aggiornare in serie ed eliminare i record alla volta. Rispetto al processo sincrono, i limiti del governatore sono più per questo processo asincrono (poiché ogni processo viene eseguito sul proprio thread). Come parte di questo tutorial, discuteremo di come inserire in serie, aggiornare di massa e eliminare la massa i record da un oggetto Salesforce con esempi. Continuiamo con discussioni basate su scenari in ogni caso. Ci immerciamo nel nostro tutorial.

Scenario:

Sravan gestisce un'azienda e sta usando Salesforce Org per tracciare gli stipendi dei suoi dipendenti. Ci sono solo 200 dipendenti. Ha archiviato tutti i loro dati in un oggetto "account" nel database Salesforce e ha creato un campo personalizzato che viene "accreditato" in un tipo di casella di controllo e aggiornarlo a true ogni volta che lo stipendio viene accreditato loro. Dopo 2 anni, il conta dei suoi dipendenti è aumentato a 2 lakh. Non è in grado di aggiornare questo campo in una transazione. Così ha chiesto allo sviluppatore di Salesforce di aiutarlo a uscire da quello. Quindi, lo sviluppatore ha suggerito l'apice batch di aggiornare 2 record lakh alla volta (batch per batch).

Apice batch:

Come abbiamo già discusso, Batch Apex è un processo asincrono in cui ogni processo viene eseguito su un thread diverso. Elabora il batch di dati per batch e ha 3 passaggi mentre esegue questa operazione. Per impostazione predefinita, la dimensione del lotto è 200, ma possiamo estenderci fino a 2000. La dimensione minima è 1.

Fase I:

Questa è la fase di "start" in cui i record vengono raccolti da Salesforce da elaborare. Possiamo utilizzare la query SOQL per restituire i record in questa fase. Fondamentalmente, la classe "batch" implementa il "database.Batchable ".

Possiamo definire il metodo Start () usando il queryLocator (ritorna in query) dalla classe "database". È molto importante passare il parametro batchableContext dalla classe "database". All'interno di questo metodo, possiamo specificare il SOQL nel database.metodo getQueryLocator () e restituirlo.

Vedi la seguente struttura del metodo:

Fase II:

Questa è la fase "esegui" in cui il batch dei record viene raccolto dalla fase di avvio che viene restituita dalla query SOQL. Elabora questi record e riceve nuovamente i record dalla query fino a quando tutti i record non saranno completati.

Possiamo definire il metodo Esecute () restituendo come vuoto (vuoto). È molto importante passare il batchableContext come primo parametro dalla classe "database" che è simile al metodo start (). Il secondo parametro è l'Object (Salesforce Standard/Object) all'interno di un "elenco".

Vedi la seguente struttura del metodo:

Fase III:

Questa è la fase di "finitura" in cui le operazioni post come l'invio di e -mail, la visualizzazione di messaggi, ecc., sono presi in questa fase.

Possiamo definire il metodo fini () restituendo come vuoto (vuoto). È molto importante passare il batchableContext come primo parametro dalla classe "database" che è simile al metodo start ().

Vedi la seguente struttura del metodo:

Struttura generale:

Configurazione dell'ambiente

1. Vai al "Console per sviluppatori" e vai al file "seleziona nuovo". Quindi, scegli "Apex Class" (la classe Apex viene salvata con .estensione APXC).

2. Puoi dare il nome della classe dopo aver fatto clic su "Classe Apex". Quindi, fai clic su "OK".

3. Dopo aver scritto la classe, puoi eseguirla creando un'istanza. Possiamo scriverlo nella "finestra anonima".

Applicazione 1: aggiornamento

Scriviamo una "classe batch" sulla campagna Salesforce Standard Object per aggiornare il "nome della campagna" a "Linuxhint Camp1" se lo stato è "pianificato".

Global Class BatchExample1 Implementa il database.Batchable
Database globale.Start di queryLocator (database.BatchableContext BC)

// Scrivi la query SOQL sull'oggetto della campagna
// per ottenere i record con lo stato - "pianificato"
Database di restituzione.getQueryLocator ('Seleziona nome, stato dalla campagna dove status = \' pianificato \ 'ordine per nome');

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

// itera i registri della campagna
per (campagna Camp_obj: Camplist)
if (Camp_obj.Status == 'pianificato')
// Aggiorna il nome della campagna
Camp_obj.Name = 'Linuxhint Camp1';


Tentativo
// Usa l'aggiornamento - DML per aggiornare il nome della campagna
Aggiorna Camplist;
catch (eccezione e)
Sistema.debug (e);


Global Void Finish (database.BatchableContext BC)

// niente di necessario qui

Esegui la classe creando un'istanza.

BatchExample1 FirstExample_1 = new BatchExample1 ();
Banca dati.ExecuteBatch (FirstExample_1);

Spiegazione:

  1. Scriviamo una query SOQL per recuperare il record all'interno del metodo Start () con lo stato "pianificato".
  2. Utilizzando per loop nel metodo Execute (), iteliamo l'oggetto "campagna" e specifichiamo la condizione "if" per verificare se lo stato è "pianificato" o no. Se è previsto, aggiorniamo il "nome della campagna" a "Linuxhint Camp1". Utilizziamo il DML "Aggiorna" per aggiornare i record sotto il blocco di prova.

Controllo:

Possiamo verificare se il batch viene elaborato senza errore nell'ambito dei "lavori Apex". Cercalo in "Quick Find".

2. Per verificare la tua classe "batch", possiamo vedere che i "batch elaborati" sono 1 e "fallimenti" sono 0.

3. Vai alla "scheda campagna" e controlla se il "nome della campagna" viene aggiornato o meno.

C'è solo un record con uno stato "pianificato". Il "nome della campagna" viene aggiornato a "Linuxhint Camp1".

Applicazione 2: cancellazione

Scriviamo una "classe batch" sull'oggetto standard Salesforce che è "campagna" per eliminare un record.

Global Class BatchExample2 Implementa il database.batchable
Database globale.Start di queryLocator (database.Batchablecontext bc)
// query SOQL per restituire un record dall'oggetto della campagna
Database di restituzione.getQueryLocator ('Seleziona ID dal limite della campagna 1');

Global Void Execute (database.BatchableContext BC, elenco scopo)
// Elimina DML
Elimina l'ambito;

Global Void Finish (database.Batchablecontext bc)
// non c'è bisogno di fare nulla qui.

Esegui la classe creando un'istanza.

BatchExample2 Esempio_2 = new BatchExample2 ();
Banca dati.ExecuteBatch (Esempio_2);

Spiegazione:

  1. Scriviamo una query SOQL all'interno del metodo Start () per recuperare solo un record dall'oggetto "Campagna".
  2. Usiamo il DML "Elimina" nel metodo Execute () per eliminare quel record. Puoi anche applicare un blocco di prova attorno al DML Elimina.

Controllo:

Possiamo controllare i record eliminati sotto il "cestino di riciclo". Vai al "lancio di app" e controllalo.

Puoi vederne uno che il record viene eliminato dall'oggetto "campagna".

Applicazione 3: inserimento

Scriviamo una "classe batch" sull'oggetto standard Salesforce che è "account" per inserire un record.

Global Class BatchExample3 implementa il database.Batchable
Database globale.Start di queryLocator (database.Batchablecontext bc)
// query SOQL per restituire solo un record dall'oggetto account
Database di restituzione.getQueryLocator ('Seleziona ID, nome dal limite dell'account 1');

Global Void Execute (database.BatchableContext BC, elenco scopo)
// Crea elenco di tipo - account
Elenco Alist = nuovo elenco();
// Crea oggetto per account
Account di nuovo = nuovo account ();
// Imposta il campo con valore
un nuovo.Name = 'LinuxHint Record';
// Aggiungi l'oggetto (istanza) all'elenco
una lista.Aggiungi (di nuovo);
// Inserisci DML
inserire Alist;

Global Void Finish (database.Batchablecontext bc)
// non c'è bisogno di fare qui

Esegui la classe creando un'istanza.

BatchExample3 Esempio_3 = new BatchExample3 ();
Banca dati.ExecuteBatch (Esempio_3);

Spiegazione:

  1. Scriviamo una query SOQL all'interno del metodo start () per recuperare solo un record dall'oggetto "account".
  2. Creiamo un elenco di "Tipo di account" e creiamo un "Account Istance" nel metodo Execute (). Successivamente, assegniamo il "Nome account" a "LinuxHint Record" e aggiungiamo l'istanza alla raccolta di elenco Apex. Infine, utilizziamo il DML "Insert" per inserire questo record nell'account.

Controllo:

Vai su "account" e cerca il record. Puoi trovarlo lì.

Fai clic su "Nome account" per aprire il record con i dettagli.

Conclusione

Ora abbiamo imparato a eseguire le operazioni di massa DML come inserto, aggiornamento ed eliminare con l'apice batch in Salesforce. L'apice batch è un processo asincrono in cui ogni processo viene eseguito su un thread diverso. Elabora il batch di dati per batch e ha 3 passaggi mentre esegue questa operazione. Per impostazione predefinita, la dimensione del lotto è 200 ma possiamo estenderla fino a 2000 in cui la dimensione minima è 1. Abbiamo utilizzato gli oggetti standard "campagna" e "account" per eseguire le operazioni DML.