4

我必须使用电子邮件模板向 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。这有助于进一步确保模板中的合并字段包含正确的数据。该值必须是以下类型之一: Account Asset Campaign Case Contract Opportunity Order Product Solution Custom

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

4

3 回答 3

4

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

我已经解决了这个问题,我通常创建一个与用户同名和电子邮件的联系人,使用它来发送电子邮件,然后将其删除。这很好用,尽管处理联系人对象上的验证规则可能是一个挑战。查看他们的开发板进行完整讨论。

于 2012-06-20T02:00:14.827 回答
2

您可以获取模板并替换合并字段,如下所示:

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});

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

于 2013-08-20T18:55:22.903 回答
1

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

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

TEXT(CustomObject__r.CustomField__c)

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

于 2012-06-19T18:33:53.073 回答