I have the following conditions which closed the milestones based on the Status=Closed, Assume I have the 3 milestones which I wants to closed. If 100 agents starts working on it simultaneous, then it look to me that it wont worked. The steps no. 18, 20 and 22 will give SOQL 101 error
Could you please help me to bulkify the below code ?
String mileStoneName;
if(cs.SubCategory__c == 'Auth'){
if(cs.Status == XXXX && (cs.SubStatus__c == XXXX || cs.SubStatus__c == XXXX)){
caseIds.add(cs.Id);
if(cs.isAuthRequest == 'Yes'){
mileStoneName = 'Milestone1';
}else{
mileStoneName = 'Milestone2';
}
}
else if(cs.Status == YYYY && cs.SubStatus__c == MMMM){
caseIds.add(cs.Id);
mileStoneName = 'Milestone3';
}
else if(cs.Status == 'Closed'){
caseIds.add(cs.Id);
MilestoneUtils.completeMilestone(caseIds, 'Milestone3', System.now()); // line-18
if(cs.isAuthRequest == 'Yes'){
MilestoneUtils.completeMilestone(caseIds, 'Milestone1', System.now()); // line-20
}else{
MilestoneUtils.completeMilestone(caseIds, 'Milestone2', System.now()); // line-22
}
}
}
if(!caseIds.isEmpty() && !String.isEmpty(milestoneName)){
MilestoneUtils.completeMilestone(caseIds, milestoneName, System.now());
}
The below code to complete the milestones
public static void completeMilestone(Set<Id> caseIds, String milestoneName, DateTime complDate){
List<CaseMilestone> cmsToUpdate = [SELECT Id,completionDate
FROM CaseMilestone
WHERE caseId in :caseIds
AND MilestoneType.Name = :milestoneName
AND completionDate = NULL LIMIT 1];
System.debug('Case Milestone :: '+cmsToUpdate.size()+', Case Milestone Id :: '+cmsToUpdate);
if(cmsToUpdate.isEmpty() == false){
for (CaseMilestone cm : cmsToUpdate){
cm.completionDate = complDate;
}
update cmsToUpdate;
}
}
MilestoneUtils.completeMilestone
in a loop, which must be avoided. Can you post your updated code, specially how it is looping. How you are gettingcs
value in the logic – Santanu Boral Aug 13 '17 at 16:08