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
TechEd_ProgrammerTechEd_Programmer 

Invalid field Id for AggregateResult

Hi All -

 

I am getting the following error for a rollup trigger that I have written and I am not sure how to solve it.

 

Error is on line 45 of the code: 

RollUpUnitAmounts - Unable to update Engagement__c.
Exception encountered Invalid field Id for AggregateResult

The code is:

trigger RollUpUnitAmounts on Product__c (after insert, after update, after undelete, after delete) 
{

	Product__c[] products;

    if (trigger.isDelete)
    {
        products = Trigger.old;
    }
    else
    {
        products = Trigger.new;
    }
    
    Set<Id> set_EngageIds = new Set<Id>();
     
    for (Product__c p:products)
    {
        if (p.Engagement__c != null)
        {
        	set_EngageIds.add(p.Engagement__c);
        }
    }
	
	List<Engagement__c> engagList;
	Map<ID, Engagement__c> engagMap;
	
	try{
	Map<Id,Engagement__c> engtuMap = new Map<Id,Engagement__c>();
	Map<Id,Engagement__c> toBeUpdated = new Map<Id,Engagement__c>();
	String engagementId = '';
	
	for (Engagement__c e : (engagList = [SELECT id,Total_Units__c from Engagement__c where id IN:set_EngageIds]))
        {
        	engagMap = new Map<ID, Engagement__c>(engagList);
        	e.Total_Units__c = 0;
        	engagementId = e.Id;
        	
        	List<AggregateResult> aresults = [select SUM(Units__c)totalUnit from Product__c where id in :set_EngageIds];
        	
        	if (aresults!=null && aresults.size()>0)
        	{
        		for (AggregateResult ar : aresults)
        		{
        			Engagement__c parentEngagement = engagMap.get(String.valueOf(ar.get('Id')));
        			if (parentEngagement!=null) 
                        {
                        	if (ar.get('parentEngagement') != null) 
                                    {
                                        parentEngagement.Total_Units__c = Double.valueOf(String.valueOf(ar.get('parentEngagement'))).intValue();
                                    }
                            
                            break;
                        }
                        
                        engtuMap.put(parentEngagement.Id,parentEngagement);
        		}
        	}
        	if(engtuMap.values().size()>0)
            {
                toBeUpdated.putAll(engtuMap);
            }
        }
        if(toBeUpdated.size()>0)
        {
            update toBeUpdated.values();
        }
        else
        {
            if(engagMap.size()>0)
            {
                update engagMap.values();
            }
        }
        }
	    catch (Exception e) 
    	{
        	System.debug('\n\n>> RollUpUnitAmounts - Unable to update Engagement__c.\nException encountered ' + e.getMessage());
    	}
	}

 Thank you for any assistance you can provide.

RollUpUnitAmounts - Unable to update Engagement__c.
Exception encountered Invalid field Id for AggregateResult
Best Answer chosen by Admin (Salesforce Developers) 
TechEd_ProgrammerTechEd_Programmer

Changed Code a bit to:

trigger RollUpUnitAmounts on Product__c (after insert, after update, after undelete, after delete) 
{

	Product__c[] products;

    if (trigger.isDelete)
    {
        products = Trigger.old;
    }
    else
    {
        products = Trigger.new;
    }
    
    Set<Id> set_EngageIds = new Set<Id>();
     
    for (Product__c p:products)
    {
        if (p.Engagement__c != null)
        {
        	set_EngageIds.add(p.Engagement__c);
        }
    }
	
	List<Engagement__c> engagList;
	Map<ID, Engagement__c> engagMap;
	
	try{
	Map<Id,Engagement__c> engtuMap = new Map<Id,Engagement__c>();
	Map<Id,Engagement__c> toBeUpdated = new Map<Id,Engagement__c>();
	String engagementId = '';
	
	for (Engagement__c e : (engagList = [SELECT id,Total_Units__c from Engagement__c where id IN:set_EngageIds]))
        {
        	engagMap = new Map<ID, Engagement__c>(engagList);
        	e.Total_Units__c = 0;
        	engagementId = e.Id;
        	
        	List<AggregateResult> aresults = [select Engagement__c, SUM(Units__c)totalUnit from Product__c where Engagement__c IN :set_EngageIds GROUP BY Engagement__c];
        	
        	if (aresults!=null && aresults.size()>0)
        	{
        		for (AggregateResult ar : aresults)
        		{
        			Engagement__c parentEngagement = engagMap.get(String.valueOf(ar.get('Engagement__c')));
        			if (parentEngagement!=null) 
                        {
                        	parentEngagement.Total_Units__c = Double.valueOf(String.valueOf(ar.get('totalUnit'))).intValue();
                        }
                        
                        engtuMap.put(parentEngagement.Id,parentEngagement);
        		}
        	}
        	if(engtuMap.values().size()>0)
            {
                toBeUpdated.putAll(engtuMap);
            }
        }
        if(toBeUpdated.size()>0)
        {
            update toBeUpdated.values();
        }
        else
        {
            if(engagMap.size()>0)
            {
                update engagMap.values();
            }
        }
        }
	    catch (Exception e) 
    	{
        	System.debug('\n\n>> RollUpUnitAmounts - Unable to update Engagement__c.\nException encountered ' + e.getMessage());
    	}
	}

 This solved the issue.