每周通过APEX发送电子邮件模板

时间:2020-02-06 23:58:04

标签: salesforce apex

@sfdcfox 我有一个特定的电子邮件模板,希望每周从Salesforce发送给客户。 该电子邮件必须根据以下条件发送给所有客户: 1-客户编号非空白 2-相对于时区的星期几和一天中的特定时间。

请问您可以提供逐步代码吗?

谢谢

1 个答案:

答案 0 :(得分:0)

因此,时区问题使这一点变得棘手。

  • 创建一个保存事务的对象,我们将其称为ClientEmail

    • 将记录ID存储在Client__c等字段中
    • 在客户端的区域设置中以格林尼治标准时间(GMT)存储电子邮件可以发送的日期时间的时间戳记Available Date Time

    • 添加布尔字段Sent__c

  • 编写您的逻辑以收集Apex类ClientEmailController中的适当记录。

    • SOQL查询应类似于以下格式:[SELECT Id,(SELECT Id,AvailableDateTime__c,Sent__c FROM ClientEmails__r WHERE Sent__c = false) FROM **Your Object** ]

    • 进行遍历,如果为ClientEmails__r.isEmpty() == true,则创建带有适当时间戳记的ClientEmail记录。

    • 如果为ClientEmails__r.isEmpty() == false,则跳过记录。

  • 在另一种方法上,使用SOQL查询(例如[SELECT Id,Client__c,AvailableDateTime__c,Sent__c FROM ClientEmail__c WHERE AvailableDateTime__c = TODAY AND Sent__c = false])来收集今天可用的所有记录。遍历它们并检查GMT日期时间> System.now()。如果是,请将其添加到List<Messaging.SingleEmailMessage>并添加逻辑以将其添加到电子邮件模板。发送完该电子邮件列表后,将记录更新为Sent__c = true,然后更新记录。

  • 创建一个Apex类ClientEmailQueueable。从那里实现Queueable并在ClientEmailController上调用方法send方法来收集和发送电子邮件。

  • 然后在ClientEmailSchedulable中实现Schedulable并调用System.enqueueJob(new ClientEmailQueueable());

确保在工作时间内每小时安排好工作。

这将是相当数量的代码,因此我将留给您,但是您的元数据结构如下:

  • 自定义对象:客户电子邮件(ClientEmail__c
    • 字段:客户(Client__c)主-详细信息
    • 字段:可用日期时间(AvailableDateTime__c)日期时间
    • 字段:已发送(Sent__c)复选框/布尔值
  • 顶点类ClientEmailController
    • 创建初始记录方法
    • 收集并发送电子邮件
  • 顶点类:ClientEmailQueueable implements Queueable
    • 从此处调用Gather and Send Emails方法
  • 顶点类:ClientEmailSchedulable implements Schedulable
    • 从此处调用ClientEmailQueueable

SOQL Date References

Apex Queueable

Apex Schedulable

Messaging Namespace