You need to sign in to do that
Don't have an account?
Too many SOQL queries : 101
Hi,
I have a Visualforce page and a controller class.
Using "With Sharing" keyword, i am able to retrieve the records from the Custom object just as a Standard Salesforce functionality does.
Now my requirement is to retrieve all the Subordinate Roles for logged in User that should be displayed in drop-down.
There are more than 400 Roles in my org.
My Role stands 5th or 6th from the top.
Even if i use SOQL For loop to get all the Subordinate Roles, i am running in to Too many SOQL queries : 101.
Below is my code.
public method1()
{
//get Subordinate Roles for the CurrentRole
for(UserRole[] roleList : [Select id, name, parentroleid from UserRole ur Where ur.ParentRoleId :UserInfo.getUserRoleId() order by name])
{
for(UserRole role: roleList)
{
currentUserSubDetails.add(role);//Add to list
}
}
//Retrieve Subordinate roles for each Role
for(Integer i=0; i<currentUserSubDetails.size(); i++)
{
getRolesAtDeeperLevel(currentUserSubDetails[i]);
}
}
private void getRolesAtDeeperLevel(UserRole ur)
{
for(UserRole[] roleList : [select id, name, ParentRoleId from UserRole where ParentRoleId = :ur.id order by name])
for(UserRole role: roleList)
{
currentUserSubDetails.add(role);
}
}
Can anyone suggest me a solution?
Regards OnDem
All Answers
}
Hi I have following trigger and test class. However when I try to migrate it to production I get an error saying Too many SOQL Queries:101. I would request any one of you to spare your kind time and help me out , what mistake I am doing here. Being a beginer I am not able to judge what could be the mistake. Any help would really be appreciated.
trigger update_baxter_only_for_uk on Account (after insert,after update)
{
String locale_user=Userinfo.getLocale();
if(locale_user=='en_GB')
{
for( Account a :Trigger.new)
{
List <Contact> cons=[select BXUK_Baxter_Only__c from contact where accountid in :Trigger.new];
Integer i=cons.size();
i=i-1;
System.debug('Debuggggglentgh'+i);
if(i>=0)
{
While(i>=0)
{
cons[i].BXUK_Baxter_Only__c=a.BXUK_Baxter_Only__c;
i=i-1;
}
update cons;
}
}
}
@IsTest private class cls_test_Update_Baxter_Only_Triggers_Classes
{
@IsTest Public static void test_baxter_only_for_uk()
{
List<Contact> l=[select BXUK_Baxter_Only__C,accountid,id from Contact where accountid !=Null limit 1];
List<Account> act=[select BXUK_Baxter_Only__C from Account where id=:l[0].accountid];
act[0].BXUK_Baxter_Only__C=TRUE;
update act;
}
Your problem is that you are querying for contacts in the Account Loop
You should be able do something like this though I think
Also, in your test class, you are assuming a record will exist you can use to test with. I would create the test data as part of the test class to avoid any issues in deployment.
I'm having the same error. I'm doing 2 queries for each updated record.
trigger UpdateReferal on Lead (after update) {
List<Lead_Referral__c> referalsToUpdate = new List<Lead_Referral__c>{};
for (Lead tempLead: Trigger.new){
User o = [select name,Phone,Email from user where id=:tempLead.OwnerId];
List<Lead_Referral__c> reflist=[
Select lr.Lead_Description__c, lr.Lead_owner_Name__c,
lr.Lead_Owner_Phone__c, lr.Lead_Owner_Email__c,
lr.ProductsAndCounts__c
from Lead_Referral__c lr
where lr.Lead__c = :tempLead.Id ];
for(Lead_Referral__c leadRef:reflist ){
leadRef.Lead_Description__c = tempLead.Description;
leadRef.Lead_owner_Name__c = o.Name;
leadRef.Lead_Owner_Phone__c = o.Phone;
leadRef.Lead_Owner_Email__c = o.Email;
leadRef.ProductsAndCounts__c = tempLead.ProductsAndCounts__c;
referalsToUpdate.add(leadRef);
}
}
update referalsToUpdate;
}
Don't do query within a loop c:
I get updated objects in the list Trigger.new. How do I not loop through them?