Товарищи, поделитесь информацией.
Как можно запусить scheduled job динамически используя имя класса в виде строки
Пробую так, но что-то не сильно даже сохраняется
Type t = Type.forName(className);
System.schedule('Scheduled Job 1', '0 0 * * * ?', t.newInstance());
Да еще вопрос!!!
Как получить название класса который запущен как Scheduled Job?
Соклю CronTriger и CronJobDetail
Но что-то там ничего не нахожу!
Я про третий параметр schedulableClass
вот тут
schedule(jobName, cronExpression, schedulableClass)
СМЫСЛ в том что мне надо чтобы
schedulableClass был запущен только один! всегда один!
И при попытке запустить второй (особенно вручную) предыдущий запущенный job убивался.
Если смотреть по jobName - тут проблема - вручную пользователь может запустить с любым именем и я не смогу отловить запущенный job
Храни jobId и убивай его, если необходимо.
Да вариант хороший, пока пользователи не начнут сами вручную запускать scheduled jobs
Может тебе поможет System.isScheduled()
"Returns true if the currently executing code is invoked by a scheduled Apex job; false otherwise."
чет пока не улавливаю чем мне это поможет найти запущенный job для определенного класса.
чет пока не улавливаю чем мне это поможет найти запущенный job для определенного класса.
Проверку в самом джобе сделать и не запускать его, если не требуется.
Type t = Type.forName(className);
System.schedule('Scheduled Job 1', '0 0 * * * ?', t.newInstance());
По сути код правильный
Хм, все равно не догоняю. Ну узнаю я внутри job что я запущен внутри job. Чем это мне поможет найти другие запущенные jobs?
Хотя если принудительно из job сохранять его Id взятое из контекста куда-нибудь в базу то тогда это покроет случай с ручным запуском и будет работать
Пользуйся:
SELECT Id, Status, ApexClass.Name
FROM AsyncApexJob
О!
нашел еще такую Штуку!!!
AsyncApexJob myJob = [SELECT Id, Status, ApexClass.Name, ApexClassID, JobType FROM AsyncApexJob];
AsyncApexJob:{Id=70728000017awzDAAQ, Status=Queued, ApexClassId=01p28000006retiAAA, JobType=ScheduledApex}
Одновременно ![]()
Блин!
А вот теперь самая подлянка!
Я не могу связать CronTrigger с AsyncApexJob !
Чтобы было совсем красиво
Теперь с AsyncApexJob я могу определить факт что schedulableClass запушен,
НО я не могу его потушить через
System.abortJob(cronid);
потому что я не могу получить cronid из AsyncApexJob
Или я что-то упускаю?
Кстати, тоже многое упрощает! :)))
System.AsyncException: The Apex job named "Email Scheduler" is already scheduled for execution.
Не знал :)