Salesforce: System.Date()在scheduled job使用时的注意事项

今天帮忙客户查看一个scheduled job的问题。

scheduled job的大致功能是每天定时通过batch去删除某个对象前一天的数据。

但是客户发现虽然每天batch都有执行,但是查询出来的数据却始终是0。

经过检查代码发现,代码中使用System.today()赋值给了一个final类型的变量

private final Date currentDate = System.today();

再进行sql查询:
SELECT Id FROM BB_Audit_Log__c WHERE Audit_Datestamp__c < :currentDate
 
问题即出现在final的使用上。
如果将值赋给了final类型的变量,则currentDate的值将始终保持为scheduled job创建的那一天的日期。
所以导致batch无法正常工作。
 
所以解决办法就是去掉final属性。
原文地址:https://www.cnblogs.com/clsriz/p/13572544.html