You need to sign in to do that
Don't have an account?
suji srinivasan
how to convert number to string for a month in visualforce charts?
I am gettinf the output of month as number . but i need to convert that as string. can anyone help me?
public with sharing class PieDemoController {
public Campaign camp {get;set;}
public PieDemoController(ApexPages.StandardController std){
camp = (Campaign)std.getRecord();
}
public List<PieWedgeData> getPieData() {
List<PieWedgeData>PieWedgeData = new List<PieWedgeData>();
List<AggregateResult> opps = [SELECT SUM(Amount) monthlyRevenue, COUNT(Name) numOppsClosedWon,
CALENDAR_MONTH(CloseDate) theMonth
FROM Opportunity
WHERE CampaignId =: camp.id
GROUP BY CALENDAR_MONTH(CloseDate)];
for(AggregateResult ar : opps){
String month = String.valueOf(ar.get('theMonth')); //this comes out as a number, not a word value
Integer revenue = Integer.valueOf(ar.get('monthlyRevenue'));
PieWedgeData.add(new PieWedgeData(month, revenue));
}
return PieWedgeData;
}
public class PieWedgeData {
public PieWedgeData(String name, Integer count) {
this.name = name;
this.count = count;
}
public String name { get; set; }
public Integer count { get; set; }
}
}
Thanks in advance
public with sharing class PieDemoController {
public Campaign camp {get;set;}
public PieDemoController(ApexPages.StandardController std){
camp = (Campaign)std.getRecord();
}
public List<PieWedgeData> getPieData() {
List<PieWedgeData>PieWedgeData = new List<PieWedgeData>();
List<AggregateResult> opps = [SELECT SUM(Amount) monthlyRevenue, COUNT(Name) numOppsClosedWon,
CALENDAR_MONTH(CloseDate) theMonth
FROM Opportunity
WHERE CampaignId =: camp.id
GROUP BY CALENDAR_MONTH(CloseDate)];
for(AggregateResult ar : opps){
String month = String.valueOf(ar.get('theMonth')); //this comes out as a number, not a word value
Integer revenue = Integer.valueOf(ar.get('monthlyRevenue'));
PieWedgeData.add(new PieWedgeData(month, revenue));
}
return PieWedgeData;
}
public class PieWedgeData {
public PieWedgeData(String name, Integer count) {
this.name = name;
this.count = count;
}
public String name { get; set; }
public Integer count { get; set; }
}
}
Thanks in advance
Sorry for the late reply !!!
Please use the below change in controller:
Below line needs change. Integer.valueof missed.
String month = monthMap.get(Integer.valueOf(ar.get('theMonth')));
Thanks,
Maharajan.C
All Answers
Please try like below: It's a simple approach.
Create Map like below:
Map<Integer,String> monthMap = new Map<Integer,String>{ 1 => 'January', 2 => 'February', 3 => 'March', 4 => 'April', 5 => 'May', 6 => 'June', 7 => 'July', 8 => 'August', 9 => 'September', 10 => 'October', 11 => 'November', 12 => 'December' };
Then refer the above map in below line:
String month = monthMap.get(ar.get('theMonth'));
Another way you can convert the date to date time and use the format('EEEE') function to get the month name.
https://medium.com/code-85/salesforce-apex-how-to-lookup-the-name-of-a-month-from-the-date-class-91197350f9a3
Thanks,
Maharajan.C
thank you for your response . I modified my code as you suggested . I got this error :
Method does not exist or incorrect signature: void get(Object) from the type Map<Integer,String>
can you guide me what went wrong?
Apex :
public with sharing class PieDemoController {
public Campaign camp {get;set;}
public PieDemoController(ApexPages.StandardController std){
camp = (Campaign)std.getRecord();
}
public List<PieWedgeData> getPieData() {
List<PieWedgeData>PieWedgeData = new List<PieWedgeData>();
List<AggregateResult> opps = [SELECT SUM(Amount) monthlyRevenue, COUNT(Name) numOppsClosedWon,
CALENDAR_MONTH(CloseDate) theMonth
FROM Opportunity
WHERE CampaignId =: camp.id
GROUP BY CALENDAR_MONTH(CloseDate)];
Map<Integer,String> monthMap = new Map<Integer,String>{ 1 => 'January', 2 => 'February', 3 => 'March', 4 => 'April', 5 => 'May', 6 => 'June', 7 => 'July', 8 => 'August', 9 => 'September', 10 => 'October', 11 => 'November', 12 => 'December' };
for(AggregateResult ar : opps){
String month = monthMap.get(ar.get('theMonth'));
Integer revenue = Integer.valueOf(ar.get('monthlyRevenue'));
PieWedgeData.add(new PieWedgeData(month, revenue));
}
return PieWedgeData;
}
public class PieWedgeData {
public PieWedgeData(String name, Integer count) {
this.name = name;
this.count = count;
}
public String name { get; set; }
public Integer count { get; set; }
}
}
Vf page:
<apex:page standardController="Campaign" extensions="PieDemoController" > <apex:chart height="270" width="350" data="{!pieData}"> <apex:pieSeries dataField="count" labelField="name"/> <apex:legend position="right"/> </apex:chart> </apex:page>
Sorry for the late reply !!!
Please use the below change in controller:
Below line needs change. Integer.valueof missed.
String month = monthMap.get(Integer.valueOf(ar.get('theMonth')));
Thanks,
Maharajan.C