【问题标题】:How to implement scheduler in Apex?如何在 Apex 中实现调度程序?
【发布时间】:2010-11-11 08:33:06
【问题描述】:

我在 salesforce 中看到了类似调度程序的功能,但它与 salesforce 提供的现有功能有些相关,并且就我的研究而言,没有提供示例源代码。

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

目标:

自定义对象Player 有字段

startDate : date like '2010-11-01'
email : text field like foo@bar.com
name : player's name like John.

如果今天的日期比 startDate 早一天,我想向播放器发送电子邮件。 例如,玩家的名字是John,如果今天是2010-12-10,而一个玩家的startDate 设置为2010-12-11,则会发送电子邮件说"hello John"

不幸的是,我找不到很好的在线示例或教程或销售人员文档如何使用 Apex 执行此操作。 谁能指出从哪里开始?

更新

我想从eyescream.扩展答案

设置调度程序后,您可以设置要采取的后续操作,例如使用模板发送电子邮件或将自定义对象字段设置为某些值。

我发现以下内容对使用 Visualforce 格式的电子邮件模板的人很有用。

我有自定义对象“alertTester”,它引用了其他对象“custom”,甚至这个对象“custom”也引用了另一个对象“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>

【问题讨论】:

    标签: email salesforce scheduler apex-code visualforce


    【解决方案1】:

    在深入了解 Apex 之前,请先查看不涉及代码的解决方案...

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

    【讨论】:

    • 我查看了工作流页面,发现只能设置 5 个电子邮件地址。在我的场景中,用户将创建计划并且客户自定义对象具有电子邮件字段。所以会有 100 个客户,每个客户都有自己的电子邮件地址。我的调度程序需要查看它们中的每一个,因此这种情况可能不适合现有功能。有什么想法吗?
    • 在播放器对象上创建电子邮件警报,将收件人类型设置为“电子邮件字段”。您的字段(例如,如果它的类型真的是电子邮件而不是文本!)应该出现在列表中。单击箭头将其移动到屏幕右侧。很难描述,但截图可能会有所帮助:dl.dropbox.com/u/709568/stackoverflow/masato%20email.png
    • Ok... 规则设置阶段,这是您配置条件的第 2/3 步,例如我选择 Player 对象的日期字段,但 salesforce 接受的实际值是静态日期字符串,例如 '2001 /10/10'。
      我需要做的是像'today() - 1 day' 这样的事情,但没有运气..
    • 实际上在同一页面上,我发现条件下拉列表使其为“TRUE”,这使我可以更详细地设置条件。谢谢!
    【解决方案2】:

    我又来回答我自己的问题了..

    以下链接,搜索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;
       }   
    }
    

    【讨论】:

    • 嗯,我在上面尝试过,但似乎无法以某种方式工作。我将调度程序设置为每小时向自己发送电子邮件,但我没有收到……仍在调查中
    猜你喜欢
    • 2021-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-07
    • 1970-01-01
    • 1970-01-01
    • 2020-02-08
    相关资源
    最近更新 更多