Salesforce 异步概述 -- Salesforce Scheduled Apex
Apex Scheduler允许您延迟执行,以便您可以在指定的时间运行Apex类。这是理想的日常或每周维护任务使用Batch Apex。要利用调度程序,请编写一个实现Schedulable接口的Apex类,然后将其调度到特定的调度上执行。
要调用在特定时间运行的Apex类,首先implement 该类的 Schedulable interface。然后,使用System.schedule 在特定时间运行
实现的方法必须声明为global或public
global class SomeClass implements Schedulable {
global void execute(SchedulableContext ctx) {
// awesome code here
}
}
类实现Schedulable接口,必须实现该接口包含的惟一方法,即execute方法。该方法的参数是一个SchedulableContext对象。在调度一个类之后,将创建一个表示调度作业的CronTrigger对象。它提供了一个getTriggerId方法,该方法返回CronTrigger API对象的ID。
global class RemindOpptyOwners implements Schedulable {
global void execute(SchedulableContext ctx) {
List opptys = [SELECT Id, Name, OwnerId, CloseDate
FROM Opportunity
WHERE IsClosed = False AND
CloseDate < TODAY];
// Create a task for each opportunity in the list
TaskUtils.remindOwners(opptys);
}
}
您可以调度类以编程方式或从Apex Scheduler UI运行。
对于Scheduler的apex监控可以通过以下几种方式
1:通过 system.schedule返回的Job ID 查询
String jobID = system.schedule('Merge Job', sch, m);
CronTrigger ct =
[SELECT TimesTriggered, NextFireTime FROM CronTrigger WHERE Id = :jobID];
2:在Scheduler 的Execute方法中查询
CronTrigger ct =
[SELECT TimesTriggered, NextFireTime FROM CronTrigger WHERE Id = :sc.getTriggerId()];
您还可以从与CronTrigger记录相关联的CronJobDetail记录中获取作业的名称和作业的类型
[SELECT Id, CronJobDetail.Id, CronJobDetail.Name, CronJobDetail.JobType FROM CronTrigger ORDER BY CreatedDate DESC LIMIT 1];
System.Schedule Method
在使用Schedulable接口实现类之后,使用System.Schedule方法来执行它。 System.Schedule 方法使用用户的时区作为所有调度的基础,但是在系统模式下运行——所有类都被执行,无论用户是否有执行类的权限。
System.Schedule方法接受三个参数:作业的名称、用于表示作业计划运行的时间和日期的CRON表达式,以及类的名称。
RemindOpptyOwners reminder = new RemindOpptyOwners();
// Seconds Minutes Hours Day_of_month Month Day_of_week optional_year
String sch = '20 30 8 10 2 ?';
String jobID = System.schedule('Remind Opp Owners', sch, reminder);
语法
Seconds Minutes Hours Day_of_month Month Day_of_week Optional_year
Limit
- 一次只能有100个计划的Apex作业,每24小时内计划执行的Apex的最大数量是250,000,或者是组织中的用户许可证数量乘以200,两者以较大的为准也可以通过编程方式查询通过CronTrigger和CronJobDetail对象来获取Apex计划任务的计数。
 - 如果您计划从触发器安排一个类,请务必小心。您必须能够保证触发器不会添加超过限制的计划作业。
 - Scheduled Apex不支持同步Web service调用。为了能够进行标注,可以将标注放在带有@future(callout=true)注释的方法中,并从Scheduled Apex调用该方法来进行异步标注。如果Scheduled Apex执行batch job,则批处理类支持调出
 - 如果一个Apex类有一个或多个active scheduled jobs 则这个apex class 不可以在salesforce用户界面更改,但是可以通过change set部署,或者VS code 更改
 
                    
                
                
            
        
浙公网安备 33010602011771号