首页 > 解决方案 > Salesforce- 检索 Contact.opportunites

问题描述

这是我在匿名窗口中使用的片段。目的是检索联系人的机会。即使在添加机会联系人角色之后,contact.Opportunities.size 也会导致为零(最后一个调试行)。我错过了什么吗?您可以直接使用以下代码。

更新:现在能够获得大小,但相同的逻辑不适用于测试类中的代码覆盖率。详情如下:

控制器方法:

public PageReference sendingEmail() { 
//contact1 has query records
sizeVar = contact1.Opportunities.size();
if(contact1.npo02__OppAmountLastYear__c>0 ) {
if(sizeVar==0) {
    // if size is 0 then navigate to a particular vf page
    
PageReference pr =  Page.NoDonationOrNoEmail; 
pr.getParameters().put('id',(String)contact1.id);
pr.setRedirect(true);
return pr;
    }
 else 
{ //when contact.opportunities size is more than 0 then navigate to 
other vf page. 
PageReference pr1 =  Page.NoPrint; 
pr1.getParameters().put('id',(String)contact1.id);
pr1.setRedirect(true);
return pr1;
    }
     
  }  return null;
}

测试类:

//creating account
Account a = new Account();
a.Name = 'Test Co.';
a.BillingStreet = '298 S. Ringo Street';
a.BillingCity = 'Little Rock';
insert a;

    
//Creating contact
    Contact contact1 = new Contact();
    contact1.FirstName = 'Paul';
    contact1.LastName  = 'Test';
    contact1.AccountId = a.id;
    contact1.npo02__OppAmountLastYear__c=100;
    insert contact1;
    //creating opportunity
    Opportunity o = new Opportunity();
    o.RecordType = [SELECT Id, Name, DeveloperName FROM RecordType 
    WHERE Name = 'Membership' LIMIT 1];
    o.Name = 'New Record';
    o.StageName = 'Posted';
    o.AccountId = contact1.AccountId;
    o.CloseDate = Date.today();
     o.Description = 'Test Record';
    insert o;
   
    //creating opportunity contact role
    OpportunityContactRole ocr = new OpportunityContactRole();
    ocr.ContactId = contact1.Id;
    ocr.OpportunityId = o.Id;
    ocr.IsPrimary = TRUE;
    ocr.Role = 'Decision Maker';
    insert ocr;
    System.debug('created opportunity contact role for primary');
    Update o;
    

    contact1 = [SELECT Id, Name,(SELECT id FROM opportunities) FROM 
    Contact WHERE Id=:contact1.Id];
    PageReference pr =  Page.NoPrint;
    pr.getParameters().put('id', String.valueOf(contact1.id));
    Test.setCurrentPage(pr);
    ApexPages.StandardController cont5 = new 
    ApexPages.StandardController(contact1);
    BulkEmailController  testAccPlan = new 
    BulkEmailController(cont5);
    testAccPlan.sendingEmail();

标签: salesforcemaster-detail

解决方案


创建和插入记录时,您不会获得公式字段,也无法导航查找。孩子的关系也是如此。
您必须查询所需的字段。
更改Update contact1;contact1 = [SELECT Id, (SELECT Id FROM Opportunities) FROM Contact WHERE Id = :contact1.Id];最后一个调试行将打印1.


推荐阅读