Friday, February 19, 2016

Triggers:How to avoid execution query multiple time in single transction.

1.Create Query Utility class.
  
public class Query_Util{
       public static List<Product2> prdList ;

  
     public static List<Product2> getProducts(){
       prdList  = New List<Product2>();
       prdList = [select id,Name,PRODUCT_CODE__c from Product2 where PRODUCT_CODE__c =111];
       return prdList ;
    }  


}

2.how to user above query in Trigger()

trigger queryUtility on Opportunity (before insert, before update) 
{
      List<Product2> prd;
        if(query_util.prdList ==null)  // Checking query_util.prdList is null for first time 
        {
            prd = Query_Util.getProducts();
        }
        else
        {
            prd = query_util.prdList;   //Using Existing Product list returned from query Util
            
        }
   if(Trigger.isInsert){
          for(Opportunity opp:Trigger.New){
              if(prd != null && prd.size() > 0 && opp.Name == '111' && opp.Product_Name__c == prd[0].id && System.Today() > ncd.Loan_Date__c){
                 system.debug('&&&&&&&&&'+opp.Product_Name__c);
                 opp.Name.addError('111 Opportunity cannot be created');
               }
        
             }
        }
        if(Trigger.isUpdate){
          for(Opportunity opp:Trigger.New){
              if(prd != null && prd.size() > 0 && opp.Name == '111' && opp.Product_Name__c == prd[0].id && opp.CreatedDate.Date() > ncd.Loan_Date__c){
                 system.debug('&&&&&&&&&'+opp.Product_Name__c);
                 opp.Name.addError('111 Opportunity cannot be created');
               }
        
             }
        }
}  

No comments:

Post a Comment