首页 > 解决方案 > 使用 APEX 每周发送电子邮件模板

问题描述

@sfdcfox 我有一个特定的电子邮件模板,我想每周从 Salesforce 发送给客户。电子邮件必须根据以下内容发送给所有客户: 1 - 客户 ID 非空白 2 - 一周中的特定日期和一天中的时间。相对于时区。

你能帮忙一步一步的代码吗?

​​​​​​​​谢谢

标签: salesforceapex

解决方案


所以这个时区的事情让这变得更加棘手。

  • 创建一个保存交易的对象,我们称之为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** ]

    • 遍历那个 if 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 Datetime 是否> System.now()。如果是,请将它们添加到 aList<Messaging.SingleEmailMessage>并添加逻辑以将它们添加到电子邮件模板。发送该电子邮件列表后,将记录更新为Sent__c = true,更新记录。

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

  • 然后,在 中 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 日期参考

Apex 可排队

Apex 可调度

消息命名空间


推荐阅读