@ sfdcfox我有一个特定的电子邮件模板,希望每周从Salesforce发送给客户。该电子邮件必须根据以下条件发送给所有客户:1-客户编号不可空白2-星期几和一天中的特定时间。关于时区。
您能否提供逐步代码帮助?
谢谢
因此,时区问题使这个问题更加棘手。
创建一个保存交易的对象,我们称它为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
类