Salesforce- retrieve Contact.opportunites



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

更新:现在可以获取大小,但相同的逻辑不适用于测试类中的代码覆盖率。详细信息如下:

  • 只有控制器的"if"部分被覆盖,而"else"部分从未被覆盖,即使联系人的机会大于0

控制器方法:

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

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

最新更新