我正试图在机会上显示合约清单。该列表应包括与机会账户或其父账户相关的任何合同。尽管测试SOQL返回2个合同记录的事实,但我得到错误:
无法显示内容:尝试取消引用空对象
以下是visualforce页面代码:
<apex:page standardController="Opportunity" extensions="RelatedContracts" tabStyle="Opportunity">
<apex:form>
<apex:pageBlock title="Contracts List" id="ContractId">
<apex:pageBlockTable value="{!contracts}" var="c">
<apex:column headerValue="ContractName">
<apex:outputLink value="{!URLFOR('/')}{!c.Id}" target="_blank">{!c.ContractNumber}
</apex:outputLink>
</apex:column>
<apex:column value="{!c.Status}" />
<apex:column value="{!c.StartDate}" />
<apex:column value="{!c.Enddate}" />
<apex:column value="{!c.SpecialTerms}" />
<apex:column value="{!c.Description}" />
</apex:pageBlockTable>
</apex:pageBlock>
</apex:form>
</apex:page>
这是扩展类:
public with sharing class RelatedContracts {
public Opportunity opp {
get;
set;
}
public List < Contract > contracts {
get;
set;
}
public RelatedContracts(ApexPages.StandardController controller) {
opp = (Opportunity) controller.getRecord();
}
Opportunity oppInfo = [SELECT AccountId from Opportunity WHERE id = : opp.Id];
Account acct = [SELECT Id, ParentId from Account WHERE id = : oppInfo.AccountId];
public List < Contract > getContracts() {
contracts = new List < Contract > ();
contracts = [SELECT Id, RecordTypeId, Status, ContractNumber, StartDate, EndDate, SpecialTerms, Description FROM Contract
WHERE AccountId = : opp.AccountId OR AccountId = : acct.ParentId
];
System.debug('ContractList' + contracts);
if (contracts.size() > 0) {
return contracts;
} else
return null;
}
}
答案 0 :(得分:0)
Plz尝试在类中定义oppInfo和acct以及null。在构造函数中使用soql设置值。 在getContracts()中使用oppInfo而不是opp变量。