【问题标题】:setWhatId in salesforce using email template使用电子邮件模板在 Salesforce 中设置WhatId
【发布时间】:2023-04-02 18:38:01
【问题描述】:

我必须使用电子邮件模板向 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。这有助于进一步确保模板中的合并字段包含正确的数据。该值必须是以下类型之一: 帐户 资产 活动 案子 合同 机会 命令 产品 解决方案 自定义

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

【问题讨论】:

    标签: salesforce apex-code


    【解决方案1】:

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

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

    TEXT(CustomObject__r.CustomField__c)
    

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

    【讨论】:

    • 还是这样吗?我在一个对象上有一对多的关系。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-18
        • 1970-01-01
        • 2020-09-11
        相关资源
        最近更新 更多