You need to sign in to do that
Don't have an account?

Help Please - System.LimitException: Too many SOQL queries: 101
Hi ,
I am getting an error when trying to deploy a class to production.
The error is on line 10 of the trigger
Please find the trigger posted here.
This is the Trigger
trigger OTC_TrgPopulateKeyContactDetails on Contract (before insert,before update) {
List<Id> accountIds = new List<Id>();
List<Id> contactIds = new List<Id>();
for(Contract cont : Trigger.New){
accountIds.add(cont.AccountId);
if(cont.Key_Contact__c != null)
contactIds.add(cont.Key_Contact__c);
}
Map<Id,Account> accMap = new Map<Id,Account>([Select Id,Name,PersonEmail,Passport__pc,OTC_E_ID_Upload__pc,PersonMobilePhone,Phone,IsPersonAccount,FirstName,LastName,(Select Id,Email,MobilePhone,FirstName,LastName,Phone,Passport__c,OTC_E_ID_Upload__c from Contacts where OTC_Key_Contact__c = true) from Account where Id = :accountIds]);
Map<Id,Contact> conMap = new Map<Id,Contact>();
if(contactIds.size() > 0) conMap = new Map<Id,Contact>([Select Id,Email,MobilePhone,FirstName,LastName,Phone,Passport__c,OTC_E_ID_Upload__c from Contact where Id = :contactIds]);
for(Contract cont : Trigger.New){
if(cont.Key_Contact__c != null && conMap.containsKey(cont.Key_Contact__c)){
Contact con = conMap.get(cont.Key_Contact__c);
cont.KeyContact_Email_id__c = con.Email;
cont.KeyContact_MobileNumber__c = con.MobilePhone;
cont.OTC_Key_Contact_Name__c = con.FirstName == null ? con.LastName : con.FirstName+' '+con.LastName;
cont.KeyContact_Office__c = con.Phone;
cont.E_ID_only_for_Jobs__c = con.OTC_E_ID_Upload__c;
cont.OTC_Passport_Copy_Person_Signing_Cheque__c = con.Passport__c;
} else{
if(accMap.get(cont.AccountId).IsPersonAccount == true){
cont.KeyContact_Email_id__c = accMap.get(cont.AccountId).PersonEmail;
cont.KeyContact_MobileNumber__c = accMap.get(cont.AccountId).PersonMobilePhone;
cont.OTC_Key_Contact_Name__c = accMap.get(cont.AccountId).Name;
cont.KeyContact_Office__c = accMap.get(cont.AccountId).Phone;
cont.OTC_Passport_Copy_Person_Signing_Cheque__c = accMap.get(cont.AccountId).Passport__pc;
cont.E_ID_only_for_Jobs__c = accMap.get(cont.AccountId).OTC_E_ID_Upload__pc;
}else if(accMap.get(cont.AccountId).Contacts.size()>0){
cont.KeyContact_Email_id__c = accMap.get(cont.AccountId).Contacts[0].Email;
cont.KeyContact_MobileNumber__c = accMap.get(cont.AccountId).Contacts[0].MobilePhone;
cont.OTC_Key_Contact_Name__c = accMap.get(cont.AccountId).Contacts[0].FirstName == null ? accMap.get(cont.AccountId).Contacts[0].LastName : accMap.get(cont.AccountId).Contacts[0].FirstName+' '+accMap.get(cont.AccountId).Contacts[0].LastName;
cont.KeyContact_Office__c = accMap.get(cont.AccountId).Contacts[0].Phone;
cont.E_ID_only_for_Jobs__c = accMap.get(cont.AccountId).Contacts[0].OTC_E_ID_Upload__c;
cont.OTC_Passport_Copy_Person_Signing_Cheque__c = accMap.get(cont.AccountId).Contacts[0].Passport__c;
}
}
}
}
I have posted the class as a reply
Thanks
I am getting an error when trying to deploy a class to production.
The error is on line 10 of the trigger
Please find the trigger posted here.
This is the Trigger
trigger OTC_TrgPopulateKeyContactDetails on Contract (before insert,before update) {
List<Id> accountIds = new List<Id>();
List<Id> contactIds = new List<Id>();
for(Contract cont : Trigger.New){
accountIds.add(cont.AccountId);
if(cont.Key_Contact__c != null)
contactIds.add(cont.Key_Contact__c);
}
Map<Id,Account> accMap = new Map<Id,Account>([Select Id,Name,PersonEmail,Passport__pc,OTC_E_ID_Upload__pc,PersonMobilePhone,Phone,IsPersonAccount,FirstName,LastName,(Select Id,Email,MobilePhone,FirstName,LastName,Phone,Passport__c,OTC_E_ID_Upload__c from Contacts where OTC_Key_Contact__c = true) from Account where Id = :accountIds]);
Map<Id,Contact> conMap = new Map<Id,Contact>();
if(contactIds.size() > 0) conMap = new Map<Id,Contact>([Select Id,Email,MobilePhone,FirstName,LastName,Phone,Passport__c,OTC_E_ID_Upload__c from Contact where Id = :contactIds]);
for(Contract cont : Trigger.New){
if(cont.Key_Contact__c != null && conMap.containsKey(cont.Key_Contact__c)){
Contact con = conMap.get(cont.Key_Contact__c);
cont.KeyContact_Email_id__c = con.Email;
cont.KeyContact_MobileNumber__c = con.MobilePhone;
cont.OTC_Key_Contact_Name__c = con.FirstName == null ? con.LastName : con.FirstName+' '+con.LastName;
cont.KeyContact_Office__c = con.Phone;
cont.E_ID_only_for_Jobs__c = con.OTC_E_ID_Upload__c;
cont.OTC_Passport_Copy_Person_Signing_Cheque__c = con.Passport__c;
} else{
if(accMap.get(cont.AccountId).IsPersonAccount == true){
cont.KeyContact_Email_id__c = accMap.get(cont.AccountId).PersonEmail;
cont.KeyContact_MobileNumber__c = accMap.get(cont.AccountId).PersonMobilePhone;
cont.OTC_Key_Contact_Name__c = accMap.get(cont.AccountId).Name;
cont.KeyContact_Office__c = accMap.get(cont.AccountId).Phone;
cont.OTC_Passport_Copy_Person_Signing_Cheque__c = accMap.get(cont.AccountId).Passport__pc;
cont.E_ID_only_for_Jobs__c = accMap.get(cont.AccountId).OTC_E_ID_Upload__pc;
}else if(accMap.get(cont.AccountId).Contacts.size()>0){
cont.KeyContact_Email_id__c = accMap.get(cont.AccountId).Contacts[0].Email;
cont.KeyContact_MobileNumber__c = accMap.get(cont.AccountId).Contacts[0].MobilePhone;
cont.OTC_Key_Contact_Name__c = accMap.get(cont.AccountId).Contacts[0].FirstName == null ? accMap.get(cont.AccountId).Contacts[0].LastName : accMap.get(cont.AccountId).Contacts[0].FirstName+' '+accMap.get(cont.AccountId).Contacts[0].LastName;
cont.KeyContact_Office__c = accMap.get(cont.AccountId).Contacts[0].Phone;
cont.E_ID_only_for_Jobs__c = accMap.get(cont.AccountId).Contacts[0].OTC_E_ID_Upload__c;
cont.OTC_Passport_Copy_Person_Signing_Cheque__c = accMap.get(cont.AccountId).Contacts[0].Passport__c;
}
}
}
}
I have posted the class as a reply
Thanks
Try to call query insert and update correctly inside test.starttest and test.stoptest
Because test.starttest and test.stoptest method will avoid governor limit exception in test class..
Othervice split the test class into multiple test methods....
All Answers
Try to call query insert and update correctly inside test.starttest and test.stoptest
Because test.starttest and test.stoptest method will avoid governor limit exception in test class..
Othervice split the test class into multiple test methods....