@sfdcfox 我有一个特定的电子邮件模板,希望每周从Salesforce发送给客户。 该电子邮件必须根据以下条件发送给所有客户: 1-客户编号非空白 2-相对于时区的星期几和一天中的特定时间。
请问您可以提供逐步代码吗?
谢谢
答案 0 :(得分:0)
因此,时区问题使这一点变得棘手。
创建一个保存事务的对象,我们将其称为ClientEmail
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
类