I'm getting this error:
Description Resource Path Location Type
Save error: Unknown property 'OpportunityStandardController.getLines' AlexHelloWorld.page /SFDC/src/pages line 0 Force.com save problem
VF Page:
<apex:page standardController="Opportunity" extensions="AlexHelloWorld">
<apex:form >
<apex:pageBlock title="Edit account for {!$User.FirstName}">
<apex:pageMessages />
<apex:pageBlockButtons >
</apex:pageBlockButtons>
<apex:pageBlockSection >
<apex:outputText value="Test - {!retVal}">
</apex:outputText>
</apex:pageBlockSection>
<apex:pageBlockSection >
<apex:outputText value="OppId - {!opportunity.id}" />
<apex:outputText value="UserId - {!$User.Id}" />
</apex:pageBlockSection>
<apex:pageBlockSection>
<apex:repeat value="{!getLines}" var="line" id="theRepeat">
<tr>
<td valign="top"><apex:outputField value="{!line.Id}" /></td>
<td valign="top"><apex:outputField value="{!line.OpportunityId}" /></td>
<td valign="top"><apex:outputField value="{!line.PricebookEntryId}" /></td>
<td valign="top"><apex:outputField value="{!line.Quantity}" /></td>
</tr>
</apex:repeat>
</apex:pageBlockSection>
</apex:pageBlock>
</apex:form>
</apex:page>
Controller:
public with sharing class AlexHelloWorld {
public boolean showFedEx{get;set;}
public String mystr{get;set;}
public Id opportunityId{get;set;}
//public Opportunity opportunity{get;set;}
public Decimal retVal{get;set;}
//Main controller class
public AlexHelloWorld(ApexPages.StandardController controller)
{
mystr = [SELECT Email from User where Id =:Userinfo.getUserId()].Email;
showFedEx = true;
retVal = 5*5;
System.debug('zzzzz');
}
public List<OpportunityLineItem> getLines()
{
List<OpportunityLineItem> oli = [SELECT Id, OpportunityId, PricebookEntryId, Quantity FROM OpportunityLineItem where id =:System.currentPageReference().getParameters().get('id')];
return oli;
}
}
Simple error :) You should skip the "get/set" in the function names. I agree it's not the most clear error message in the world.
Your VF page should be calling {!lines}
, not {!getLines}
(Visualforce isn't case-sensitive, neither is Apex). Then it will compile just fine.
...
<apex:repeat value="{!lines}" var="line" id="theRepeat">
...
It's so fundamental I'm not even sure where to link to in the docs (no offense), maybe http://www.salesforce.com/us/developer/docs/pages/index_Left.htm#StartTopic=Content/pages_quick_start_controller_getter_methods.htm
One minor point - if you have Opportunity standard controller, you might want to do this in the constructor:
Opportunity opp = (Opportunity) controller.getRecord();
In fact, you could ignore the whole controller side and display line items related list straight from Visualforce (but this won't help you if you want for example to sort them).
<apex:repeat value="{!Opportunity.OpportunityLineItems}" var="line" id="theRepeat">
<tr>
<td valign="top"><apex:outputField value="{!line.Id}" /></td>
<td valign="top"><apex:outputField value="{!line.OpportunityId}" /></td>
<td valign="top"><apex:outputField value="{!line.PricebookEntryId}" /></td>
<td valign="top"><apex:outputField value="{!line.Quantity}" /></td>
</tr>
</apex:repeat>