function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
suji srinivasansuji 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
Best Answer chosen by suji srinivasan
Maharajan CMaharajan C
Hi Suji,

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')));
 
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(Integer.valueOf(ar.get('theMonth'))); 
                
                system.debug(' *** Month *** ' + month );
                
                Integer revenue = Integer.valueOf(ar.get('monthlyRevenue'));
                
                system.debug(' *** revenue *** ' + revenue );
                
                PieWedgeData.add(new PieWedgeData(month, revenue));
            }
        
        system.debug(' PieWedgeData --> ' + PieWedgeData );
        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,
Maharajan.C

All Answers

Maharajan CMaharajan C
Hi Suji,

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
suji srinivasansuji srinivasan
Hi maharajan ,
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>
Maharajan CMaharajan C
Hi Suji,

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')));
 
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(Integer.valueOf(ar.get('theMonth'))); 
                
                system.debug(' *** Month *** ' + month );
                
                Integer revenue = Integer.valueOf(ar.get('monthlyRevenue'));
                
                system.debug(' *** revenue *** ' + revenue );
                
                PieWedgeData.add(new PieWedgeData(month, revenue));
            }
        
        system.debug(' PieWedgeData --> ' + PieWedgeData );
        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,
Maharajan.C
This was selected as the best answer
suji srinivasansuji srinivasan
Thanks alot maharajan. it works fine.