2012-02-03 26 views
8

Tôi đang cố lên lịch cho một lớp học chạy 15 phút một lần. Tôi biết chúng tôi có thể đặt doanh số bán hàng cho mỗi giờ, nhưng có cách nào để giảm độ chi tiết xuống 10-15 phút không?Làm cách nào để lên lịch cho mỗi lớp chạy 15 phút một lần trong lực lượng bán hàng?

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

Trả lời

14

Bạn có thể sử dụng đoạn mã apex này để lên lịch công việc của mình chạy 15 phút một lần.

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

Tôi khá chắc chắn rằng bạn cũng có thể sử dụng dấu phẩy để phân định nhiều giá trị: 'System.schedule ('Job1', '0 0,15,30,45 * * *?', new scheduledMerge()); ' –

+0

Dòng đầu tiên của câu trả lời này sẽ làm cho công việc (theo lý thuyết) thực thi mỗi phút. Cách "ưu tiên cron" để diễn tả "chạy 15 phút một lần trên 15" sẽ là '0 0/15 * * *?'. – jkraybill

+3

Matt, trên thực tế trong Apex CRON bạn phải chỉ định giây và phút làm số nguyên --- dấu phẩy, dấu sao và dấu gạch ngang chỉ có sẵn cho các thành phần CRON khác. Vì vậy, cách tiếp cận '0,15,30,45' của bạn sẽ không hoạt động. Ngoài ra, một lời cảnh cáo về cách tiếp cận Rajesh của phương pháp tiếp cận: bạn chỉ có thể có 25 Tổng số Apex lớp học theo lịch trình, và cách tiếp cận của Rajesh sử dụng hết 4 trong số họ. Nhưng nếu bạn có nhiều việc làm để rảnh rỗi, thì điều này sẽ hoạt động tốt. – 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

Xác định biến được gọi là 'now' và sử dụng phương thức addMinutes (Integer) sẽ chính xác. Giờ hiện tại = System.now(); Ngày giờ nextE = now.addMinutes (10); –

+0

điều này sẽ chạy mỗi 15 phút ngay cả khi tôi đặt lịch biểu đỉnh thành 1 giờ? – sfdclearner

Các vấn đề liên quan