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

How to set query outside for loop for following query
This is apex trigger. I had error as I reached governor's limit. Somebody told me to get query outside for loop. How to do that? PLease help
membersToAdd.put(c.Id, new CaseTeamMember(ParentId = c.Id, MemberId = UserInfo.getUserId()));
}
if (!membersToAdd.isEmpty()) {
try {
for (CaseTeamMember ctm : membersToAdd.values()) {
ctm.TeamRoleId = caseTeamRole.Id;
}
for (CaseTeamMember ctm : [SELECT Id, MemberId, ParentId
FROM CaseTeamMember
WHERE ParentId IN :membersToAdd.keySet()
AND MemberId = :UserInfo.getUserId()
ORDER BY ParentId])
{
if (membersToAdd.containsKey(ctm.ParentId)) {
membersToAdd.remove(ctm.ParentId);
}
}
if (!membersToAdd.isEmpty()) {
insert membersToAdd.values();
}
} catch (System.QueryException qe) {}
create alist out side the for loop and collect the data comming from this query in that and make it as follows
List<sObject Name> listName = List<sObject Name> ();
listName = [SELECT Id, MemberId, ParentId
FROM CaseTeamMember
WHERE ParentId IN :membersToAdd.keySet()
AND MemberId = :UserInfo.getUserId()
ORDER BY ParentId];
for (CaseTeamMember ctm : listName)
{
}
if this answers your question make this as solution
Sorry I am not sure but it is giving me error: unexpected token: 'List' at line 20 column 34
if (!membersToAdd.isEmpty()) {
try {
for (CaseTeamMember ctm : membersToAdd.values()) {
ctm.TeamRoleId = caseTeamRole.Id;
}
List<Case> CasetoUpdate = List<Case> ();
CasetoUpdate = [SELECT Id, MemberId, ParentId
FROM CaseTeamMember
WHERE ParentId IN :membersToAdd.keySet()
AND MemberId = :UserInfo.getUserId()
ORDER BY ParentId];
for(CaseTeamMember ctm:CasetoUpdate)
{
if (membersToAdd.containsKey(ctm.ParentId)) {
membersToAdd.remove(ctm.ParentId);
}
}
if (!membersToAdd.isEmpty()) {
insert membersToAdd.values();
}
} catch (System.QueryException qe) {}
}
}
}
The syntax is incorrect. Add the "new" keyword. It should be:
List<Case> CasetoUpdate = new List<Case> ();
What governor limit did you hit ? your soql query is not in your for loop ..I don't think you're fixing anything with current approach.