Introduzione
Per gli scenari aziendali che richiedono alla piattaforma di elaborare più di 50000 record, Batch Apex viene in soccorso. Batch Apex facilita l’elaborazione asincrona dei record in più batch o blocchi ed è semplice da implementare per uno sviluppatore.
Implementazione di Batch Apex
Batch Apex implementa il Database.interfaccia batchable. L’interfaccia ha Start (), Execute() e Finish () metodi che dovrebbero essere implementati nella classe Apex Batch.
- Startmethod: metodo di Avvio è un punto di raccolta per i record devono essere trattati nel metodo execute del lotto apice
- metodo Execute: L’effettiva elaborazione del record avviene nel metodo execute.
- Metodo di finitura: I metodi di finitura possono avere azioni di elaborazione post-lavoro come l’invio di e-mail o possono anche essere utilizzati per concatenare un’altra classe batch.
Pianificazione del Batch Apex
Metodo 1: Utilizzo della funzionalità OOTB Schedule Apex
Passaggi:
- Fare clic su Imposta e cercare le classi Apex nella casella di ricerca rapida.
- Fare clic sul pulsante Pianifica apice nel pannello superiore.
3. Inserisci le informazioni nella pagina Schedule Apex record e Salva. La classe apex deve essere la classe di pianificazione che implementa il metodo executebatch (batch).
Frammento di codice per la classe Scheduler:
global class AccBatchScheduleClass implements Schedulable { global void execute(SchedulableContext ctx) { AccBatchApex batch = new AccBatchApex(); database.executebatch(batch); }}
Metodo 2: Invocazione della classe Batch tramite apice schedulabile:
Deve essere creata la classe Apex che dovrebbe implementare l’apice schedulabile. L’apice schedulabile deve implementare il sistema.Metodo Schedule () per accodare l’apice batch nella coda di esecuzione. sistema.Il metodo Schedule () prevede tre argomenti, vale a dire il nome del lavoro, l’espressione Cron per la pianificazione batch e il nome della classe batch.
Esempio Schedulable Apex:
Batch Apex Concatenamento
Con l’inizio della versione API 29.0 e dopo, una classe batch può essere concatenata a un’altra classe batch. Concatenamento di batch apex avvia l’esecuzione della classe batch concatenata una volta terminata l’esecuzione della classe batch di base. Al massimo, solo 5 lavori batch possono essere concatenati l’uno all’altro. Lo snippet di codice di esempio per il concatenamento dell’apice batch è illustrato di seguito:
Esempio di apice batch
Caso d’uso: compilare lo stato di fatturazione come California per tutti gli account con Paese come USA e nessuna informazione sullo stato di fatturazione.
Progettazione della soluzione: L’organizzazione ha più di 50K record che devono essere scremati per le informazioni sullo stato di fatturazione mancanti, quindi scrivere l’apice batch è la soluzione ottimale. Anche trigger, flussi di lavoro, costruttori di processi ecc. avrà bisogno di un’operazione DML per sparare in modo che queste soluzioni non si adattino a soddisfare i requisiti aziendali.
Cose da ricordare
- Fino a 5 processi batch possono essere accodati o attivi contemporaneamente.
- Il numero massimo di esecuzioni del metodo batch Apex per periodo di 24 ore è 250.000 o il numero di licenze utente nell’organizzazione moltiplicato per 200, a seconda di quale sia maggiore.
- È possibile restituire un massimo di 50 milioni di record nell’oggetto QueryLocator. Se vengono restituiti più di 50 milioni di record, il processo batch viene immediatamente terminato e contrassegnato come Non riuscito.
- Se startmethod della classe batch restituisce un QueryLocator, il parametro scope opzionale di executeBatch può avere un valore massimo di 2.000.
- Se il metodo start della classe batch restituisce un iterabile, il valore del parametro scope non ha limiti superiori.
- I metodi start, execute e finish possono implementare fino a 100 callout ciascuno. Implementare AllowsCallouts per abilitare i callout dall’apice batch.
- I metodi dichiarati come futuri non possono essere chiamati da una classe Apex batch.
- Tutti i metodi della classe devono essere definiti globali o pubblici.
Ottimizzazione dell’implementazione
- I processi Apex batch vengono eseguiti più velocemente quando startmethod restituisce un oggetto QueryLocator che non include record correlati tramite una sottoquery. Evitare le sottoquery delle relazioni in un QueryLocator consente ai lavori batch di essere eseguiti utilizzando un’implementazione più veloce e chunked.
- Per garantire un’esecuzione rapida dei processi batch, ridurre al minimo i tempi di callout del servizio Web e ottimizzare le query utilizzate nel codice Apex batch.
- Per ogni 10.000 AsyncApexJobrecords, Apex crea un record AsyncApexJob di tipo BatchApexWorker per uso interno. Quando si esegue un’interrogazione per tutti i record AsyncApexJob, si consiglia di filtrare i record di tipo BatchApexWorker utilizzando il JobType
- Per un ricalcolo di condivisione, si consiglia di eliminare il metodo execute e quindi ricreare tutte le condivisioni gestite Apex per i record nel batch. Questo processo garantisce che la condivisione sia accurata e completa.
- Utilizzare i metodi di test startTest e stopTest attorno al metodo executeBatch per assicurarsi che finisca prima di continuare il test.