zoukankan      html  css  js  c++  java
  • Salesforce: 将发送出去的带有附件的Email存储到相关数据的Activity History中

    在需求中,客户希望可以将从salesforce中发送出去的email存储备份在相关数据下的Activity History中。

    Salesforce提供了方法可以实现这一需求: mail.setSaveAsActivity(true)

    setSaveAsActivity()是一个可选方法,它的默认值是true。但仅当mail设置了targetObjectId或targetObjectIds或whatId时它才会生效。

    若设置了targetObjectId, 邮件会以Outbound Email Message的形式存储在相关的Contact的Activity History中;

    若设置了whatId,邮件则存储在相关的sObject record的Activity History中。

    若两个都设置了,它们的Activity History中都会显示这个Outbound Email Message。

    参考代码:

    Messaging.SingleEmailMessage[] emails = new Messaging.SingleEmailMessage[] {};
    Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();
    mail.setTemplateId('00XC000000erT1MAI');
    mail.setTargetObjectId('003C00000RFWJZ');
    mail.setWhatId('a02n000000aJq0');
    mail.setSaveAsActivity(true);
    Messaging.sendEmail(new Messaging.SingleEmailMessage[] { mail });

    值得注意一点的是:如果设置了TemplateId,则不要再设置Subject和Body,否则template将失效。

    而如果发送出去的邮件带有附件,如:

    Messaging.SingleEmailMessage[] emails = new Messaging.SingleEmailMessage[] {};
    Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();
    mail.setTemplateId('00XC000000erT1MAI');
    mail.setTargetObjectId('003C00000RFWJZ');
    mail.setWhatId('a02n000000aJq0');
    mail.setSaveAsActivity(true);
    PageReference invoicePage = new PageReference('/apex/InvoicePDF');
    invoicePage.getParameters().put('id', invoiceId);
    invoicePage.setRedirect(false);
    Messaging.EmailFileAttachment fileAttachment = new Messaging.EmailFileAttachment();
    fileAttachment.setBody(!Test.isRunningTest() ? invoicePage.getContentAsPDF() : Blob.valueOf('This is a test.'));
    fileAttachment.setContentType('application/pdf');
    fileAttachment.setFileName('test');
    mail.setFileAttachments(new Messaging.EmailFileAttachment[]{ fileAttachment });
    Messaging.sendEmail(new Messaging.SingleEmailMessage[] { mail });

    这种情况下Outboud Email Message只能保存邮件的内容,而无法保存附件。

    这时我们就需要借助Email Service实现这一功能需求。

    首先我们要在salesforce中创建一个email service,并为这个email service创建一个Apex Class以实现具体的功能。

    GeneratePDFFromInboundEmail参考代码:

    最后要将在Email Service中生成的Email Address添加到发送邮件的代码中,即可实现全部功能:

    Messaging.SingleEmailMessage[] emails = new Messaging.SingleEmailMessage[] {};
    Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();
    mail.setTemplateId('00XC000000erT1MAI');
    mail.setTargetObjectId('003C00000RFWJZ');
    mail.setWhatId('a02n000000aJq0');
    mail.setBccAddresses(new List<String> { 'generate_invoice_pdf@apex.sandbox.salesforce.com' });
    mail.setSaveAsActivity(true);
    PageReference invoicePage = new PageReference('/apex/InvoicePDF');
    invoicePage.getParameters().put('id', invoiceId);
    invoicePage.setRedirect(false);
    Messaging.EmailFileAttachment fileAttachment = new Messaging.EmailFileAttachment();
    fileAttachment.setBody(!Test.isRunningTest() ? invoicePage.getContentAsPDF() : Blob.valueOf('This is a test.'));
    fileAttachment.setContentType('application/pdf');
    fileAttachment.setFileName('test');
    mail.setFileAttachments(new Messaging.EmailFileAttachment[]{ fileAttachment });
    Messaging.sendEmail(new Messaging.SingleEmailMessage[] { mail });

  • 相关阅读:
    [bzoj4241] 历史研究 (分块)
    [tyvj2054] 四叶草魔杖 (最小生成树 状压dp)
    20180710 考试记录
    [luogu2047 NOI2007] 社交网络 (floyed最短路)
    [luogu2081 NOI2012] 迷失游乐园 (树形期望dp 基环树)
    [luogu1600 noip2016] 天天爱跑步 (树上差分)
    [luogu2216 HAOI2007] 理想的正方形 (2dST表 or 单调队列)
    [poj 3539] Elevator (同余类bfs)
    [BZOJ1999] 树网的核 [数据加强版] (树的直径)
    bzoj2301 [HAOI2011]Problem b
  • 原文地址:https://www.cnblogs.com/clsriz/p/13647166.html
Copyright © 2011-2022 走看看