AsyncApexJob vs CronTrigger

AsyncApexJob vs CronTrigger

Пытаюсь завершить Scheduled Job программно.

Вроде раньше работало что найдя AsyncApexJob можно было сделать System.abortJob(jobId) и задача остановится.

Сейчас получил такую ошибку

You can't abort scheduled Apex jobs by calling System.abortJob with an AsyncApexJob ID. Call System.abortJob with the parent CronTrigger ID.

Чет с ходу не нагугливается как связать между собой AsyncApexJob и CronTrigger и достать второй из первого.

У кого есть решение под рукой, буду признателен.

Да, есть косяк конечно в SF - нет прямой связи между AsyncApexJob и CronTrigger.
Зная ApexClass name можно найти AsyncApexJob, а вот чтобы остановить Scheduler Job нужен CronTrigger.
Можно конечно попытаться вычислить косвенную связь по других признакам, но я так глубоко мне копал (не понадобилось).

Запуская scheduler программно просто сохраняем Id которое нам вернулось или работаем через уникальное имя.

Запуск

Integer schedulerIntervalInHours = 1;

Integer h = DateTime.now().hourGmt() < 23 ? DateTime.now().hour()+1 : 0;
String CRON_EXP = '0 0 '+String.valueOf(h)+'/'+SchedulerIntervalInHours+' * * ?';
ServiceScheduler sch = new ServiceScheduler();
Id cronId = System.schedule('SomeSuperUniqueName', CRON_EXP, sch);

Остановка

List<CronTrigger> availableCrons = [SELECT Id FROM CronTrigger WHERE CronJobDetail.Name = 'SomeSuperUniqueName'];

for (CronTrigger cron : availableCrons)
System.abortJob(cron.Id);
}

Interesting information? Help us, post link to social media..