2010-11-11 36 views
0

我在salesforce中看到类似功能的调度程序,但它与salesforce提供的现有功能有些相关,并且根据我的研究,没有提供示例源代码。如何在Apex中实现调度程序?

我想要做的是创建我自己的调度程序,它根据日期发送简单的电子邮件。

目标:

自定义对象Player有场

startDate : date like '2010-11-01' 
email : text field like [email protected] 
name : player's name like John. 

如果今天的日期为一天起始日期之前,我想请发邮件到播放器。 例如,玩家的名字是John,如果今天是2010-12-10并且一个玩家的startDate设置为2010-12-11,则发送称为"hello John"的电子邮件。

不幸的是,我找不到好的示例或教程在线或salesforce doc如何使用Apex做到这一点。 任何人都可以指出从哪里开始?

UPDATE

我想答案从eyescream.

扩展设置调度程序后,可以设置什么跟进采取类似使用模板或设置自定义对象字段的一些值发送电子邮件。

下面我发现在Visualforce格式中使用电子邮件模板的人很有用。

我有自定义对象'alertTester',它引用了其他对象的'自定义',甚至这个对象'自定义'引用另一个对象'custom1GrandChild'和所有的关系(最多3层或5层我认为)可以像下面那样访问。

我已经测试过,工作正常。现在我收到的电子邮件与我的条件集合:)

<messaging:emailTemplate subject="Hello" recipientType="User" relatedToType="alertTester__c" > 
<messaging:plainTextEmailBody > 

{!relatedTo.name} 
{!relatedTo.custom__r.name} 
{!relatedTo.custom__r.custom1GrandChild__r.name} 


</messaging:plainTextEmailBody> 
</messaging:emailTemplate> 

回答

1

退房的解决方案,不涉及代码之前,你会深深地扎到顶点...

电子邮件警报+工作流规则应该在这种情况下为您提供您需要的所有功能,只需单击即可,无需任何代码。

+0

非常感谢您的提示,我会尝试! – 2010-11-13 09:08:45

+0

我查看了工作流页面,发现只能设置5个电子邮件地址。在我的场景中,用户将创建时间表,客户自定义对象具有电子邮件字段。因此,将有100个客户各自拥有单独的电子邮件地址。我的调度程序需要查看它们中的每一个,因此这种情况可能不适合现有功能。有什么想法吗? – 2010-11-14 23:57:37

+1

在播放器对象上创建电子邮件提醒,将收件人类型设置为“电子邮件字段”。你的领域(如果它的类型真的是电子邮件而不是文本,例如!)应该出现在列表中。点击箭头将其移动到屏幕的右侧。很难形容,但也许截图会有所帮助:http://dl.dropbox.com/u/709568/stackoverflow/masato%20email.png – eyescream 2010-11-15 18:35:51

1

我回答再次我自己的问题..

下面的链接,搜索schedule

http://www.salesforce.com/us/developer/docs/apexcode/index.htm

外貌像Apex有Schedulable接口,我可以实现并设置cron任务。

下面是在文档提供的示例代码:

global class TestScheduledApexFromTestMethod implements Schedulable { 

// This test runs a scheduled job at midnight Sept. 3rd. 2022 


    public static String CRON_EXP = '0 0 0 3 9 ? 2022'; 

    global void execute(SchedulableContext ctx) { 
     CronTrigger ct = [SELECT id, CronExpression, TimesTriggered, NextFireTime 
       FROM CronTrigger WHERE id = :ctx.getTriggerId()]; 

     System.assertEquals(CRON_EXP, ct.CronExpression); 
     System.assertEquals(0, ct.TimesTriggered); 
     System.assertEquals('2022-09-03 00:00:00', String.valueOf(ct.NextFireTime)); 

     Account a = [SELECT id, name FROM Account WHERE name = 
        'testScheduledApexFromTestMethod']; 
     a.name = 'testScheduledApexFromTestMethodUpdated'; 
     update a; 
    } 
} 
+0

嗯我已经试过上面,但似乎不工作莫名其妙。我设置调度程序发送自己的电子邮件每小时,但我没有收到..仍在调查中 – 2010-11-15 11:26:59