Gli Scheduler Job in Salesforce

In progetti più o meno complessi è necessario pianificare dei Job automatici allo scopo di effettuare dei calcoli o per aggiornare delle informazioni periodicamente.

Esempi di Job automatici (Scheduler Job) potrebbero essere: 

  • Eliminare logicamente (o fisicamente) dei Record dopo un determinato lasso di tempo
  • Chiudere automaticamente le Opportunity con close date nel passato
  • Esecuzioni più complesse come le chiamate a sistemi esterni per sincronizzare dei dati

Come creare uno scheduler Job in Salesforce

Per creare un Job da schedulare in Salesforce, i passi sono i seguenti:

1. Crea una classe che implementi l’interfaccia Schedulable.

2. Ridefinisci il metodo Execute in cui inserire la logica da effettuare.

3. Schedula il Job attraverso la UI oppure attraverso uno script.

Un esempio di codice per la creazione di un Job da schedulare è il seguente:

global class scheduledExample implements Schedulable {
   global void execute(SchedulableContext SC) {
      //your logic here
   }
}

Come schedulare un Job in Salesforce

Una volta che avrai creato la Classe, hai due modi per schedulare il Job: da UI Salesforce, oppure attraverso uno script da inserire nel codice Apex oppure da far girare nella Developer Console.

Per quanto riguarda il primo metodo, cioè da UI Salesforce, procedi così:

1. Dalla pagina principale dell Org clicca sulla rotellina e poi su “Setup”.

2. Nella ricerca laterale cerca “Apex Class” e clicca sul link che appare.

3. Nella schermata “Apex Class” vedrei diversi pulsanti, clicca su “Schedule Apex” a destra come mostrato in figura.

4. Inserire il nome dello scheduler (che sia autoesplicativo e parlante), poi clicca sulla lente di ingrandimento per trovare la classe precedentemente scritta e decidere in quali giorni e orari il Job dovrà eseguire. Clicca su “Save”.

Ricorda: schedulare un Job da UI pone dei limiti sull’orario di esecuzione.

Se hai necessità di maggiore flessibilità per lo scheduling, puoi utilizzare il secondo metodo, ovvero schedulare Job utilizzando lo script Apex, in questo modo potrai scegliere praticamente ogni orario possibile.

Lo script da utilizzare dovrà essere simile al seguente:

SchedulableClass m = SchedulableClass();

String cron = ’00 30 8 * * *’;

String JobID = system.schedule(‘My scheduled Job’, cron, m);

La stringa cron definisce ogni quanto far girare il Job, e utilizza il seguente pattern:

  • Secondi 
  • Minuti 
  • Ora 
  • Giorno_Del_Mese 
  • Mese 
  • Giorno_Della_Settimana 
  • Anno [opzionale]

Esistono caratteri speciali che ti consentono di inserire “tutti i giorni” o “tutte le ore”; per verificare come costruire questa stringa ti consiglio di consultare la guida ufficiale nel paragrafo “Using the System.Schedule Method”.

Come posso sapere tutti i Job schedulati all’interno della mia Org?

1. Dalla pagina principale in alto a destra clicca sulla rotellina e poi su “Setup”.

2. Nella barra laterale di ricerca scrivi “Scheduled Jobs” e clicca sul link.

3. Una volta cliccato sul link, vedrai tutti i Job schedulati all’interno della tua Org, e da questa schermata potrai cambiare anche lo scheduling di un Job.

Attenzione però: potrai cambiare soltanto i Job che avete precedentemente creato da UI, semplicemente cliccando su “Manage”

Se non riesci a vederlo significa che il Job è stato schedulato da Apex. Se non corrisponde più al tuo bisogno, dovrai eliminare il Job Scheduler e creare un nuovo scheduling.

Scrivere la classe di test di uno scheduler

Per testare correttamente una classe che estende l’interfaccia schedulable è necessario essere sicuri che il Job abbia terminato per poter poi scrivere i system.assert che ci aspettiamo.

Come puoi assicurarti che un Job abbia terminato prima di verificarne il risultato?

Basta inserire il Job scheduler all’interno dello statement startTest e stopTest e inserire gli assert subito dopo stopTest. In questo modo sarai sicuro che gli assert verranno eseguiti solo quando il Job avrà terminato.

Ecco un esempio di script per testare una classe schedulable:

public static String CRON_EXP = '0 0 0 3 9 ? 2022';
Test.startTest();
String JobId = System.schedule(‘myTestScheduleJob’,
     CRON_EXP,
        new myTestScheduleJob());
Test.stopTest();
System.assertEquals(ConditionTrue, yourResultHere);

Limiti della classe Schedulable

Come per ogni strumento che si rispetti in Salesforce, è necessario conoscere i limiti che la piattaforma impone:

  • Si possono schedulare fino a 100 Job contemporaneamente.
  • Il numero massimo di Job schedulati in 24 ore può essere: 250.000 oppure 200 moltiplicato per il numero di licenze acquistate per quella Org; di questi due si considera il numero più grande.
    Considera che questo limite non riguarda soltanto i Job schedulati ma il totale dei Job asincroni che girano in 24 ore all’interno della Org, quindi anche metodi future, batch, queueable ecc.

Considerazioni finali sull’utilizzo di uno scheduler in Salesforce

Ecco le considerazioni finali da portare con sé alla fine di questo articolo:

  • Anche se scheduliamo un Job in un dato momento, è possibile che la sua esecuzione venga ritardata perché altri Job stanno eseguendo nello stesso momento.
  • Se ci sono interventi programmati sulla piattaforma da parte di Salesforce, tutti i Job verranno eseguiti alla fine dell’intervento.
  • Presta attenzione se scheduli un Job a partire da un Trigger: fa in modo che il trigger non sia in grado di schedulare più Job rispetto al limite massimo visto sopra.
  • Da una classe Schedulable non si possono effettuare chiamate callout sincrone. Se devi interrogare sistemi esterni l’unico modo è farlo attraverso un metodo Future o una Queueable.

Per sapere in dettaglio il funzionamento di una classe che estende l’interfaccia Schedulable, ti invitiamo ad approfondire la guida ufficiale Salesforce.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *