1、背景
最近有这样一个需求:有两个自定义对象A和B,两对象关系为Master(A)-Detail(B),A的详细页面有B的关联列表。现在,要求从A页面的活动(Activity)Tab下,使用标准的电子邮件功能进行邮件发送,邮件内容要求包含对象A中的字段数据和对象B中的字段数据,邮件发送或者抄送给固定的6个人。
我们以下图为例,有两个自定义对象:学生和成绩【Master(学生)-Detail(成绩)】。我们需要在学生详细页面,给学生发送期末考试信息,并抄送班主任,邮件内容需要包含学生信息和成绩信息,要求使用邮件模板。
2、方法尝试
首先想到的是Classic 电子邮件模板中的文本类型模板,好处是使用简单,不需要写代码
格式大致如下:
同学,
请确认你的个人信息及期末成绩:
姓名:{!Students__c.Name__c}
年龄:{!Students__c.Age__c}
班级:{!Students__c.Class__c}
祝学习进步!
但是,我们的需求是,邮件内容需要包含学生信息和成绩信息。
经过验证,文本类型模板无法取得当前对象数据以外的对象的数据的字段值,无论对象之间是主-详细信息关系或查找关系。
这种情况下,我们需要选择使用Visualforce邮件模板。
3、解决方案
配置如下:
有个注意点:收件人类型选择联系人(Contact)的原因是,Visualforce邮件模板只能发送给联系人或潜客(Lead)。如下图:
保存后,开始编辑模板。
这里,我们需要通过Apex从后台,取出该学生关联的成绩数据,且显示在Visualforce Component里(注意不是Visualforce Page)。代码如下:
Apex代码:
public class StudentsHelper {
/**
* 学生ID
*/
public Id studentId {get;set;}
/**
* 获取关联的成绩列表
*/
public List<Grade__c> getGrade()
{
// 初始化成绩列表
List<Grade__c> grade;
// 查询最近一条与学生相关的成绩信息
grade = [SELECT Score__c, Subject__c, Students__c FROM Grade__c WHERE Students__c =: studentId ORDER BY CreatedDate DESC limit 1];
// 返回查询结果
return grade;
}
}
Visualforce Component代码:
<apex:component controller="StudentsHelper" access="global">
<apex:attribute name="stuId" type="Id" description="Id of the student" assignTo="{!studentId}" />
<apex:repeat value="{!grade}" var="o">
{!o.Subject__c} : {!o.Score__c}
</apex:repeat>
</apex:component>
Visualforce 电子邮件模板编辑内容:
<messaging:emailTemplate subject="期末成绩推送" recipientType="Contact" relatedToType="Students__c">
<messaging:htmlEmailBody >
<!-- 在这个标签内可以使用html的一些标签 -->
Dear 同学:<br/>
<br/>
请确认你的个人信息及期末成绩:<br/>
<b>个人信息</b><br/>
姓名:{!relatedTo.Name__c}<br/>
年龄:{!relatedTo.Age__c}<br/>
班级:{!relatedTo.Class__c}<br/>
<b>期末成绩</b><br/>
<!-- 这里调用的是刚才创建的Visualforce Component -->
<c:StudentScoreComponent stuId="{!relatedTo.Id}" /><br/>
Best Regards<br/>
Li Hua
</messaging:htmlEmailBody>
</messaging:emailTemplate>
前面我们说过,Visualforce邮件模板只能发送给联系人或潜客(Lead)。因此,将邮件接收者创建为联系人,如下:
4、结果验证
点击插入模板
选择我们刚才创建的模板:
邮件发送成功:
5、总结
邮件模板为标准的邮件功能提供了便捷,但是选择创建哪种模板,还是要根据自身需求进行选择,规避模板配置中的官方限制。
另外,当非管理员简档的用户使用模板时,可能会遇到如下错误:
出现这个问题的原因是,非管理员简档的用户可能没有此模板关联的Apex类或Component的权限,可以考虑将Apex设成Global或者创建一个权限集,为该简档用户配置适当权限即可解决。
Copyright © 乔木船长
个人主页:乔木船长
欢迎转发点评和指正!
标签:__,salesforce,邮件,成绩,模板,Visualforce,nbsp From: https://blog.csdn.net/Cap7a1n/article/details/139987973