Friday, June 13, 2014

Stop Recursion in Trigger

Stop Recursion:
Trigger:
------------------
trigger trigSplitSalesInvoiceLine on c2g__codaInvoiceLineItem__c (After insert)
{
  if(StopRecursion.runOnce())
   {
     SalesInvoiceLineItemTriggerHandler goToHandler = new SalesInvoiceLineItemTriggerHandler(Trigger.isExecuting,Trigger.size);
     if(Trigger.isAfter && Trigger.isInsert)
      {
        goToHandler.OnAfterInsert(trigger.new);
      }
   }

}
-----------
Class:
public with sharing class SalesInvoiceLineItemTriggerHandler
{
      private boolean isExecuting = True;
      private integer BatchSize = 0;
     
      public SalesInvoiceLineItemTriggerHandler(boolean isExecuting, integer size)
      {
         isExecuting = isExecuting;
           BatchSize = size;
      }
      public void OnAfterInsert(List<c2g__codaInvoiceLineItem__c> triggerNew)
          {
              updateUnitRateWithCordRateInsertNewSILEqualPlacentaRate(triggerNew);
          }
          
       public void updateUnitRateWithCordRateInsertNewSILEqualPlacentaRate(List<c2g__codaInvoiceLineItem__c> lstSalesInvoiceLine)
       {
        if(lstSalesInvoiceLine!=null && lstSalesInvoiceLine.size()>0)
          {
            List<c2g__codaInvoiceLineItem__c > lstInvoiceLine=new List<c2g__codaInvoiceLineItem__c >();
            List<c2g__codaInvoiceLineItem__c > lstInvoiceLine2=new List<c2g__codaInvoiceLineItem__c >();
            for(c2g__codaInvoiceLineItem__c objInvoiceLine:lstSalesInvoiceLine)
               {
               if(objInvoiceLine.Cl_Cord_Rate__c!=null)
                {   
                 c2g__codaInvoiceLineItem__c objIL=new c2g__codaInvoiceLineItem__c(id =objInvoiceLine.id );
                 objIL.c2g__UnitPrice__c=objInvoiceLine.Cl_Cord_Rate__c;
                 objIL.c2g__Product__c=objInvoiceLine.c2g__Product__c;
                 objIL.c2g__Quantity__c=objInvoiceLine.c2g__Quantity__c;
                 lstInvoiceLine.add(objIL);
                }
               }
            for(c2g__codaInvoiceLineItem__c objInvoiceLine:lstSalesInvoiceLine)
               {
               if(objInvoiceLine.Cl_Placenta_Rate__c!=null)
                {
                c2g__codaInvoiceLineItem__c objNewIL=new c2g__codaInvoiceLineItem__c ();
                objNewIL.c2g__UnitPrice__c=objInvoiceLine.Cl_Placenta_Rate__c;
                objNewIL.c2g__Invoice__c=objInvoiceLine.c2g__Invoice__c;
                objNewIL.c2g__OwnerCompany__c=objInvoiceLine.c2g__OwnerCompany__c;
                objNewIL.c2g__Product__c=objInvoiceLine.c2g__Product__c;
                objNewIL.ffbilling__DeriveUnitPriceFromProduct__c=objInvoiceLine.ffbilling__DeriveUnitPriceFromProduct__c;
                lstInvoiceLine2.add(objNewIL);
               }
               }
            if(lstInvoiceLine.size()>0 && lstInvoiceLine2.size()>0)
            {   
            update lstInvoiceLine;
            insert lstInvoiceLine2;
            }
         }
 
       
     }
}

-----------------
Recursion Class:
public Class StopRecursion
{
private static boolean run = true;
public static boolean runOnce()
 {
    if(run)
    {
      run=false;
      return true;
    }
    else
    {
        return run;
    }
 }


}

No comments:

Post a Comment

Thanks for your comment