You need to sign in to do that
Don't have an account?
uday uday chavan
Review the errors on this page.
WorkOrderTrigger: execution of AfterUpdate caused by: System.DmlException: Insert failed. First exception on row 0; first error: CANNOT_INSERT_UPDATE_ACTIVATE_ENTITY, WorkOrderTrigger: maximum trigger depth exceeded Work_Order trigger event AfterUpdate Work_Order trigger event AfterUpdate Work_Order trigger event AfterUpdate Work_Order trigger event AfterUpdate Work_Order trigger event AfterUpdate Work_Order trigger event AfterUpdate Work_Order trigger event AfterUpdate Work_Order trigger event AfterUpdate Work_Order trigger event AfterUpdate Work_Order trigger event AfterUpdate Work_Order trigger event AfterUpdate Work_Order trigger event AfterUpdate Work_Order trigger event AfterUpdate Work_Order trigger event AfterUpdate Work_Order trigger event AfterUpdate Work_Order trigger event AfterUpdate: [] Class.WorkOrderTriggerHelper.CreateWorkOrderItemOnInsert: line 677, column 1 Class.WorkOrderTriggerHelper.OnAfterUpdateEvent: line 47, column 1 Trigger.WorkOrderTrigger: line 19, column 1
this my code it is working fine on after insert but getting error on after update
this is my code;
public static void CreateWorkOrderItemOnInsert(List<Work_Order__c> workOrder){
list<Work_Order_Item__c> listWOI = new list<Work_Order_Item__c>();
set<Id> accIds = new set<Id>();
for(Work_Order__c woItem:workOrder){
String[] s = woItem.Service_Type__c.split(';');
if(s.size()>0){
if(woItem.Status__c =='Completed' && s.contains('Waste Export') ){
if(woItem.Account__r.Terminal__c == false){
accIds.add(woItem.Account__c);
}
Work_Order_Item__c newWOI = new Work_Order_Item__c();
newWOI.Work_Order__c = woItem.Id;
newWOI.Quantity__c = woItem.Total_Ordered_Quantity__c;
newWOI.Received_Quantity__c = woItem.Total_Delivered_Quantity__c;
newWOI.Unit_Price__c = woItem.Price__c;
newWOI.Description__c = woItem.Notes__c;
listWOI.add(newWOI);
}
}
}
if(accIds.size()>0){
list<Account> accounts = new list<Account>();
for(Account acc:[SELECT Id,Name,Terminal__c from Account where Id =:accIds]){
if(acc.Terminal__c == false){
acc.Terminal__c = true;
}
accounts.add(acc);
}
if(accounts.size()>0){
update accounts;
}
}
if(listWOI.size()>0){
Insert listWOI;
}
}
should i have to write another method for update what i have to change in that
getting error on after update working fine when on after insert
Review the errors on this page.
WorkOrderTrigger: execution of AfterUpdate caused by: System.DmlException: Insert failed. First exception on row 0; first error: CANNOT_INSERT_UPDATE_ACTIVATE_ENTITY, WorkOrderTrigger: maximum trigger depth exceeded Work_Order trigger event AfterUpdate Work_Order trigger event AfterUpdate Work_Order trigger event AfterUpdate Work_Order trigger event AfterUpdate Work_Order trigger event AfterUpdate Work_Order trigger event AfterUpdate Work_Order trigger event AfterUpdate Work_Order trigger event AfterUpdate Work_Order trigger event AfterUpdate Work_Order trigger event AfterUpdate Work_Order trigger event AfterUpdate Work_Order trigger event AfterUpdate Work_Order trigger event AfterUpdate Work_Order trigger event AfterUpdate Work_Order trigger event AfterUpdate Work_Order trigger event AfterUpdate: [] Class.WorkOrderTriggerHelper.CreateWorkOrderItemOnInsert: line 677, column 1 Class.WorkOrderTriggerHelper.OnAfterUpdateEvent: line 47, column 1 Trigger.WorkOrderTrigger: line 19, column 1
this my code it is working fine on after insert but getting error on after update
this is my code;
public static void CreateWorkOrderItemOnInsert(List<Work_Order__c> workOrder){
list<Work_Order_Item__c> listWOI = new list<Work_Order_Item__c>();
set<Id> accIds = new set<Id>();
for(Work_Order__c woItem:workOrder){
String[] s = woItem.Service_Type__c.split(';');
if(s.size()>0){
if(woItem.Status__c =='Completed' && s.contains('Waste Export') ){
if(woItem.Account__r.Terminal__c == false){
accIds.add(woItem.Account__c);
}
Work_Order_Item__c newWOI = new Work_Order_Item__c();
newWOI.Work_Order__c = woItem.Id;
newWOI.Quantity__c = woItem.Total_Ordered_Quantity__c;
newWOI.Received_Quantity__c = woItem.Total_Delivered_Quantity__c;
newWOI.Unit_Price__c = woItem.Price__c;
newWOI.Description__c = woItem.Notes__c;
listWOI.add(newWOI);
}
}
}
if(accIds.size()>0){
list<Account> accounts = new list<Account>();
for(Account acc:[SELECT Id,Name,Terminal__c from Account where Id =:accIds]){
if(acc.Terminal__c == false){
acc.Terminal__c = true;
}
accounts.add(acc);
}
if(accounts.size()>0){
update accounts;
}
}
if(listWOI.size()>0){
Insert listWOI;
}
}
should i have to write another method for update what i have to change in that
This error is because your trigger on after update is running recursively. You can resolve this error by using a static boolean variable check.
For eg.
1)create a class( say triggerHelperClass). create a public static boolean variable( say bool), with value = true/false;
2) Add a check if(triggerHelperClass.bool ==true) "// if u set the value as true in class, then true here",in the first line inside trigger.
3) Set the value of triggerHelperClass.bool = false; , before you update your list in trigger.
This will remove your error, and force your trigger to NOT run recursively on after update event.
See related: https://salesforce.stackexchange.com/questions/79371/maximum-trigger-depth-exceeded
https://developer.salesforce.com/forums/ForumsMain?id=9062I000000DL4IQAW
Hope this helps you. Please mark this answer as best so that others facing the same issue will find this information useful. Thank you
You need to share WorkOrderTriggerHelper class code, becasue i neeed to investigation
Class.WorkOrderTriggerHelper.CreateWorkOrderItemOnInsert: line 677, column 1
Regards
Try this:-
Please mark it as Best Answer if it helps you.
Thanks & Regards
Suraj Tripathi
You need to share WorkOrderTriggerHelper class code, becasue i neeed to investigation
Class.WorkOrderTriggerHelper.CreateWorkOrderItemOnInsert: line 677, column 1
Regards