Apex学习:一个计划任务与批处理的Demo
来源:互联网 发布:c语言入门经典第六版 编辑:程序博客网 时间:2024/05/22 14:23
在一些业务场景下,我们需要指定时间,定期执行某段代码,比如定期清理垃圾,同步数据等。接下来以生日提醒为例完成一个Demo。
创建一个对象Friend__c,里面包含字段:日期字段生日birthday__c和公式字段生日提醒时间remainder__c<等于生日日期-3>。计划任务的代码如下:
global class BirthdayRemindBatchScheduler implements Schedulable{global void execute(SchedulableContext SC){Database.executeBatch(new BirthdayReminderBatch(),200);}}
计划任务的实现类必须实现Schedulable接口,并覆盖execute方法。
然后选择依次选择:开发→Apex类→计划Apex。
设置作业名称,选定要执行计划任务类以及执行时间,保存。
这种方式只能将执行时间精确到小时,如果要更精确的时间需要使用代码在后台实现。
所有计划执行的任务都可以在作业→计划的作业中查看:
接下来是生日提醒的具体实现,BirthdayReminderBatch实现
global class BirthdayReminderBatch implements Database.Batchable<sObject> {public Date todayy;public String myEmailAddress = 'xxxx@xxx.com.cn';//这里的邮箱最好不写QQ邮箱地址,某些情况下Salesforce平台给QQ邮箱发送的邮件收不到global BirthdayReminderBatch() {todayy = Date.today();System.debug('todayy:' + todayy);}global List<Friend__c> start(Database.BatchableContext BC) {//remainder__c:生日提醒是作为一个辅助字段存在,用公式来快速定位时间,避免在类中操作List<Friend__c> list_con = new List<Friend__c>([select Id,Name,ownerId,owner.email from Friend__c where remainder__c =: todayy]);System.debug('*****朋友的信息*****' + list_con);return list_con;} global void execute(Database.BatchableContext BC, List<Friend__c> scope) { System.debug('*****execute_contact*****' + scope); //发送邮件 for(Friend__c fri : scope){ Messaging.SingleEmailMessage email = new Messaging.SingleEmailMessage(); email.setToAddresses(new String[]{myEmailAddress}); email.setSubject('生日提醒'); email.setHtmlBody('您好,' + fri.Name + '的生日还有三天,请做好相关准备!'); Messaging.sendEmail(new Messaging.SingleEmailMessage[]{email}); }}global void finish(Database.BatchableContext BC) {}}
计划任务大部分情况下是与批处理一起使用的,实现批处理的类需要实现Database.Batchable<sObject>接口,并覆盖其三个生命周期方法:
//start方法,主要用于对数据的初始化和准备工作global (Database.QueryLocator | Iterable<sObject>) start(Database.BatchableContext bc){}//execute 方法,主要对数据的处理,每次都会被执行,业务逻辑的核心方法global void execute(Database.BatchableContext BC, list<P>){}//finish方法,主要用于批处理结束后的后续处理,比如发送邮件等global void finish(Database.BatchableContext BC){}
execute 中方法的List<P>集合即为start方法的返回值,可以直接在方法中使用。
批处理方法可以在页面上通过按钮来调用,也可以在后台通过代码,或者计划任务来调用。
在Apex中,对SQOL的操作有着诸多限制,譬如一次执行的SOQL的次数不能超过100次,查询的数据不能超过5000条等,遇到因为对于DML操作有限制,比如因为项目需求,需要修改50万条数据,直接调用Database.update()便会抛出异常,如果需要达到目的,就只能使用批处理。
以上,希望能帮助到需要的朋友。
阅读全文
0 0
- Apex学习:一个计划任务与批处理的Demo
- 任务计划设置批处理
- 解决,windows的任务计划中添加一个批处理脚本,总是显示命令行窗口的问题
- 计划任务与批处理结合定时启动屏保
- DOS批处理添加任务计划
- DOS批处理添加任务计划
- 批量导入导出windows计划任务的批处理脚本
- 批处理--自动创建计划任务之删除7天以前的备份文件批处理
- 一个批量结算任务的demo
- 自动备份,批处理,windows计划任务
- 怎么用批处理建立计划任务
- 结合批处理与Windows计划任务简单实现MYSQL增量采集New!
- Oracle数据库备份与恢复--Windows批处理+定时任务计划(V1.0)
- Aix计划任务学习
- 计划任务crontab学习
- 从Oracle取数据的批处理代码,Windows计划任务通常采用的办法
- 学习笔记- 自己写的关于生产者与消费者模式,还有定时任务的demo。
- Spring框架 计划任务Schedule job demo
- C++ 解析Json——jsoncpp vs2013 C++
- 7_24日C语言|整型提升相关介绍
- extgrid动态显示列
- OSG(OpenSceneGraphic) 渲染引擎架构--整体认识
- java读取xml文件的四种方法
- Apex学习:一个计划任务与批处理的Demo
- Nginx学习笔记(二) 负载均衡
- 空字符串+""等操作结果
- 拓扑排序的一道水题
- Android Fragment 的使用,一些你不可不知的注意事项
- HDU6034-Balala Power!
- xlistview加多条目
- 关于安卓底部栏包引入问题解决
- 2017 Multi-University Training Contest 1 solutions BY 北京航空航天大学