使用电子邮件模板在salesforce中设置setWhatId

时间:2012-06-19 16:14:22

标签: salesforce apex-code

我必须使用电子邮件模板向salesforce中的用户发送电子邮件。此模板包含自定义对象的合并字段类型。

 Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();
mail.setTargetObjectId(user.get(0).id);


mail.setTargetObjectId(user.get(0).Id)
mail.setTemplateId(specifier.get(0).Template_id__c);
mail.saveAsActivity = false;
mail.setWhatId(custom_object.Id);
我在文档中读到了 如果为targetObjectId字段指定联系人,则还可以指定whatId。这有助于进一步确保模板中的合并字段包含正确的数据。该值必须是以下类型之一: 帐户 财富 运动 案件 合同 机会 订购 产品 解 定制

但是如果我们向用户发送不联系的电子邮件,那么如何在自定义对象中为合并字段类型分配自定义对象,如上面的代码

3 个答案:

答案 0 :(得分:2)

这是他们的电子邮件方式中的一个GIGANTIC整体,并且多年来一直困扰着我。特别是给定的工作流电子邮件警报似乎没有问题为用户发送电子邮件模板。唉,如果您的目标是用户,则无法使用setWhatId()。但是你可以vote为他们添加该功能,

我解决了这个问题,我通常使用与用户相同的名称和电子邮件创建联系人,使用它来发送电子邮件,然后将其删除。虽然处理联系对象的验证规则可能是一个挑战,但这种方法效果很好。请参阅他们的dev boards进行完整讨论。

答案 1 :(得分:1)

不确定这是否可行,但这取决于您的自定义对象与将接收合并电子邮件的用户之间的关系。用户和CustomObject之间是否存在一对一的关系?如果是这样,可能会添加对每个用户对象引用的单个自定义对象实例的引用,然后使用CustomObject__r.CustomField__c在用户对象上添加自定义公式字段,这样做就可以了。

在User对象的自定义公式字段中:

TEXT(CustomObject__r.CustomField__c)

然后您的模板可以更改为用户模板,合并字段将是实际指向您的自定义对象实例的公式字段。但是如果你在User和CustomObject__c之间有一对多关系,比如1对多或多对多,我觉得你运气不好。

答案 2 :(得分:1)

您可以按如下方式获取模板并替换合并字段:

EmailTemplate template = [SELECT Id, Subject, HtmlValue, Body FROM EmailTemplate WHERE Name = 'Case Update'];
Case modifiedCase = [SELECT Account.Id, Account.Name, Owner.FirstName, Owner.LastName, CaseNumber, Subject, LastModifiedBy.FirstName,  LastModifiedBy.LastName from Case where Id=:modifiedCaseId];

String subject = template.Subject;
subject = subject.replace('{!Case.Account}', modifiedCase.Account.Name);
subject = subject.replace('{!Case.CaseNumber}', modifiedCase.CaseNumber);
subject = subject.replace('{!Case.Subject}', modifiedCase.Subject);

String htmlBody = template.HtmlValue;
htmlBody = htmlBody.replace('{!Case.Account}', modifiedCase.Account.Name);
htmlBody = htmlBody.replace('{!Case.OwnerFullName}', ownerFullName);
...

Messaging.SingleEmailMessage email = new Messaging.SingleEmailMessage();
email.setSubject(subject);
email.setHtmlBody(htmlBody);
Messaging.sendEmail(new Messaging.SingleEmailMessage[] {email});

如果模板中没有添加新字段,这将正常工作。管理员可以在不需要更改代码的情况下处理电子邮件的格式。

相关问题