Here we are taking the url of google chart and assigning dynamic data to the google chart.
Here we are displaying account type and their count.
Controller:
=========
public class googleChartController {
private String chartData;
public String getChartData()
{
return chartData;
}
//Contructor
public googleChartController ()
{
//get obtain a list of picklist values
Schema.DescribeFieldResult F = Account.Type.getDescribe();
List<Schema.PicklistEntry> P = F.getPicklistValues();
//where chart data should be stored.
List<ChartDataItem> items = new List<ChartDataItem>();
//iterate through each picklist value and get number of accounts
// I wish we could do GROUP BY in SOQL!
for(Schema.PicklistEntry pValue : P)
{
integer Count = [select count() from Account where Type = :pValue.getValue() limit 10000];
if (Count > 0)
items.add(new ChartDataItem(pValue.getValue()+ '-['+ Count.format() + ']' , Count.format()));
}
//Prepare the chart URL
//String chartPath = 'http://chart.apis.google.com/chart?chs=600x200&cht=p3';
String chartPath='//chart.googleapis.com/chart?chs=600x200&cht=p3&chco=7777CC|76A4FB|3399CC|3366CC';
chartData = chartPath + getChartData(items);
}
private String getChartData(List<ChartDataItem> items)
{
String chd = ''; //23,34,56
String chl = ''; //Hello|World
for(ChartDataItem citem : items)
{
chd += citem.ItemValue + ',';
chl += citem.Label + '|';
}
//remove the last comma or pipe
chd = chd.substring(0, chd.length() -1);
chl = chl.substring(0, chl.length() -1);
String result = '&chd=t:' + chd + '&chl=' + chl;
return result;
}// end of method
public class ChartDataItem
{
public String ItemValue { get; set; }
public String Label { get; set; }
public ChartDataItem(String Label, String Value)
{
this.Label = Label;
this.ItemValue = Value;
}
}
}// end of class
=-==================
VF page
================
<apex:page controller="googleChartController" tabStyle="Account">
<apex:sectionHeader title=" Type of Account"></apex:sectionHeader>
<apex:image url="{!chartData}"></apex:image>
</apex:page>
Output:
==========
No comments:
Post a Comment