salesforce - Salesforce- 检索 Contact.opportunites
问题描述
这是我在匿名窗口中使用的片段。目的是检索联系人的机会。即使在添加机会联系人角色之后,contact.Opportunities.size 也会导致为零(最后一个调试行)。我错过了什么吗?您可以直接使用以下代码。
更新:现在能够获得大小,但相同的逻辑不适用于测试类中的代码覆盖率。详情如下:
- 只有控制器的“if”部分被覆盖,而“else”部分永远不会被覆盖,即使 contact.opportunities 的大小大于 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
.
推荐阅读
- tensorflow - 没有onnx,如何手动将pytorch模型转成tensorflow模型?
- sql-server - SQL Server:从一个表中获取所有数据,但条件是第二个表列
- rcpp - Rcpp 中“as”的内存问题
- sap-cloud-sdk - 将 OData 结果传输到销售订单模拟实体时,销售订单模拟实体中缺少导航值 to_ScheduleLine
- ag-grid - AG Grid - 使用键而不是值对列进行排序
- weblogic - 注册。与多个 OU 名称的 Active Directory 集成 :: OBIEE 和 Weblogic
- javascript - 如何在页面上提交新项目?(jQuery)
- ios - 在 Swift 5 中使用动态值初始化属性包装器
- scala - 在 spark sql 上查找 total_sale 连续下降
- javascript - 不能在 Javascript 文件中使用绝对 URL?