I have the following trigger:
trigger CaseMainTrigger_tgr on Case (before update, after insert, after update, after delete)
{
if(Trigger.isBefore){
if(Trigger.isUpdate){
CaseMethods_cls.manageUpdatedCases(Trigger.oldMap, Trigger.newMap);
CaseMethods_cls.createCaseComments(Trigger.oldMap, Trigger.newMap);
CaseMethods_cls.updateDate(Trigger.oldMap, Trigger.newMap);
Map<Id,Schema.Case> mapOldCases = Trigger.oldMap;
Map<Id,Schema.Case> mapNewCases = Trigger.newMap;
for(Id iterator:mapOldCases.keySet()){
if(mapOldCases.get(iterator).ComplainType__c == 'Reportes' && (mapOldCases.get(iterator).OtherComplainceStatus__c != mapNewCases.get(iterator).OtherComplainceStatus__c)){
SMS smsAsync = new SMS();
smsAsync.old = Trigger.oldMap;
smsAsync.news = Trigger.newMap;
System.enqueueJob(smsAsync);
} else {
break;
}
}
}
}
}
And a process like this:
public class SMS implements Queueable, Database.AllowsCallouts{
public Map<Id,Schema.Case> old {get;set;}
public Map<Id,Schema.Case> news {get;set;}
public void execute(QueueableContext context) {
if(!Test.isRunningTest()){
ValidateActivate.sendSMSNotification_Queja(old,news);
}
}
}
I understand that the error is due to "too many jobs in queue" and that it is a transaction error. The problem is how can I correct my code to skip or replace the process.