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
Robert Bange*Robert Bange* 

invalid field for sObject AggregateResult

I have controler extention in which I use a query to populate a picklist:

public class passengerExtention {

    
    private final Individuele_Boeking__c boeking;
    public string selectedArea {get; set;}

    public passengerExtention(ApexPages.StandardController controller) {

        this.boeking = (Individuele_Boeking__c) controller.getRecord();
    }
    
    //Picklist Area
    public list<selectoption> getAreaOptions(){
        
        
        //Verzamel waarden voor picklist
        SelectOption firstOption = new SelectOption('', ' - Choose Area - ');
        
        list<selectoption> Areas= new list<selectoption>();        
        list<Ships_location__c> selectedArea= [SELECT Area__c
                                               FROM Ships_location__c
                                               ORDER BY Area__c ];
                                               
        //Vul picklist                                       
        Areas.add(firstOption);
        
        for(Ships_location__c sl:selectedArea){
            Areas.add(new selectoption(sl.Area__c,sl.Area__c));
        }
        return Areas;     
    }

This works nicely, but it gives a lot of double values in the picklist...
So I tried to transform it with a GROUP BY query but I cannot get it work:

the result sofar is:

public class passengerExtention {

    
    private final Individuele_Boeking__c boeking;
    public string selectedArea {get; set;}

    public passengerExtention(ApexPages.StandardController controller) {

        this.boeking = (Individuele_Boeking__c) controller.getRecord();
    }
    
    //Picklist Area
    public list<selectoption> getAreaOptions(){
        
        
        //Verzamel waarden voor picklist
        SelectOption firstOption = new SelectOption('', ' - Choose Area - ');
        
        list<selectoption> Areas= new list<selectoption>();        
        list<AggregateResult> selectedArea = [SELECT Area__c, COUNT(id)
                                               FROM Ships_location__c
                                               GROUP BY Area__c
                                               ORDER BY Area__c ];
                                               
        //Vul picklist                                       
        Areas.add(firstOption);
        
        for(AggregateResult sl:selectedArea){
            Areas.add(new selectoption(sl.Area__c,sl.Area__c));
        }
        return Areas;     
    }
   
The error is invalid field Area__c for sObject AggregateResult...

I would appreciat any suggestion.

Thanks,

Robert
Best Answer chosen by Robert Bange*
Krishna SambarajuKrishna Sambaraju
There was a mistake in my previous solution. Here is the corrected code.
 
public List<selectoption> getAreaOptions(){ 
	//Verzamel waarden voor picklist
	SelectOption firstOption = new SelectOption('', ' - Choose Area - ');
	
	list<selectoption> Areas= new list<selectoption>();
	Set<String> distinctAreas = new Set<String>();
	list<Ships_location__c> selectedArea= [SELECT Area__c
										   FROM Ships_location__c
										   ORDER BY Area__c ];
	for(Ships_location__c sl:selectedArea)
	{
		distinctAreas.add(sl.Area__c);
	}
										   
	//Vul picklist                                       
	Areas.add(firstOption);
	
	for(String s : distinctAreas){
		Areas.add(new selectoption(s,s));
	}
	return Areas;     
}

This should work now.

All Answers

ABHIKSARKARABHIKSARKAR
check the FLS (field level security)  of the field to see if it is checked for the profile you are trying to access it with. 
Robert Bange*Robert Bange*
Hi Abhiksarkar,

Thank you for your suggestion - the field is editable for all profiles...

Regards, Robert
Krishna SambarajuKrishna Sambaraju
Hi Robert,

You can use a Set to create the distinct list of Areas in your getAreaOptions method. Here is the code.
public List<selectoption> getAreaOptions(){ 
	//Verzamel waarden voor picklist
	SelectOption firstOption = new SelectOption('', ' - Choose Area - ');
	
	list<selectoption> Areas= new list<selectoption>();
	Set<String> distinctAreas = new Set<String>();
	list<Ships_location__c> selectedArea= [SELECT Area__c
										   FROM Ships_location__c
										   ORDER BY Area__c ];
	for(Ships_location__c sl:selectedArea)
	{
		distinctAreas.add(sl.Area__c);
	}
										   
	//Vul picklist                                       
	Areas.add(firstOption);
	
	for(String s : distinctAreas){
		Areas.add(new selectoption(s.Area__c,s.Area__c));
	}
	return Areas;     
}

Hope this helps.
Krishna SambarajuKrishna Sambaraju
There was a mistake in my previous solution. Here is the corrected code.
 
public List<selectoption> getAreaOptions(){ 
	//Verzamel waarden voor picklist
	SelectOption firstOption = new SelectOption('', ' - Choose Area - ');
	
	list<selectoption> Areas= new list<selectoption>();
	Set<String> distinctAreas = new Set<String>();
	list<Ships_location__c> selectedArea= [SELECT Area__c
										   FROM Ships_location__c
										   ORDER BY Area__c ];
	for(Ships_location__c sl:selectedArea)
	{
		distinctAreas.add(sl.Area__c);
	}
										   
	//Vul picklist                                       
	Areas.add(firstOption);
	
	for(String s : distinctAreas){
		Areas.add(new selectoption(s,s));
	}
	return Areas;     
}

This should work now.
This was selected as the best answer
Robert Bange*Robert Bange*
Hi Krishna!
Bull's-eye! Thank you,

Robert