2012-06-19 39 views
4

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

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为好。这有助于进一步确保模板中的合并字段包含正确的数据。该值必须是以下类型之一: 账户 资产 运动 案例 合同 机会 订购 产品 解决方案 定制

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

回答

1

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

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

TEXT(CustomObject__r.CustomField__c) 

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

+0

这仍然是这种情况吗?我在一个对象上有一对多的关系。 – chrisjlee

2

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

我已经解决了这个问题,我通常创建一个与用户名称和电子邮件地址相同的联系人,用它来发送电子邮件,然后删除它。尽管处理联系对象上的验证规则可能成为一项挑战,但这种方法运行良好。请参阅他们的dev boards进行全面讨论。

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

至于没有新的字段在模板中添加这将正常工作。管理员可以混淆电子邮件的格式而不需要更改代码。