Scenario:
We Need to do Total of Opportunities Based on Stages.
Thought Process:
What are the columns involved? Answer: StageName and Count or Total
What methods will we utilize to achieve these results? Answer: Group By SOQL Statement with Count.
What UI to built this neat logic? Answer: Apex Controller and VisualForce Page
Need to achieve this type of reporting for the user:
Solution:
Use Eclipse IDE or SOQL Explorer to create your SOQL Statement.
SELECT StageName, Count(Name) ce FROM Opportunity GROUP BY StageName
Second create Apex Controller name what you like I named it TTL_Lesson, with your logic
public class TTL_Lesson{
public class OppStageHolder {
public String OPP {get; set;}
public Integer TTL_Opp {get; set;}
public OppStageHolder (){}
}
//Results will be placed within this List
public List queryResults{ get; set; }
//Your Page
public PageReference TTL() {
AggregateResult[] groupedResults = [SELECT StageName,
Count(Name) ce FROM Opportunity
GROUP BY StageName];
System.Debug('zzavg ' + groupedResults.size());
//Define your List
queryResults = new List();
for (AggregateResult ard : groupedResults) {
OppStageHolder myObject = new OppStageHolder();
myObject.OPP = String.valueOf(ard.get('StageName'));
myObject.TTL_Opp = (Integer) ard.get('ce');
queryResults.add(myObject);
}
return Page.TTL;
}
}
Now create your VF Page to call this and display it whenever the user clicks on this page:
<apex:page controller="TTL_Lesson" action="{!TTL}" showHeader="false" sidebar="false">
<apex:dataTable value="{!queryResults}" var="a" id="theTable" border="2" cellpadding="1" cellspacing="1" bgcolor="#A9D0F5" >
<apex:column >
<apex:facet name="header">Stage</apex:facet>
<apex:outputText value="{!a.OPP}"/>
</apex:column>
<apex:column >
<apex:facet name="header"> Count</apex:facet>
<apex:outputText value="{!a.TTL_Opp}"/>
</apex:column>
</apex:dataTable>
</apex:page>