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

问题描述 投票:0回答:1

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

您能否提供逐步代码帮助?

谢谢

salesforce apex
1个回答
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
    • 创建初始记录方法
    • 收集并发送电子邮件
  • 顶点类别:ClientEmailQueueableimplements Queueable
    • 从这里调用Gather and Send Emails方法
  • 顶点类别:ClientEmailSchedulableimplements Schedulable
    • 从这里调用ClientEmailQueueable
  • SOQL Date References

    Apex Queueable

    Apex Schedulable

    Messaging Namespace

    © www.soinside.com 2019 - 2024. All rights reserved.