You need to sign in to do that
Don't have an account?
SFDCIronMan
Help me Create a Trigger for CheckBox to clone Opportunity and OpportunityLineItem
Help me Create a Trigger for CheckBox to clone Opportunity and OpportunityLineItem
//This is what i have coded please help resolve this
trigger CloneParentOpportunityTrigger on Opportunity (After insert,After update)
{
List<Opportunity> oppsToUpdate = new List<Opportunity>();
Map<Id,Opportunity> OldOppId = new Map<Id,Opportunity>();
Opportunity newopp = new Opportunity();
if(Trigger.IsAfter)
{
if(Trigger.IsInsert || Trigger.IsUpdate)
{
if(newopp.Clone_Opportunity__c)
{
for(Opportunity opp : Trigger.new)
{
//opportunity list item
newopp.Name = opp.Name;
newopp.AccountId = opp.AccountId;
newopp.Product_Type__c = opp.Product_Type__c;
newopp.CloseDate = opp.CloseDate;
newopp.StageName = opp.StageName;
newopp.Payment_Frequency__c = opp.Payment_Frequency__c;
newopp.Most_Recent_Invoice_Date__c = opp.Most_Recent_Invoice_Date__c;
newopp.Billing_Start_Date__c = opp.Billing_Start_Date__c;
newopp.Parent_Opportunity__c = opp.Id;
oppsToUpdate.add(newopp);
OldOppId.put(opp.id,opp);
}
insert oppsToUpdate;
Map<Id,Opportunity> NewOppId = new Map<Id,Opportunity>();
for(Opportunity opp1 : oppsToUpdate)
{
NewOppId.put(opp1.Id, opp1);
}
List<OpportunityLineItem> oppitemList = new List<OpportunityLineItem>([SELECT Id, Product2Id, Quantity, UnitPrice, OpportunityId FROM OpportunityLineItem Where OpportunityId IN : OldOppId.keyset()]);
for(OpportunityLineItem oppitem : oppitemList)
{
OpportunityLineItem oli = new OpportunityLineitem();
oli.OpportunityId = NewOppId.get(oppitem.OpportunityId).Id;
oli.Product2Id = oppitem.Product2Id;
oli.Quantity = oppitem.Quantity;
oli.UnitPrice = oppitem.UnitPrice;
oppitemlist.add(oli);
}
insert oppitemList;
}
}
}
}
//This is what i have coded please help resolve this
trigger CloneParentOpportunityTrigger on Opportunity (After insert,After update)
{
List<Opportunity> oppsToUpdate = new List<Opportunity>();
Map<Id,Opportunity> OldOppId = new Map<Id,Opportunity>();
Opportunity newopp = new Opportunity();
if(Trigger.IsAfter)
{
if(Trigger.IsInsert || Trigger.IsUpdate)
{
if(newopp.Clone_Opportunity__c)
{
for(Opportunity opp : Trigger.new)
{
//opportunity list item
newopp.Name = opp.Name;
newopp.AccountId = opp.AccountId;
newopp.Product_Type__c = opp.Product_Type__c;
newopp.CloseDate = opp.CloseDate;
newopp.StageName = opp.StageName;
newopp.Payment_Frequency__c = opp.Payment_Frequency__c;
newopp.Most_Recent_Invoice_Date__c = opp.Most_Recent_Invoice_Date__c;
newopp.Billing_Start_Date__c = opp.Billing_Start_Date__c;
newopp.Parent_Opportunity__c = opp.Id;
oppsToUpdate.add(newopp);
OldOppId.put(opp.id,opp);
}
insert oppsToUpdate;
Map<Id,Opportunity> NewOppId = new Map<Id,Opportunity>();
for(Opportunity opp1 : oppsToUpdate)
{
NewOppId.put(opp1.Id, opp1);
}
List<OpportunityLineItem> oppitemList = new List<OpportunityLineItem>([SELECT Id, Product2Id, Quantity, UnitPrice, OpportunityId FROM OpportunityLineItem Where OpportunityId IN : OldOppId.keyset()]);
for(OpportunityLineItem oppitem : oppitemList)
{
OpportunityLineItem oli = new OpportunityLineitem();
oli.OpportunityId = NewOppId.get(oppitem.OpportunityId).Id;
oli.Product2Id = oppitem.Product2Id;
oli.Quantity = oppitem.Quantity;
oli.UnitPrice = oppitem.UnitPrice;
oppitemlist.add(oli);
}
insert oppitemList;
}
}
}
}
Even after you have tried above code and still facing the same error then use below things.
Maximum Trigger Depth Exceeded Error in Salesforce occurs due to recursion in your CloneParentOpportunityTrigger trigger. This recurssion due some opportunity Line Item Trigger or triggers or automation firing your CloneParentOpportunityTrigger trigger again. So it's going unstoppable
Use the below way to avoid this error:
Add static Boolean in trigger context to handle this recurrsion error - Commonly used trick.
Create New Apex Class:
And Update your trigger like below with static boolean check :
Thanks,
Maharajan.C
All Answers
Review the errors on this page.
CloneParentOpportunityTrigger: execution of AfterInsert caused by: System.DmlException: Insert failed. First exception on row 0; first error: CANNOT_INSERT_UPDATE_ACTIVATE_ENTITY, CloneParentOpportunityTrigger: maximum trigger depth exceeded Opportunity trigger event AfterInsert Opportunity trigger event AfterInsert Opportunity trigger event AfterInsert Opportunity trigger event AfterInsert Opportunity trigger event AfterInsert Opportunity trigger event AfterInsert Opportunity trigger event AfterInsert Opportunity trigger event AfterInsert Opportunity trigger event AfterInsert Opportunity trigger event AfterInsert Opportunity trigger event AfterInsert Opportunity trigger event AfterInsert Opportunity trigger event AfterInsert Opportunity trigger event AfterInsert Opportunity trigger event AfterInsert Opportunity trigger event AfterInsert: [] Trigger.CloneParentOpportunityTrigger: line 27, column 1
Can you please try the below Updated code:
Thanks,
Maharajan.C
Even after you have tried above code and still facing the same error then use below things.
Maximum Trigger Depth Exceeded Error in Salesforce occurs due to recursion in your CloneParentOpportunityTrigger trigger. This recurssion due some opportunity Line Item Trigger or triggers or automation firing your CloneParentOpportunityTrigger trigger again. So it's going unstoppable
Use the below way to avoid this error:
Add static Boolean in trigger context to handle this recurrsion error - Commonly used trick.
Create New Apex Class:
And Update your trigger like below with static boolean check :
Thanks,
Maharajan.C
thank you so much for the solution
have you tested this code on your org because its not working in mine like its not cloning opportunity when Inserted or updated.
please help me regarding this problem.
and provide this code in design pattern if you can
Maharajan.C