Добрый день! Нужен триггер, который запускается 1 раз в неделю по вс в 1:00:00. Создан процесс, первым элементом котрого идет элемент скрипт, в котором следующее:

IJobDetail job = AppScheduler.CreateProcessJob("MoveDemoActivitiesJob", "TestCronGroup", "MoveDemoActivitiesProcess",
    "CurrentWorkspace", "CurrentUserName");
ICronTrigger trigger = new CronTriggerImpl("MoveDemoActivitiesTrigger", "TestCronGroup", "0 0 1 ? * SUN *");
AppScheduler.Instance.ScheduleJob(job, trigger);
return true;

далее идет обычный процесс с нужной логикой. Результат:

1. В таблице QRTZ_CRON_TRIGGERS он есть
2. В таблице QRTZ_JOB_DETAILS он есть
3. В таблице QRTZ_TRIGGERS он есть

Регулярное выражение делали на http://www.cronmaker.com
вот оно: 0 0 1 ? * SUN *

Вот только ничего не работает. Почему?

Нравится

3 комментария
string schedulerJobGroupName = "CheckOtkJob";
string jobProcessName = "CheckOtkProcess";
string schedulerJobName = "CheckOtkProcessGroup";
 
DateTime startDate = currentDateTime;
startDate = startDate.AddDays(-currentDateTime.Day + MonthDay);
if(currentDateTime.Day > MonthDay)
    startDate = startDate.AddMonths(1);
 
int startOffset = 60;
currentDateTime = startDate; 
 
AppScheduler.RemoveJob(schedulerJobName, schedulerJobGroupName);
var job = AppScheduler.CreateProcessJob(schedulerJobName, schedulerJobGroupName, jobProcessName, UserConnection.Workspace.Name, UserConnection.CurrentUser.Name);
var trigger = new SimpleTriggerImpl(schedulerJobName + "Trigger", schedulerJobGroupName, startDate.AddSeconds(startOffset));
AppScheduler.Instance.ScheduleJob(job, trigger);
return true;

Я добавляю в расписание свой БП вот таким образом. Только естественно вам нужно расчёт времени организовать согласно вашей логике.
Необходимые библиотеки:
Quartz.Impl
Quartz
Quartz.Impl.Triggers
Terrasoft.Core.Scheduler

Приветствую! Не то :( у вас там SimpleTriggerImpl. Интересно же именно с CronTriggerImpl. Хотя можно и так...

Добавьте следующие строчки кода перед строкой AppScheduler.Instance.ScheduleJob(job, trigger); :

trigger.TimeZone = TimeZoneInfo.Utc;
trigger.MisfireInstruction = MisfireInstruction.CronTrigger.FireOnceNow;

Удалите старый триггер из таблиц, после чего запустите повторное создание триггера.

P.S.
   Возможно кому-то пригодится статья.

Показать все комментарии