Trigger Scenario:
Lets take a sample use case when an Opportunity stage has been changed to Closed-Won ,I want to create a new Invoice(custom object) record with below data mapping.
The relationship between all these objects as below
Source Code:
Please comment or write us if you have any queries/requirements.
Please like,follow,bookmark,subscribe this site to receive daily updates.
Lets take a sample use case when an Opportunity stage has been changed to Closed-Won ,I want to create a new Invoice(custom object) record with below data mapping.
- Invoice Opportunity - Same Opportunity where Stage has been modified.
- Invoice Account - Account Related To This Opportunity.
- Invoice Total Quantity - The sum the quantity of all opportunity line items(opportunity products) related to the same Opportunity.
The relationship between all these objects as below
Source Code:
trigger OpportunityTrigger on Opportunity (after update) { if(Trigger.isAfter && Trigger.isUpdate) { OpportunityTriggerHandler.opportunityAfterUpdate(Trigger.new,Trigger.oldMap) } }
Public Class OpportunityTriggerHandler { public static void opportunityAfterUpdate(List<Opportunity> TriggerNew,Map<Id,Opportunity> TriggerOldMap) { Set<id> setOppIds = new Set<id>(); Map<Id,Decimal> mapOppIdtoSumOfLineitems = new Map<Id,Decimal>(); for(Opportunity opty:TriggerNew) { if('Closed Won'.equalsIgnoreCase(opty.StageName) && opty.StageName!=TriggerOldMap.get(opty.Id).StageName) { setOppIds.add(opty.id); } } if(!setOppIds.isEmpty()) { List<Invoice__c> listInvocesToInsert = new List<Invoice__c>(); for(Aggregateresult agr:[SELECT sum(quantity) qunty,Opportunityid FROM Opportunitylineitem WHERE Opportunityid IN:setOppIds GROUP BY Opportunityid]) { mapOppIdtoSumOfLineitems.put((id)agr.get('Opportunityid'),(decimal)agr.get('qunty')); } for(Opportunity op:TriggerNew) { if('Closed Won'.equalsIgnoreCase(op.StageName) && op.StageName!=TriggerOldMap.get(op.Id).StageName && mapOppIdtoSumOfLineitems.containsKey(op.id) { Invoice__c inv = new Invoice__c(); inv.name = 'Trigger-'+op.Name; inv.ParentAccount__c=op.Accountid; inv.ParentOpportunity__c=op.id; inv.Discount__c=mapOppIdtoSumOfLineitems.get(op.id); listInvocesToInsert.add(inv); } } if(!listInvocesToInsert.isEmpty()) Database.insert(listInvocesToInsert,false); } } }
Please comment or write us if you have any queries/requirements.
Please like,follow,bookmark,subscribe this site to receive daily updates.