我在尝试加载 8,000 条记录时遇到数据加载器问题,该记录触发以下触发器,给我一个错误 System.LimitException: Too many SOQL queries: 101 because of this issue ..
trigger BeforeTaskTrigger on Task (after insert, after update) {
for(Task s : Trigger.new)
{
if ((s.Type == 'QRC')&&(s.Status=='Completed')) {
BusinessLogic.processUpdateInsertTask(s);
}
}
}
public static void processUpdateInsertTask (Task s){
List<Task> itemList = [select Id, Type, Status, ActivityDate, OwnerId from Task where accountId = :s.AccountId and status = 'Completed' and Type ='QRC' Order By ActivityDate Desc ];
List<Event> eventList = [select Id, Type, Status__c, ActivityDate, OwnerId, endDateTime from Event where accountId = :s.AccountId and Status__c = 'Completed' and Type ='QRC' Order By endDateTime Desc ];
List<Account> accountData = [Select Id, Last_QRC_Date__c, Last_QRC_FA__c from Account where Id = :s.AccountId];
if ((accountData!=null)&&(accountData.size()>0)){
Date eventDate;
if (eventList != null && eventList.size()>0){
eventDate = date.newinstance(eventList.get(0).endDateTime.year(), eventList.get(0).endDateTime.month(), eventList.get(0).endDateTime.day());
}
if ((itemList != null)&&(itemlist.size()>0)&&(eventList!=null)&&(eventList.size()>0)){
if (itemList.get(0).ActivityDate >= eventDate){
accountData.get(0).Last_QRC_Date__c = itemList.get(0).ActivityDate;
accountData.get(0).Last_QRC_FA__c = itemList.get(0).OwnerId;
update accountData;
}
else {
accountData.get(0).Last_QRC_Date__c = eventDate;
accountData.get(0).Last_QRC_FA__c = eventList.get(0).OwnerId;
update accountData;
}
}
else if ((itemList != null)&&(itemlist.size()>0)){
processTaskSpecialCases(accountData, itemList);
}
else if ((eventList!=null)&&(eventList.size()>0)){
processEventSpecialCases(accountData, eventDate, eventList);
}
else {
processDeletionCases (accountData);
}
}
}
如果您能帮助我改写 SOQL 查询以提高效率,我会很高兴。