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
Nidhi CloudNidhi Cloud 

Create a field Opportunity amount on Account object and write a trigger on Opportunity to populate the total sum of all opportunity Amount on Account Object Opportunity amount field

Cna anyone help me with this one??
Best Answer chosen by Nidhi Cloud
Sai PraveenSai Praveen (Salesforce Developers) 
Hi Nidhi,

By using below trigger on opportunity we can achieve it.  Opportunity_amount__c is the field that is created on Account.
 
trigger SampeTrigger on Opportunity ( after insert, after update, after delete) {

    Map<Id, List<Opportunity>> acctoopp = new Map<Id, List<Opportunity>>();
    Set<Id> acctIds = new Set<Id>();
    List<Opportunity> opptyList = new List<Opportunity>();
    if(trigger.isUpdate || trigger.isInsert){
        for(Opportunity oppty : trigger.New){
            if(oppty.AccountId != null){
                acctIds.add(oppty.AccountId);
            }
        }    
    }
    if(trigger.isDelete){
        for(Opportunity oppty : trigger.old){
            if(oppty.AccountId != null){
                acctIds.add(oppty.AccountId);
            }
        }    
    }
    if(acctIds.size() > 0){
        opptyList = [SELECT Amount, AccountId FROM Opportunity WHERE AccountId IN : acctIds];
        for(Opportunity oppty : opptyList){
            if(!acctoopp.containsKey(oppty.AccountId)){
                acctoopp.put(oppty.AccountId, new List<Opportunity>());
            }
            acctoopp.get(oppty.AccountId).add(oppty); 
        }   
        List<Account> acctList = new List<Account>();
        acctList = [SELECT Opportunity_amount__c  FROM Account WHERE Id IN: acctIds];
        for(Account acct : acctList){
            List<Opportunity> opplist = new List<Opportunity>();
            opplist = acctoopp.get(acct.Id);
            Double oppyamount = 0;
            for(Opportunity oppty : opplist){
                if(oppty.Amount != null){
                    oppyamount += oppty.Amount;
                }
            }
            acct.Opportunity_amount__c  = oppyamount;
        }
        update acctList;
    }

}

Please refer the below article for the same.



https://www.infallibletechie.com/2014/03/trigger-to-find-total-opportunity.html

If this solution helps, Please mark it as best answer​​​​​​​

Thanks,
 

All Answers

Sai PraveenSai Praveen (Salesforce Developers) 
Hi Nidhi,

Can you please elobarte the use case. If the use case is to sum all the opportunity amount on the related account. We can acheieve with just creating a Roll up summary field on Account object to sum all the opportunities amount as shown below. If this do not meet your requirement please let us know the exact scenerio.

User-added image


If the above solution helps, Please mark it as best answer.

Thanks,
 
Nidhi CloudNidhi Cloud
Hey Sai, 
I wanted to know how will i create sum roll up using apex
i have created this field called opportunity amount on account object but how will i witre tigger to get the sum of all opportunity amount and display it on mount field which is on opportunity object,
Sai PraveenSai Praveen (Salesforce Developers) 
Hi Nidhi,

By using below trigger on opportunity we can achieve it.  Opportunity_amount__c is the field that is created on Account.
 
trigger SampeTrigger on Opportunity ( after insert, after update, after delete) {

    Map<Id, List<Opportunity>> acctoopp = new Map<Id, List<Opportunity>>();
    Set<Id> acctIds = new Set<Id>();
    List<Opportunity> opptyList = new List<Opportunity>();
    if(trigger.isUpdate || trigger.isInsert){
        for(Opportunity oppty : trigger.New){
            if(oppty.AccountId != null){
                acctIds.add(oppty.AccountId);
            }
        }    
    }
    if(trigger.isDelete){
        for(Opportunity oppty : trigger.old){
            if(oppty.AccountId != null){
                acctIds.add(oppty.AccountId);
            }
        }    
    }
    if(acctIds.size() > 0){
        opptyList = [SELECT Amount, AccountId FROM Opportunity WHERE AccountId IN : acctIds];
        for(Opportunity oppty : opptyList){
            if(!acctoopp.containsKey(oppty.AccountId)){
                acctoopp.put(oppty.AccountId, new List<Opportunity>());
            }
            acctoopp.get(oppty.AccountId).add(oppty); 
        }   
        List<Account> acctList = new List<Account>();
        acctList = [SELECT Opportunity_amount__c  FROM Account WHERE Id IN: acctIds];
        for(Account acct : acctList){
            List<Opportunity> opplist = new List<Opportunity>();
            opplist = acctoopp.get(acct.Id);
            Double oppyamount = 0;
            for(Opportunity oppty : opplist){
                if(oppty.Amount != null){
                    oppyamount += oppty.Amount;
                }
            }
            acct.Opportunity_amount__c  = oppyamount;
        }
        update acctList;
    }

}

Please refer the below article for the same.



https://www.infallibletechie.com/2014/03/trigger-to-find-total-opportunity.html

If this solution helps, Please mark it as best answer​​​​​​​

Thanks,
 
This was selected as the best answer
Nidhi CloudNidhi Cloud
IT WORKED............................................................. THANKS A TON!