2012-02-03 12 views
8

Sto provando a programmare una classe da eseguire ogni 15 minuti. So che possiamo impostare Salesforce per ogni ora, ma esiste un modo per ridurre la granularità a 10-15 minuti?Come pianificare una classe da eseguire ogni 15 minuti in salesforce?

global class scheduledMerge implements Schedulable { 
    global void execute(SchedulableContext SC) { 
     ProcessTransactionLog p= new ProcessTransactionLog(); 
     p.ProcessTransaction(); 
    } 
} 

risposta

14

È possibile utilizzare questo snippet di codice apex per pianificare l'esecuzione del proprio lavoro ogni 15 minuti.

System.schedule('Job1', '0 0 * * * ?', new scheduledMerge()); 
System.schedule('Job2', '0 15 * * * ?', new scheduledMerge()); 
System.schedule('Job3', '0 30 * * * ?', new scheduledMerge()); 
System.schedule('Job4', '0 45 * * * ?', new scheduledMerge()); 
+0

Sono abbastanza sicuro che è possibile utilizzare anche le virgole per delimitare più valori: 'System.schedule ('Job1', '0 0,15,30,45 * * *?', new scheduledMerge()); ' –

+0

La prima riga di questa risposta farà in modo che il lavoro (teoricamente) venga eseguito ogni minuto. Il modo "cron-preferred" per esprimere "eseguito ogni 15 minuti sul 15" sarebbe "0 0/15 * * *?". – jkraybill

+3

Matt, effettivamente in Apex CRON devi specificare secondi e minuti come numeri interi --- virgole, stelle e trattini sono disponibili solo per gli altri componenti CRON. Quindi il tuo approccio '0,15,30,45' non funzionerà. Inoltre, una parola di cautela nel seguire l'approccio di Rajesh: puoi avere solo 25 classi Apex pianificate totali e l'approccio di Rajesh ne usa 4. Ma se hai molti lavori da risparmiare, allora funzionerà alla grande. – zachelrath

0
global class scheduledTest implements Schedulable { 
    global void execute(SchedulableContext SC) { 
     RecurringScheduleJob.startJob(); 
     String day = string.valueOf(system.now().day()); 
     String month = string.valueOf(system.now().month()); 
     String hour = string.valueOf(system.now().hour()); 
     String minute = string.valueOf(system.now().minute() + 15); 
     String second = string.valueOf(system.now().second()); 
     String year = string.valueOf(system.now().year()); 

     String strJobName = 'Job-' + second + '_' + minute + '_' + hour + '_' + day + '_' + month + '_' + year; 
     String strSchedule = '0 ' + minute + ' ' + hour + ' ' + day + ' ' + month + ' ?' + ' ' + year; 
     System.schedule(strJobName, strSchedule, new scheduledTest()); 
    } 
} 
+1

Definire una variabile denominata "now" e utilizzare il metodo addMinutes (Integer) sarà accurato. Datetime now = System.now(); Data/ora nextE = now.addMinutes (10); –

+0

verrà eseguito ogni 15 minuti anche quando imposto il programma dell'apice su 1 ora? – sfdclearner

Problemi correlati