微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

机会发送电子邮件

如何解决机会发送电子邮件

我试图找到解决问题的方法,但是我没有。

我已经编写了一些代码来发送来自Opportunity Salesforce的自动电子邮件,并且编写了测试类,但是代码覆盖率没有超过39%。

这是一个代码

public class OpportunityEmail {
public static Boolean sendOppEmail(Opportunity opp){

        OrgWideEmailAddress iOrgWideEmailAddress;
        OrgWideEmailAddress iOrgWideEmailAddressAlert;
        iOrgWideEmailAddress = OrgWideEmailAddressHelper.getByAddress(Label.SendPartnerOppEmail);
        iOrgWideEmailAddressAlert = OrgWideEmailAddressHelper.getByAddress(Label.SendPartnerOppEmailAlert);
        Boolean hasError = false;
        Map<Id,Opportunity> mpOpp = new Map<Id,Opportunity>();
        String msg = Label.OpportunitySendEmailSuccess;
        Boolean myRet = false ;
        System.debug(opp);
        try {
            Opportunity lstOpp = [select AccountId,Primary_Contact__c,CustomerAccount__c,SendEmailDone__c from Opportunity where id =: opp.Id];
                        
                Account accPrt = [select CompanyEmail__c from Account where id =: opp.AccountId];

                String primContcSped = '';

                if(opp.Primary_Contact__c != null){
                    Contact primContc = [select Email from Contact where id =: opp.Primary_Contact__c];
                    primContcSped = primContc.Email;
                }

                Account accCust = [select Account.Name,Account.VATNumber__c,Account.FiscalCode__c,Account.Phone,Account.Mobile__c,Account.CompanyEmail__c,Account.SDICode__c,Account.BillingStreet,Account.BillingPostalCode,Account.BillingCity,Account.BillingStateCode,Account.BillingState,Account.ShippingStreet,Account.ShippingPostalCode,Account.ShippingCity,Account.ShippingStateCode,Account.ShippingState from Account where id =: opp.CustomerAccount__c];

                String Template = OpportunityEmail__c.getValues('Template1').TemplateEmail__c;
                EmailTemplate eT = [select id,DeveloperName,Body,HtmlValue,Subject from EmailTemplate where Name =: Template];
                Id TemplateId = eT.Id ;
                String subject = eT.Subject;
                String HtmlBody = eT.HtmlValue;
                Id account = opp.Id;
                String address = accPrt.CompanyEmail__c;
                
                String ccaddress = '';
                if(primContcSped != null){
                    ccaddress = primContcSped;
                }
                
                String ReplyToEmail = OpportunityEmail__c.getValues('Operation').ReplyToEmail__c;

                
                String Customer =   accCust.Name + '<br>' +
                                    'P.Iva: ' + accCust.VATNumber__c + '<br>' +
                                    'Cod.Fiscale: ' + accCust.FiscalCode__c + '<br>' +
                                    'Telefono: ' + accCust.Phone + '<br>' +
                                    'Mobile: ' + accCust.Mobile__c + '<br>' +
                                    'Email: ' + accCust.CompanyEmail__c + '<br>' +
                                    'SDI: ' + accCust.SDICode__c + '<br><br>' +
                                    'Sede Legale: ' + '<br>' +
                                    accCust.BillingStreet + ',' + accCust.BillingPostalCode + ' ' + accCust.BillingCity + ' (' + accCust.BillingStateCode + ') ' + '<br><br>' +
                                    'Sede Operativa: ' + '<br>' +
                                    accCust.ShippingStreet + ',' + accCust.ShippingPostalCode + ' ' + accCust.ShippingCity + ' (' + accCust.ShippingStateCode + ') ';
                String Description = '';
                if(opp.Description != null){
                 Description = opp.Description;
                }
                String ItemTable = '';

                if(opp.HardwareBundle__c != null){
                    ItemTable = '<table style="width:30%;border: 1px solid black;">  <tr>    <th style="text-align: left;border: 1px solid black;"> Service/Products </th>     </tr>';
                    
                    List<Schema.PicklistEntry> fieldResult = Opportunity.HardwareBundle__c.getDescribe().getPicklistValues();

                    Opportunity lstBund = [select HardwareBundle__c from Opportunity where id =: opp.Id];

                    String[] tmpBund = lstBund.HardwareBundle__c.split(';');

                        for(String s : tmpBund){
                            for(Schema.PicklistEntry f : fieldResult) {
                                if (f.getValue() == s){
                                    ItemTable = ItemTable + '<tr>   <td style = "text-align: left;">'+ f.getLabel()+'</td></tr>';
                                break;
                                }
                            }
                        }
                    ItemTable = ItemTable + '</table>';
                }
            
                subject = subject.replace('CustomerAccount',accCust.Name);
                HtmlBody = HtmlBody.replace('{Customer1}',Customer);
                HtmlBody = HtmlBody.replace('ItemTable',ItemTable);
                HtmlBody = HtmlBody.replace('{!Description}',Description);
                
                EmailManager.sendMailCcAdd(TemplateId,account,address,ccaddress,iOrgWideEmailAddress,ReplyToEmail,subject,HtmlBody);
                
                lstOpp.SendEmailDone__c = true;
                update lstOpp;
                
                myRet = true ;
   
            
        } catch (Exception e) {
            String data = 'STACK TRACE:\n' +e.getStackTraceString() + '\nMESSAGE:\n' + e.getMessage()+ '\nLine:\n' + e.getLineNumber();
            CustomLogHelper.addNewLog('OpportunityEmail.sendOppEmail',data);
            CustomLogHelper.saveCurrentCustomLog();
            hasError = true;
            mpOpp.put(opp.id,opp);
            msg = Label.OpportunitySendEmailFail +',Error: '+ data;
        }
        return myRet;
    }
 }

这是一个测试类代码

@isTest
private class OpportunityEmailTest2 {
    
    @testSetup static void setup(){ 
        EmailTemplate validEmailTemplate = new EmailTemplate();
        validEmailTemplate.isActive = true;
        validEmailTemplate.Name = 'PartnerEmail';
        validEmailTemplate.DeveloperName = 'PartnerEmail';
        validEmailTemplate.TemplateType = 'custom';
        validEmailTemplate.FolderId = UserInfo.getUserId();
        validEmailTemplate.IsActive = true;
        validEmailTemplate.HtmlValue = 'Test email';
        validEmailTemplate.Subject = 'Soggetto Email Test';
        
        insert validEmailTemplate;
    }

    @isTest static void OpportunityEmailTest1() {
        
        recordtype aRT = new recordtype();
        aRT = [SELECT id,Name from recordtype where Name ='Company'];
        
        Account accCust = new Account();
        accCust.SDIPec__c           = '1901837@gmail.com';
        accCust.SDICode__c          = '0000000';
        accCust.Phone               = '0233498737';
        accCust.Mobile__c           = '3452229458';
        accCust.CompanyEmail__c     = 'comp@gmail.com';
        accCust.Name                = 'Cuenta test1';
        accCust.CommercialName__c   = 'Cuenta test1';
        accCust.VATNumber__c        = '03442194837';
        accCust.FiscalCode__c       = 'RBNMHL70D15A059E';
        accCust.BillingStreet       = 'Via Pesciatina 129 Fraz. Lunata';
        accCust.BillingPostalCode   = '00187';
        accCust.BillingCity         = 'Legnano';
        accCust.BillingStateCode    = 'MI';
        accCust.BillingState        = 'Milan';
        accCust.BillingCountryCode  = 'IT';
        accCust.ShippingStreet      = 'Via Pesciatina 129 Fraz. Lunata';
        accCust.ShippingPostalCode  = '00187';
        accCust.ShippingCity        = 'Legnano';
        accCust.ShippingStateCode   = 'MI';
        accCust.ShippingState       = 'Milan';
        accCust.recordtype          = aRT;
        insert accCust;

        Account accPart = new Account();
        accPart.SDIPec__c           = '20190130@gmail.com';
        accPart.SDICode__c          = '0000000';
        accPart.VATNumber__c        = '03446283948';
        accPart.FiscalCode__c       = 'BRTLMN83C16B406T';
        accPart.Name                = 'Cuenta test2';
        accPart.CommercialName__c   = 'Cuenta test2';
        accPart.CompanyEmail__c     = 'CompanyEmail__2@gmail.com';
        accPart.BillingStreet       = 'VIA DE FLAGILLA 24';
        accPart.BillingPostalCode   = '00187';
        accPart.BillingCity         = 'ROMA';
        accPart.BillingStateCode    = 'RM';
        accPart.BillingCountryCode  = 'IT';
        accPart.ShippingStreet      = 'VIA DE FLAGILLA 24';
        accPart.ShippingPostalCode  = '00187';
        accPart.ShippingCity        = 'ROMA';
        accPart.ShippingStateCode   = 'RM';
        accPart.recordtype          = aRT;

        insert accPart;

        Contact pryCont = new Contact();
        pryCont.LastName = 'Contact Test';
        pryCont.MobilePhone = '3452229384';
        pryCont.Email = 'contactemail@email.it';
        insert pryCont;     
        
        Opportunity iOpport = new Opportunity();
        iOpport.Name = 'Test Opportunity Email';
        iOpport.StageName = 'Proposal';
        iOpport.CloseDate = Date.today();

        //iOpport.recordtypeId = '0120N000000RUeXQAW'; //PROD
        //iOpport.recordtypeId = '0121w0000009fgJAAQ';  //PARTIAL copY
        iOpport.recordtypeId = '0121w0000006dpnAAI'; //MYDEV
        iOpport.AccountId = accPart.Id;
        iOpport.CustomerAccount__c = accCust.Id;
        iOpport.Primary_Contact__c = pryCont.Id;
        iOpport.Description = 'Descrizione test';
        iOpport.HardwareBundle__c = 'BD05';
        iOpport.OpportunityHardware__c = true;
        iOpport.SendEmailDone__c = false;
        insert iOpport;
        
        OpportunityEmail.sendOppEmail(iOpport);
        
                OrgWideEmailAddress iOrgWideEmailAddress;
                iOrgWideEmailAddress = OrgWideEmailAddressHelper.getByAddress(Label.SendPartnerOppEmail);
                String Template = 'PartnerEmail';
                EmailTemplate eT = [select id,Subject from EmailTemplate where Name =: Template LIMIT 1];

                Id TemplateId = eT.Id ;
                String subject = eT.Subject;
                String HtmlBody = eT.HtmlValue;
                Id account = iOpport.Id;
                String address = accPart.CompanyEmail__c;
                String ccaddress = pryCont.Email;
                String ReplyToEmail = 'replayemail@email.com';
        
                String Customer =   accCust.Name + '<br>' +
                'P.Iva: ' + accCust.VATNumber__c + '<br>' +
                'Cod.Fiscale: ' + accCust.FiscalCode__c + '<br>' +
                'Telefono: ' + accCust.Phone + '<br>' +
                'Mobile: ' + accCust.Mobile__c + '<br>' +
                'Email: ' + accCust.CompanyEmail__c + '<br>' +
                'SDI: ' + accCust.SDICode__c + '<br><br>' +
                'Sede Legale: ' + '<br>' +
                accCust.BillingStreet + ',' + accCust.BillingPostalCode + ' ' + accCust.BillingCity + ' (' + accCust.BillingStateCode + ') ' + '<br><br>' +
                'Sede Operativa: ' + '<br>' +
                accCust.ShippingStreet + ',' + accCust.ShippingPostalCode + ' ' + accCust.ShippingCity + ' (' + accCust.ShippingStateCode + ') ';
                String Description = iOpport.Description;
        
                String ItemTable = iOpport.HardwareBundle__c;
                
                EmailManager.sendMailCcAdd(TemplateId,HtmlBody);

    }
}

我了解代码未涵盖的部分是这样的:

String Template = OpportunityEmail__c.getValues('Template1').TemplateEmail__c;
                EmailTemplate eT = [select id,HtmlBody);
                
                lstOpp.SendEmailDone__c = true;
                update lstOpp;'

但是我不知道哪个是解决方案。

非常感谢您的帮助!

解决方法

String Template = OpportunityEmail__c.getValues('Template1').TemplateEmail__c;

在这一行中,我看到您正在尝试访问自定义设置OpportunityEmail__c。自定义设置的行为就像数据一样,这意味着您需要先将其插入测试方法中,然后才能使用它。

您的另一种选择是改用“自定义元数据类型”,可以通过SOQL查询从环境中检索该数据。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。