通过apex发送时,合并字段值不会显示在电子邮件模板中

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过apex发送时,合并字段值不会显示在电子邮件模板中相关的知识,希望对你有一定的参考价值。

我有一个电子邮件模板,我想通过apex class发送。我收到一个电子邮件通知但合并字段的值没有显示。我尝试了很多解决方案,但没有得到结果。请问,有人可以帮我吗?

这是我的电子邮件模板Email template的快照

和顶点代码: -

global class sampleBatch implements Database.Batchable<sObject>{
global Database.QueryLocator start(Database.BatchableContext bc) {
    String query = 'Select id,Name from book__c;
    return Database.getQueryLocator(query);
}

global void execute(Database.BatchableContext bc, List<book__c> books){ 
    Map<Id, List<Case>> associatedCases = CaseHelperClass.getCase(new Map<Id,book__c>(books).keySet());
    Map<Id,book__c> bookMap= new Map<Id,book__c>(books);
    EmailTemplate emailTemplate = [SELECT Id,Subject,Description,htmlValue,DeveloperName,Body FROM EmailTemplate WHERE DeveloperName =: 'sameple_template'];
    if(associatedCases <> null){
        for(Id bookId : associatedCases.keySet()){
            String headerAndAssociatedCases = 'CaseNumber,Type,Status,Subject,Description,CreatedDate
';
            for(Case c : associatedCases.get(bookId)){
                headerAndAssociatedCases += c.CaseNumber+','+c.Type+','+c.Status+','+c.Subject+','+c.Description+','+c.CreatedDate+'
';
            }
            Messaging.EmailFileAttachment csvAttachment = new Messaging.EmailFileAttachment();
            blob csvBlob = Blob.valueOf(headerAndAssociatedCases);
            csvAttachment.setFileName('Case.csv');
            csvAttachment.setBody(csvBlob);
            Messaging.SingleEmailMessage email = new Messaging.SingleEmailMessage();
            list<string> toAddresses = new list<string>{name@test.com};
            email.setSubject(emailTemplate.Subject);
            email.setTemplateId(emailTemplate.Id);
            email.setPlainTextBody(emailTemplate.Body);
            email.setToAddresses(toAddresses);
            email.setFileAttachments(new Messaging.EmailFileAttachment[]{csvAttachment});
            Messaging.SendEmailResult [] result = Messaging.sendEmail(new Messaging.SingleEmailMessage[] {email});
       }
    }
}

global void finish(Database.BatchableContext bc){
    system.debug('Apex Job Done');
}}

任何帮助都会非常值得一提。谢谢!

答案

请参考SingleEmail方法的要求:

https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_classes_email_outbound_single.htm

具体请参考以下内容:

setTargetObjectId(targetObjectId)

如果使用模板则必需,否则为可选。电子邮件将发送到的联系人,潜在客户或用户的ID。您指定的ID设置上下文并确保模板中的合并字段包含正确的数据。

setWhatId(whatId)

如果为targetObjectId字段指定联系人,则还可以指定可选的whatId。这有助于进一步确保模板中的合并字段包含正确的数据。

我在您的代码中没有看到这些方法中的任何一种。

以上是关于通过apex发送时,合并字段值不会显示在电子邮件模板中的主要内容,如果未能解决你的问题,请参考以下文章

Oracle Apex - 根据值的数量显示项目

使用 jQuery AJAX PHP 的表单不会在电子邮件中发送字段输入

Apex - 销售人员 - 使用 apex 保存和检索字段

如何在APEX SOQL查询中仅显示包含相同字段值的一条记录

具有自动完成 oracle apex 的文本字段

Apex-设置领料单字段选择的值