Reply
Regular Contributor
rameshvpsg
Posts: 19
0

SQL Error

I am using below trigger part of before update trigger on parent object to roll up amount from child object. This works fine for few records, but throws out too many soql queries error.

Please guide me  how i can bulkify this trigger.

 

Note: revenue_schedule__c is the parent object and training_sechedule__c is the child object.

 

for (revenue_schedule__c revenueschvar : trigger.new)
{
AggregateResult[] groupedResults = [SELECT SUM(amount__c)amt FROM training_schedule__c WHERE Revenue_Schedule__c = :revenueschvar.id];
revenueschvar.FTE_Revenue__c =(decimal)groupedResults[0].

get('amt');

}
Ramesh
Trusted Contributor
jd123
Posts: 282
0

Re: SQL Error

Hi

 

remove the SOQl inside for loop and write out side for by using IN Operator.

 

If you are not able to write please let me know i can help you out.

------------
Mahi
Regular Contributor
rameshvpsg
Posts: 19
0

Re: SQL Error

Hi Mahi,

Yes please. I am not from coding background, please help me on this.

Thanks

Ramesh
Trusted Contributor
jd123
Posts: 282
0

Re: SQL Error

[ Edited ]

Ok no problem,

 

try this code

 

List<id> rsList=new List<id>();

for (revenue_schedule__c revenueschvar : trigger.new)
{
   rsList.add(revenueschvar.id);

}

 

Decimal result = [SELECT SUM(amount__c) FROM training_schedule__c WHERE Revenue_Schedule__c IN rsList];
 
 
if it is not working please let me know.
 
 
------------
Mahi
Regular Contributor
rameshvpsg
Posts: 19
0

Re: SQL Error

Hi Mahi,

Thanks for your help. I used the below code provided by another member and it worked.

Thanks again.

 

Map<id,AggregateResult> aMap = new Map<id,AggregateResult>();
AggregateResult[] groupedResults = [SELECT Revenue_Schedule__c rid, SUM(amount__c)amt FROM training_schedule__c WHERE Revenue_Schedule__c = :trigger.newMap.Keyset() group by Revenue_Schedule__c];
for(AggregateResult arrtemp : groupedResults)
{
aMap.put( (Id)arrtemp.get('rid'), arrtemp);
}
for (revenue_schedule__c revenueschvar : trigger.new)
{
    AggregateResult arr = amap.get(revenueschvar.id);
    revenueschvar.totalamount__c = (decimal)arr.get('amt');
}
Ramesh