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

Using Batch apex still getting Too many SOQL Queries - 50001.
global with sharing class Populate_Corp_List_Assignments_Batch implements Database.Batchable<sObject>{
global String Query;
public List<Corporate_Account_List_Assignment__c> calist { set; get; }
//given a AccountId and List<AccountTeamMember >, it returns the record having AccountId=AccoundId
public List<AccountTeamMember> findAccountTeamMember(Id accountId, Map<Id,List<AccountTeamMember>> acc_tmListMap, String teamMemberRole){
if(acc_tmListMap== null || acc_tmListMap.size() == 0 || accountId==null ){
return null;
}
integer count = 0;
List<AccountTeamMember> atmList = acc_tmListMap.get(accountId);
List<AccountTeamMember> atmRetList = new List<AccountTeamMember>();
if(atmList != null){
for(AccountTeamMember am: atmList){
if(am.TeamMemberRole == teamMemberRole){
atmRetList.add(am);
count++;
}
}
}
if(count > 0){
return atmRetList;
}else{
return null;
}
}
public Account findAccount(Id account_name,List<Account> accList ){
if(accList == null || accList.size() == 0 || account_name==null ){
return null;
}
for(Account am: accList){
if(am.Id == account_name){
return am;
}
}
return null;
}
global Populate_Corp_List_Assignments_Batch(String q){
Query=q;
}
global Database.QueryLocator start(Database.BatchableContext BC){
return Database.getQueryLocator(query);
}
global void execute(Database.BatchableContext BC, List<sObject> scope){
//calist = [SELECT Account_Name__c,Corporate_Partnership_Director_1__c,Corporate_Partnership_Director_2__c,Corporate_Partnership_Director_3__c,Corporate_Partnership_Director_4__c,Corporate_Partnership_Director_5__c,Marketing_Solutions_1__c, Marketing_Solutions_2__c, Marketing_Solutions_3__c, Media_Services_1__c, Media_Services_2__c, Media_Services_3__c, Digital_Manager_1__c,Digital_Manager_2__c,Digital_Manager_3__c,Digital_Manager_4__c,Digital_Manager_5__c, Id,Name,Ultimate_Parent_Name__c FROM Corporate_Account_List_Assignment__c];
calist = [SELECT Account_Name__c,Corporate_Partnership_Director_1__c,Corporate_Partnership_Director_2__c,Corporate_Partnership_Director_3__c,Corporate_Partnership_Director_4__c,Corporate_Partnership_Director_5__c,Marketing_Solutions_1__c, Marketing_Solutions_2__c, Marketing_Solutions_3__c, Media_Services_1__c, Media_Services_2__c, Media_Services_3__c,Digital_Manager_1__c,Digital_Manager_2__c,Digital_Manager_3__c,Digital_Manager_4__c,Digital_Manager_5__c, Id,Name,Ultimate_Parent_Name__c FROM Corporate_Account_List_Assignment__c];
//prepare a map of ids and account_name__c
Map<Id,Id> ca_acc_map = new Map<Id,Id>();
for(Corporate_Account_List_Assignment__c ca : calist){
ca_acc_map.put(ca.Id,ca.Account_Name__c);
}
Map<Id,Account> ac2 = new Map<Id,Account>([SELECT Name,ParentId,Id FROM Account where Id in :ca_acc_map.values()]);
List<AccountTeamMember> atmcpd2 =[ SELECT Id,TeamMemberRole,UserId, IsDeleted,AccountId FROM AccountTeamMember WHERE AccountId in :ac2.keyset() AND Isdeleted = FALSE ];
Map<Id,List<AccountTeamMember>> acc_tmListMap = new Map<Id,List<AccountTeamMember>>();
for(AccountTeamMember atm: atmcpd2){
List<AccountTeamMember> atmlist;
if(acc_tmListMap.get(atm.AccountId) == null ){
atmlist = new List<AccountTeamMember>();
}else{
atmlist = acc_tmListMap.get(atm.AccountId);
}
atmList.add(atm);
acc_tmListMap.put(atm.AccountId,atmList);
}
for (Corporate_Account_List_Assignment__c ca : calist)
{
ca.Corporate_Partnership_Director_1__c = null;
ca.Corporate_Partnership_Director_2__c = null;
ca.Corporate_Partnership_Director_3__c = null;
ca.Corporate_Partnership_Director_4__c = null;
ca.Corporate_Partnership_Director_5__c = null;
ca.Digital_Manager_1__c = null;
ca.Digital_Manager_2__c = null;
ca.Digital_Manager_3__c = null;
ca.Digital_Manager_4__c = null;
ca.Digital_Manager_5__c = null;
ca.Marketing_Solutions_1__c = null;
ca.Marketing_Solutions_2__c = null;
ca.Marketing_Solutions_3__c = null;
ca.Media_Services_1__c = null;
ca.Media_Services_2__c = null;
ca.Media_Services_3__c = null;
System.debug('******ID********'+ca.Id);
//find atmcpd
Account accX = ac2.get(ca.Account_Name__c);
List<AccountTeamMember> atmcpd = findAccountTeamMember(accX.Id,acc_tmListMap,'Corporate Partnership Director' );
List<AccountTeamMember> atmMS = findAccountTeamMember(accX.Id,acc_tmListMap,'IMS');
List<AccountTeamMember> atmMDS = findAccountTeamMember(accX.Id,acc_tmListMap,'Media Services');
List<AccountTeamMember> atmDM = findAccountTeamMember(accX.Id,acc_tmListMap,'Digital Manager');
if(atmcpd!= null && atmcpd.size() > 0 )
{
if(atmcpd.size() > 0)
ca.Corporate_Partnership_Director_1__c = atmcpd.get(0).UserId;
if(atmcpd.size()>1)
ca.Corporate_Partnership_Director_2__c = atmcpd.get(1).UserId;
if(atmcpd.size()>2)
ca.Corporate_Partnership_Director_3__c = atmcpd.get(2).UserId;
if(atmcpd.size()>3)
ca.Corporate_Partnership_Director_4__c = atmcpd.get(3).UserId;
if(atmcpd.size()>4)
ca.Corporate_Partnership_Director_5__c = atmcpd.get(4).UserId;
}
if(atmms != null && atmms.size() > 0)
{
if(atmms.size() > 0)
ca.Marketing_Solutions_1__c = atmms.get(0).UserId;
if(atmms.size() > 1)
ca.Marketing_Solutions_2__c = atmms.get(1).UserId;
if(atmms.size() > 2)
ca.Marketing_Solutions_3__c = atmms.get(2).UserId;
}
if(atmmds != null && atmmds.size() > 0)
{
if(atmmds.size() > 0)
ca.Media_Services_1__c = atmmds.get(0).UserId;
if(atmmds.size() > 1)
ca.Media_Services_2__c = atmmds.get(1).UserId;
if(atmmds.size() > 2)
ca.Media_Services_3__c = atmmds.get(2).UserId;
}
if(atmdm != null && atmdm.size() > 0)
{
if(atmdm.size() > 0)
ca.Digital_Manager_1__c = atmdm.get(0).UserId;
if(atmdm.size() > 1)
ca.Digital_Manager_2__c = atmdm.get(1).UserId;
if(atmdm.size() > 2)
ca.Digital_Manager_3__c = atmdm.get(2).UserId;
if(atmdm.size() > 3)
ca.Digital_Manager_4__c = atmdm.get(3).UserId;
if(atmdm.size() > 4)
ca.Digital_Manager_5__c = atmdm.get(4).UserId;
}
}
update calist;
}
global void finish(Database.BatchableContext BC)
{
}
}
Please help me on this
There are some basic problems