前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Salesforce sendEmail 常见应用(二)

Salesforce sendEmail 常见应用(二)

原创
作者头像
repick
发布2022-09-11 19:11:32
3200
发布2022-09-11 19:11:32
举报
文章被收录于专栏:SalesforceSalesforce

在Apex中发生异常时,把异常信息以邮件形式发生出去。

SendEmailUtils.cls

代码语言:javascript
复制
public with sharing class SendEmailUtils {
    public static void sendMailFromEx() {
        try {
            List<Opportunity> oppList = new List<Opportunity>();
            Opportunity oppItem1 = new Opportunity();
            oppItem1.Name = 'test001';
            oppItem1.StageName = 'Prospecting';
            //oppItem1.CloseDate = System.today();
            oppList.add(oppItem1);
            insert oppList;
        } catch (Exception ex) {
            List<OrgWideEmailAddress> owea = [select id from OrgWideEmailAddress limit 1];
            Messaging.SingleEmailMessage email = new Messaging.SingleEmailMessage();
            email.setToAddresses(new String[] { 'xxxx1987@163.com' });
            email.setSubject('my subject');
            // メール送信内容作成
            String body = String.format('my subject', new String[]{Datetime.now().format('yyyy-MM-dd kk:mm:ss.S', 'Asia/Tykyo'),
                                        String.ValueOf(ex.getMessage()),
                                        String.ValueOf(UserInfo.getUserName()),
                                        String.ValueOf(UserInfo.getSessionId()),
                                        String.ValueOf(ex.getStackTraceString())
                                    });
            email.setPlainTextBody(body);
            If (owea != null && owea.size() > 0) {
                email.setOrgWideEmailAddressId(owea.get(0).id);
            } else {
                email.setSenderDisplayName('Salesforce Support');
            }
            List<Messaging.SendEmailResult> results =
                Messaging.sendEmail(new Messaging.Email[] { email });
            if (!results.get(0).isSuccess()) {
                System.StatusCode statusCode = results.get(0).getErrors()[0].getStatusCode();
                String errorMessage = results.get(0).getErrors()[0].getMessage();
                system.debug(errorMessage);
            } else {
                system.debug('The email was sent successfully.');
            }
            throw ex;
        }
    }
}

为了测试,在开发者Console中调用当前Apex

看上边log,虽然显示发送成功,但是并没有收到邮件,看来在异常处理里边无法发送出去,只能另外想办法。

使用Platform Event方式实现

Platform Event是基于发布订阅模式,当salesforce发布消息以后,他的订阅者都有权力去订阅到发布的数据,当前场景下当异常发生时,发布消息,在通过trigger发送邮件信息。

自定义项目做成,用于保存error信息。

代码语言:javascript
复制
public with sharing class SendEmailUtils {
    public static void sendMailFromEx() {
        try {
            List<Opportunity> oppList = new List<Opportunity>();
            Opportunity oppItem1 = new Opportunity();
            oppItem1.Name = 'test001';
            oppItem1.StageName = 'Prospecting';
            //oppItem1.CloseDate = System.today();
            oppList.add(oppItem1);
            insert oppList;
        } catch (Exception ex) {
            List<SendEmail__e> needPublishSendEmailList = new List<SendEmail__e>();
            SendEmail__e sendEmailPublishItem = new SendEmail__e();
            sendEmailPublishItem.Exception_Content__c = String.ValueOf(ex.getMessage());
            sendEmailPublishItem.StackTrace__c = String.ValueOf(ex.getStackTraceString());
            needPublishSendEmailList.add(sendEmailPublishItem);
            if(!needPublishSendEmailList.isEmpty()) {
                List<Database.SaveResult> results = EventBus.publish(needPublishSendEmailList);
                for (Database.SaveResult sr : results) {
                    if (sr.isSuccess()) {
                        System.debug('Successfully published event.');
                    } else {
                        for(Database.Error err : sr.getErrors()) {
                            System.debug('Error returned: ' + err.getStatusCode() + ' - ' + err.getMessage());
                        }
                    }
                }
            }
            throw ex;
        }
    }
}

代码语言:javascript
复制
trigger SendEmailTrigger on SendEmail__e (after insert) {
    for(SendEmail__e sendEmailItem : (List<SendEmail__e>)Trigger.new) {
        List<OrgWideEmailAddress> owea = [select id from OrgWideEmailAddress limit 1];
            Messaging.SingleEmailMessage email = new Messaging.SingleEmailMessage();
            email.setToAddresses(new String[] { 'xxxxxx1987@163.com' });
            email.setSubject('my subject');
            // メール送信内容作成
            String body = String.format('my subject',
                        new String[]{Datetime.now().format('yyyy-MM-dd kk:mm:ss.S', 'Asia/Tykyo'),
                        sendEmailItem.Exception_Content__c,
                        String.ValueOf(UserInfo.getUserName()),
                        String.ValueOf(UserInfo.getSessionId()),
                        sendEmailItem.StackTrace__c
                        });
            email.setPlainTextBody(body);
            If (owea != null && owea.size() > 0) {
                email.setOrgWideEmailAddressId(owea.get(0).id);
            } else {
                email.setSenderDisplayName('Salesforce Support');
            }
            List<Messaging.SendEmailResult> results =
                Messaging.sendEmail(new Messaging.Email[] { email });
            if (!results.get(0).isSuccess()) {
                System.StatusCode statusCode = results.get(0).getErrors()[0].getStatusCode();
                String errorMessage = results.get(0).getErrors()[0].getMessage();
                system.debug(errorMessage);
            } else {
                system.debug('The email was sent successfully.');
            }
    }
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档