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

AggregateResult for loop issue


I wrote a class which caculates the number of instance of  a custom object called Volunteer_Registration__c to Contact. This class is called by a trigger on Volunteer_Registration__c (after detele, after insert). It works great except for one scenario: when I delete the last Volunteer Registration record, I expect the the field  'of_Volunteer_Visit__c' to be reset to zero or at least NULL but this does not work. Basically it looks like in this specific scenario the for loop is not executed.

Any idea how I could modify my code to accomodate this scenario?


public with sharing class RollupContactInformation {

	public static void DoIndVisit(Set<ID> contIDs) {
    	Contact[] updateContacts = new Contact[]{};
        Map<ID, Contact> contacts = new Map<ID, Contact>([SELECT Id FROM Contact WHERE Id in: ContIDs ]);
        //Loop over the aggregate result set
	for (AggregateResult ar : [select Contact__c, COUNT(Id)numVisits From Volunteer_Registration__c Where Contact__c in: ContIDs and Status__c = 'Completed' AND Inquiry_Type__c = 'Individual' group by Contact__c ]) 
		Contact thisContact = new Contact(Id=String.valueOf(ar.get('Contact__c')));
		thisContact.of_Volunteer_Visit__c = Integer.valueOf(ar.get('numVisits')); 
		//Add this new account to the list of account objects

		//Update the account object.
		if(updateContacts.size()>0) {update updateContacts;}	

 Thanks   a lot.


Manodev OV 9Manodev OV 9
Here is my working example for your question.

List<account> listacc=new List<account>();
        AggregateResult[] groupedResults=[select Accountid,count(id)quan from contact  where Accountid in : accids group by Accountid];
        for(AggregateResult ar:groupedResults)
            Account acc=new account();