You need to sign in to do that
Don't have an account?
Charlie Chaplin 2017
System.LimitException: Too many SOQL queries: 101 Stack Trace:
Need some help. I am moving this trigger from Partial sandbox to production. It is generating this error.
System.LimitException: Too many SOQL queries: 101
Stack Trace: Trigger.DealflowCustomApprovalProcessTriggerAIAU: line 5, column 1
Please let me know what am i doing wrong here.
trigger DealflowCustomApprovalProcessTriggerAIAU on Approval_History__c (after insert, after update) {
Set<Id> CpId = new Set<Id>();
List<Underwriting__c> UpdatedCP = new List<Underwriting__c>();
List<Approval_history__c> AH = new List<Approval_history__c>([Select Id, RecordType.DeveloperName, current_approver__c, type__c, status__c, credit_package__c,actual_approver__c,preliminary_approval__c FROM Approval_history__c WHERE Id IN: Trigger.newMap.keySet()]);
For(Approval_history__c A:AH){
CpId.add(A.credit_Package__c);
Map<Id, Underwriting__c> Und = new Map<Id,Underwriting__c>([SELECT Id, Preliminary_Credit_Approval__c, Preliminary_Credit_Approval_Date__c, Final_Initial_Approver__c, Lock_Credit_Package__c,underwriting_stage__c,final_approver__c,final_decision_date__c, RecordType.DeveloperName,Initial_Credit_Approval__c,Initial_Credit_Approval_Date__c,final_preliminary_approver__c from Underwriting__c WHERE Id IN:CpId]);
Underwriting__c u = und.get(A.credit_package__c);
If(Trigger.IsInsert && (U.RecordType.DeveloperName =='MT_Credit_Package' || U.RecordType.DeveloperName == 'Commercial_Direct' || U.RecordType.DeveloperName == 'Credit_Package') && U.underwriting_stage__c =='Underwriting Review'){
A.type__c = 'Initial Loan Approval';
u.underwriting_stage__c = 'Pending Initial Approval';
UpdatedCP.add(u);
Update A;
}
If(Trigger.IsInsert && (U.RecordType.DeveloperName =='MT_Credit_Package' || U.RecordType.DeveloperName == 'Commercial_Direct' || U.RecordType.DeveloperName == 'Credit_Package') && U.underwriting_stage__c =='Borrower Accepted'){
A.type__c = 'Preliminary Loan Approval';
u.underwriting_stage__c = 'Pending Preliminary Approval';
UpdatedCP.add(u);
Update A;
}
If(Trigger.IsInsert && (U.RecordType.DeveloperName =='MT_Credit_Package' || U.RecordType.DeveloperName == 'Commercial_Direct' || U.RecordType.DeveloperName == 'Credit_Package') && U.underwriting_stage__c =='In Process'){
A.type__c = 'Final Loan Approval';
u.underwriting_stage__c = 'Pending Final Approval';
UpdatedCP.add(u);
Update A;
}
If(Trigger.IsInsert && U.underwriting_stage__c =='Pending Initial Approval'){
A.type__c = 'Initial Loan Approval';
Update A;}
If(Trigger.IsInsert && U.underwriting_stage__c =='Pending Preliminary Approval'){
A.type__c = 'Preliminary Loan Approval';
Update A;
}
If(Trigger.IsInsert && U.underwriting_stage__c =='Pending Final Approval'){
A.type__c = 'Final Loan Approval';
Update A;
}
If(Trigger.IsInsert && (((U.RecordType.DeveloperName =='Credit_Package' || U.RecordType.DeveloperName == 'Commercial_Direct' ||
U.RecordType.DeveloperName == 'MT_Credit_Package') && U.underwriting_stage__c =='In Process') ||
(U.RecordType.DeveloperName !='MT_Credit_Package' && U.RecordType.DeveloperName != 'Credit_Package' &&
U.RecordType.DeveloperName != 'Commercial_Direct' && U.underwriting_stage__c =='Underwriting Review'))){
u.underwriting_stage__c = 'Pending Final Approval';
A.type__c = 'Final Loan Approval';
//u.Committee_Type__c = a.Committee_Type__c;
UpdatedCP.add(u);
Update A;
}
//the isInsert conditions below will not execute as the below types are not set implicitly. They are set on update, not insert.
If(trigger.IsInsert && A.Status__c == 'Final Approved' && A.type__c == 'Initial Loan Approval'){
U.underwriting_stage__c = 'Initial Credit Approved';
U.Initial_Credit_Approval__c = TRUE;
U.Initial_Credit_Approval_Date__c = date.today();
U.Final_Initial_Approver__c = a.actual_approver__c;
UpdatedCP.add(u);
}
If(trigger.IsInsert && A.Status__c == 'Final Approved' && A.type__c == 'Preliminary Loan Approval'){
U.underwriting_stage__c = 'In Process';
U.Preliminary_Credit_Approval__c = TRUE;
U.Preliminary_Credit_Approval_Date__c = date.today();
U.Final_Preliminary_Approver__c = a.actual_approver__c;
UpdatedCP.add(u);
}
if(trigger.IsInsert && A.Status__c == 'Final Approved' && A.type__c == 'Final Loan Approval'){
U.underwriting_stage__c = 'Final Credit Approved';
U.final_approval__c = TRUE;
U.final_decision_date__c = date.today();
U.final_approver__c = a.actual_approver__c;
UpdatedCP.add(u);
}
//the isInsert conditions above will not execute as the below types are not set implicitly. They are set on update, not insert.
If(trigger.IsUpdate && A.Status__c == 'Final Approved' && trigger.oldmap.get(A.Id).Status__c =='Pending' && A.type__c == 'Initial Loan Approval'){
System.debug('89');
U.underwriting_stage__c = 'Initial Credit Approved';
U.Initial_Credit_Approval__c = TRUE;
U.Initial_Credit_Approval_Date__c = date.today();
U.Final_Initial_Approver__c = a.actual_approver__c;
UpdatedCP.add(u);
}
If(trigger.IsUpdate && A.Status__c == 'Rejected' && trigger.oldmap.get(A.Id).Status__c =='Pending'&& A.type__c == 'Initial Loan Approval'){
U.underwriting_stage__c = 'Underwriting Review';
UpdatedCP.add(u);
}
If(trigger.IsUpdate && A.Status__c == 'Final Approved' && trigger.oldmap.get(A.Id).Status__c =='Pending'&& A.type__c == 'Preliminary Loan Approval'){
U.underwriting_stage__c = 'In Process';
U.Preliminary_Credit_Approval__c = TRUE;
U.Preliminary_Credit_Approval_Date__c = date.today();
U.final_preliminary_approver__c = a.actual_approver__c;
UpdatedCP.add(u);
}
If(trigger.IsUpdate && A.Status__c == 'Rejected' && trigger.oldmap.get(A.Id).Status__c =='Pending'&& A.type__c == 'Preliminary Loan Approval'){
U.underwriting_stage__c = 'Borrower Accepted';
UpdatedCP.add(u);
}
If(trigger.IsUpdate && A.Status__c == 'Final Approved' && trigger.oldmap.get(A.Id).Status__c =='Pending' && A.type__c == 'Final Loan Approval'){
u.underwriting_stage__c = 'Final Credit Approved';
u.final_approval__c = TRUE;
u.final_decision_date__c = date.today();
u.final_approver__c = a.actual_approver__c;
UpdatedCP.add(u);
}
If(trigger.IsUpdate && A.Status__c == 'Rejected' && trigger.oldmap.get(A.Id).Status__c =='Pending'&& A.type__c == 'Final Loan Approval' && U.RecordType.DeveloperName !='MT_Credit_Package' && U.RecordType.DeveloperName != 'Credit_Package'){
U.underwriting_stage__c = 'Underwriting Review';
UpdatedCP.add(u);
}
If(trigger.IsUpdate && A.Status__c == 'Rejected' && trigger.oldmap.get(A.Id).Status__c =='Pending'&& A.type__c == 'Final Loan Approval' && (U.RecordType.DeveloperName =='MT_Credit_Package' || U.RecordType.DeveloperName == 'Credit_Package')){
U.underwriting_stage__c = 'In Process';
UpdatedCP.add(u);
}
if(trigger.IsUpdate && a.RecordType.DeveloperName == 'Credit_Committee'){
if(u.Underwriting_Stage__c == 'In Process'){
u.Final_Preliminary_Approver__c = a.Actual_Approver__c;
u.Committee_Type__c = a.Current_Approver__c;
}else if(u.Underwriting_Stage__c == 'Final Credit Approved'){
u.Final_Approver__c = a.Actual_Approver__c;
u.Committee_Type__c = a.Current_Approver__c;
}else{
u.Final_Initial_Approver__c = a.Actual_Approver__c;
u.Committee_Type__c = a.Current_Approver__c;
}
UpdatedCP.add(u);
}
If(UpdatedCp.size()>0){
update updatedcp;}
}
}
System.LimitException: Too many SOQL queries: 101
Stack Trace: Trigger.DealflowCustomApprovalProcessTriggerAIAU: line 5, column 1
Please let me know what am i doing wrong here.
trigger DealflowCustomApprovalProcessTriggerAIAU on Approval_History__c (after insert, after update) {
Set<Id> CpId = new Set<Id>();
List<Underwriting__c> UpdatedCP = new List<Underwriting__c>();
List<Approval_history__c> AH = new List<Approval_history__c>([Select Id, RecordType.DeveloperName, current_approver__c, type__c, status__c, credit_package__c,actual_approver__c,preliminary_approval__c FROM Approval_history__c WHERE Id IN: Trigger.newMap.keySet()]);
For(Approval_history__c A:AH){
CpId.add(A.credit_Package__c);
Map<Id, Underwriting__c> Und = new Map<Id,Underwriting__c>([SELECT Id, Preliminary_Credit_Approval__c, Preliminary_Credit_Approval_Date__c, Final_Initial_Approver__c, Lock_Credit_Package__c,underwriting_stage__c,final_approver__c,final_decision_date__c, RecordType.DeveloperName,Initial_Credit_Approval__c,Initial_Credit_Approval_Date__c,final_preliminary_approver__c from Underwriting__c WHERE Id IN:CpId]);
Underwriting__c u = und.get(A.credit_package__c);
If(Trigger.IsInsert && (U.RecordType.DeveloperName =='MT_Credit_Package' || U.RecordType.DeveloperName == 'Commercial_Direct' || U.RecordType.DeveloperName == 'Credit_Package') && U.underwriting_stage__c =='Underwriting Review'){
A.type__c = 'Initial Loan Approval';
u.underwriting_stage__c = 'Pending Initial Approval';
UpdatedCP.add(u);
Update A;
}
If(Trigger.IsInsert && (U.RecordType.DeveloperName =='MT_Credit_Package' || U.RecordType.DeveloperName == 'Commercial_Direct' || U.RecordType.DeveloperName == 'Credit_Package') && U.underwriting_stage__c =='Borrower Accepted'){
A.type__c = 'Preliminary Loan Approval';
u.underwriting_stage__c = 'Pending Preliminary Approval';
UpdatedCP.add(u);
Update A;
}
If(Trigger.IsInsert && (U.RecordType.DeveloperName =='MT_Credit_Package' || U.RecordType.DeveloperName == 'Commercial_Direct' || U.RecordType.DeveloperName == 'Credit_Package') && U.underwriting_stage__c =='In Process'){
A.type__c = 'Final Loan Approval';
u.underwriting_stage__c = 'Pending Final Approval';
UpdatedCP.add(u);
Update A;
}
If(Trigger.IsInsert && U.underwriting_stage__c =='Pending Initial Approval'){
A.type__c = 'Initial Loan Approval';
Update A;}
If(Trigger.IsInsert && U.underwriting_stage__c =='Pending Preliminary Approval'){
A.type__c = 'Preliminary Loan Approval';
Update A;
}
If(Trigger.IsInsert && U.underwriting_stage__c =='Pending Final Approval'){
A.type__c = 'Final Loan Approval';
Update A;
}
If(Trigger.IsInsert && (((U.RecordType.DeveloperName =='Credit_Package' || U.RecordType.DeveloperName == 'Commercial_Direct' ||
U.RecordType.DeveloperName == 'MT_Credit_Package') && U.underwriting_stage__c =='In Process') ||
(U.RecordType.DeveloperName !='MT_Credit_Package' && U.RecordType.DeveloperName != 'Credit_Package' &&
U.RecordType.DeveloperName != 'Commercial_Direct' && U.underwriting_stage__c =='Underwriting Review'))){
u.underwriting_stage__c = 'Pending Final Approval';
A.type__c = 'Final Loan Approval';
//u.Committee_Type__c = a.Committee_Type__c;
UpdatedCP.add(u);
Update A;
}
//the isInsert conditions below will not execute as the below types are not set implicitly. They are set on update, not insert.
If(trigger.IsInsert && A.Status__c == 'Final Approved' && A.type__c == 'Initial Loan Approval'){
U.underwriting_stage__c = 'Initial Credit Approved';
U.Initial_Credit_Approval__c = TRUE;
U.Initial_Credit_Approval_Date__c = date.today();
U.Final_Initial_Approver__c = a.actual_approver__c;
UpdatedCP.add(u);
}
If(trigger.IsInsert && A.Status__c == 'Final Approved' && A.type__c == 'Preliminary Loan Approval'){
U.underwriting_stage__c = 'In Process';
U.Preliminary_Credit_Approval__c = TRUE;
U.Preliminary_Credit_Approval_Date__c = date.today();
U.Final_Preliminary_Approver__c = a.actual_approver__c;
UpdatedCP.add(u);
}
if(trigger.IsInsert && A.Status__c == 'Final Approved' && A.type__c == 'Final Loan Approval'){
U.underwriting_stage__c = 'Final Credit Approved';
U.final_approval__c = TRUE;
U.final_decision_date__c = date.today();
U.final_approver__c = a.actual_approver__c;
UpdatedCP.add(u);
}
//the isInsert conditions above will not execute as the below types are not set implicitly. They are set on update, not insert.
If(trigger.IsUpdate && A.Status__c == 'Final Approved' && trigger.oldmap.get(A.Id).Status__c =='Pending' && A.type__c == 'Initial Loan Approval'){
System.debug('89');
U.underwriting_stage__c = 'Initial Credit Approved';
U.Initial_Credit_Approval__c = TRUE;
U.Initial_Credit_Approval_Date__c = date.today();
U.Final_Initial_Approver__c = a.actual_approver__c;
UpdatedCP.add(u);
}
If(trigger.IsUpdate && A.Status__c == 'Rejected' && trigger.oldmap.get(A.Id).Status__c =='Pending'&& A.type__c == 'Initial Loan Approval'){
U.underwriting_stage__c = 'Underwriting Review';
UpdatedCP.add(u);
}
If(trigger.IsUpdate && A.Status__c == 'Final Approved' && trigger.oldmap.get(A.Id).Status__c =='Pending'&& A.type__c == 'Preliminary Loan Approval'){
U.underwriting_stage__c = 'In Process';
U.Preliminary_Credit_Approval__c = TRUE;
U.Preliminary_Credit_Approval_Date__c = date.today();
U.final_preliminary_approver__c = a.actual_approver__c;
UpdatedCP.add(u);
}
If(trigger.IsUpdate && A.Status__c == 'Rejected' && trigger.oldmap.get(A.Id).Status__c =='Pending'&& A.type__c == 'Preliminary Loan Approval'){
U.underwriting_stage__c = 'Borrower Accepted';
UpdatedCP.add(u);
}
If(trigger.IsUpdate && A.Status__c == 'Final Approved' && trigger.oldmap.get(A.Id).Status__c =='Pending' && A.type__c == 'Final Loan Approval'){
u.underwriting_stage__c = 'Final Credit Approved';
u.final_approval__c = TRUE;
u.final_decision_date__c = date.today();
u.final_approver__c = a.actual_approver__c;
UpdatedCP.add(u);
}
If(trigger.IsUpdate && A.Status__c == 'Rejected' && trigger.oldmap.get(A.Id).Status__c =='Pending'&& A.type__c == 'Final Loan Approval' && U.RecordType.DeveloperName !='MT_Credit_Package' && U.RecordType.DeveloperName != 'Credit_Package'){
U.underwriting_stage__c = 'Underwriting Review';
UpdatedCP.add(u);
}
If(trigger.IsUpdate && A.Status__c == 'Rejected' && trigger.oldmap.get(A.Id).Status__c =='Pending'&& A.type__c == 'Final Loan Approval' && (U.RecordType.DeveloperName =='MT_Credit_Package' || U.RecordType.DeveloperName == 'Credit_Package')){
U.underwriting_stage__c = 'In Process';
UpdatedCP.add(u);
}
if(trigger.IsUpdate && a.RecordType.DeveloperName == 'Credit_Committee'){
if(u.Underwriting_Stage__c == 'In Process'){
u.Final_Preliminary_Approver__c = a.Actual_Approver__c;
u.Committee_Type__c = a.Current_Approver__c;
}else if(u.Underwriting_Stage__c == 'Final Credit Approved'){
u.Final_Approver__c = a.Actual_Approver__c;
u.Committee_Type__c = a.Current_Approver__c;
}else{
u.Final_Initial_Approver__c = a.Actual_Approver__c;
u.Committee_Type__c = a.Current_Approver__c;
}
UpdatedCP.add(u);
}
If(UpdatedCp.size()>0){
update updatedcp;}
}
}
I took a look at your code and it seems like you are writing a query within a for loop.This is generally bad practice as it tends to cause errors like these. The best way to prevent these errors is to avoid writing queries within loops and try to bulkify your code. Try this out instead
Made some slight modifications to the above code.
Hope thsi helps!
AM