Java 销售人员:生日问题
我写了一个Apex调度程序类,在离同事生日还有两天的时候发送电子邮件。我已经与两天后的生日建立了联系。联系人的生日是2012年7月29日。今天的日期是2012年7月27日 我卡住了。我没有收到任何错误消息或任何东西。我已安排今天12点上课。我没有收到电子邮件(要么告诉我是某人的生日(成功),要么从Salesforce收到错误消息,告诉我代码无法运行(失败) 为了排除故障,我还尝试了电子邮件方法的if(contact.Next_birth__c=:system.Today().addDays(2)),但得到了一个不兼容的类型错误。Next_birth___c是一个日期字段,因此我不确定为什么类型不兼容,或者为什么这个SOQL语句不起作用 任何建议都将不胜感激。这是我的代码Java 销售人员:生日问题,java,salesforce,apex-code,scheduler,Java,Salesforce,Apex Code,Scheduler,我写了一个Apex调度程序类,在离同事生日还有两天的时候发送电子邮件。我已经与两天后的生日建立了联系。联系人的生日是2012年7月29日。今天的日期是2012年7月27日 我卡住了。我没有收到任何错误消息或任何东西。我已安排今天12点上课。我没有收到电子邮件(要么告诉我是某人的生日(成功),要么从Salesforce收到错误消息,告诉我代码无法运行(失败) 为了排除故障,我还尝试了电子邮件方法的if(contact.Next_birth__c=:system.Today().addDays(2)
global class BirthdayNameOptions implements Schedulable{
global void execute (SchedulableContext ctx)
{
sendBirthdayEmail();
}
public void sendBirthdayEmail()
{
for(Contact con : [SELECT Name FROM Contact WHERE Next_Birthday__c = : system.Today().addDays(2)])
{
Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();
mail.setTemplateId('00XJ0000000M31w');
mail.setTargetObjectId('005J0000000');
mail.setSaveAsActivity(false);
Messaging.sendEmail(new Messaging.SingleEmailMessage[] {mail });
}
}
}
我相信您希望将出站电子邮件的
targetObjectId
设置为生日的联系人,而不是硬编码…代码中的值005J0000000
似乎也不是有效的ID,这可能会导致您未收到电子邮件。出于测试目的,您希望确保act record的电子邮件设置为您的电子邮件,因此您会收到通知。此外,每次执行时,您只会接到10个呼叫Messaging.sendEmail()
,因此我为您对此进行了一些扩展。试一试:
global class BirthdayNameOptions implements Schedulable {
global void execute (SchedulableContext ctx) {
sendBirthdayEmail();
}
public void sendBirthdayEmail() {
List<Messaging.SingleEmailMessage> mails = new List<Messaging.SingleEmailMessage>();
for ( Contact con : [SELECT Id, Name FROM Contact WHERE Next_Birthday__c = : system.Today().addDays(2)] ) {
Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();
mail.setTemplateId('00XJ0000000M31w');
mail.setTargetObjectId(con.Id);
mail.setSaveAsActivity(false);
mails.add(mail);
}
if ( mails.size() > 0 )
Messaging.sendEmail(mails, false);
}
}
全局类BirthdayNameOptions实现可调度{
全局无效执行(SchedulableContext ctx){
sendBirthdayEmail();
}
公共无效sendBirthdayEmail(){
列表邮件=新列表();
对于(联系人con:[选择Id,下一个生日联系人的姓名=:system.Today().addDays(2)]){
Messaging.SingleEmailMessage mail=新建消息。SingleEmailMessage();
mail.setTemplateId('00XJ0000000M31w');
mail.setTargetObjectId(con.Id);
mail.setSaveAsActivity(false);
邮件。添加(邮件);
}
如果(mails.size()>0)
发送邮件(邮件,错误);
}
}
您是否访问过:SFDC->Setup->Administration Setup->Scheduled Jobs有您的类执行的记录吗?如果有,是否有任何错误或异常?此外,仅仅扩展可调度类并不一定意味着它将执行,您实际上通过创建CronTrigger
sobject在组织中调度作业Jordan,该类位于计划作业中。您能告诉我有关此CronTrigger对象的更多信息吗?我将如何启动此对象?如果它位于计划作业页面中,则您已经创建了您感兴趣的CronTrigger记录。您很可能是通过System.schedule()创建的
方法。这确实应该是一个基于时间的工作流,使用预定的类发送电子邮件看起来很严肃overkill@Ralph,生日电子邮件需要每年重复。基于时间的工作流只工作一次,然后终止