salesforce - 使用 APEX 每周发送电子邮件模板
问题描述
@sfdcfox 我有一个特定的电子邮件模板,我想每周从 Salesforce 发送给客户。电子邮件必须根据以下内容发送给所有客户: 1 - 客户 ID 非空白 2 - 一周中的特定日期和一天中的时间。相对于时区。
你能帮忙一步一步的代码吗?
谢谢
解决方案
所以这个时区的事情让这变得更加棘手。
创建一个保存交易的对象,我们称之为
ClientEmail
- 将记录 ID 存储在字段中,例如
Client__c
从客户端的区域设置以 GMT 格式存储电子邮件可发送的日期时间的时间戳,
Available Date Time
添加一个布尔字段,
Sent__c
- 将记录 ID 存储在字段中,例如
编写逻辑以在 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
班级
- 从这里呼叫
推荐阅读
- javascript - 节点 JS 类型错误:无法读取属性
- blazor - Blazor JSRuntime 关注 foreach 中的元素
- laravel - 使用 laravel、vue 和 axios 上传多张图片
- javascript - 在画布范围内平滑平移
- python - Pygame:返回变量的按钮运行函数
- c++ - Boost Graph Library:资源受限的最短周期
- git - Git 合并之前还原的提交
- css - Flask 为绝对存在的 css 文件提供 404
- android - 将 Kotlin 变量与 Activity-XML 连接起来
- regex - 如何在 Nginx 上重写@sign?