Коллеги, требуется помощь!
Программирую регулярное выполнение бизнес-процесса через планировщик таким образом:
первый элемент бизнес-процесса проверяет наличие триггера, и в случае отсутствия - создаёт триггер в БД. Т.е. при первом ручном запуске БП - он формирует себе "расписание" последующих запусков.
Пробовал использовать несколько способов, но все они не работают, в Библиотеке БП процесс присутствует, триггеры в БД заводятся. Но последующих запусков не происходит.
В чём может быть причина?
Доп. инфоормация:
Версия BPM 7.7 Bank Customer Journey. БД Oracle.
Триггеры находятся в состоянии WAITNG.
Пользователь для выполнения системных операций (SystemUser) Supervisor.
IIS перезапускал. Application Pool находится в режиме Универсальный.
Способы, которые я пробовал использовать:
CronTriggerImpl:
var cronExp = "0 0/5 * ? * * *";
if (!AppScheduler.DoesJobExist(jobName, jobGroup))
{
var job = AppScheduler.CreateProcessJob(jobName, jobGroup, procName, userConnection.Workspace.Name, userConnection.CurrentUser.Name);
var trigger = new CronTriggerImpl(jobName + "Trigger", jobGroup, cronExp);
AppScheduler.Instance.ScheduleJob(job, trigger);
}
CronTriggerImpl:
var cronExp = "0 0/5 * ? * * *";
if (!AppScheduler.DoesJobExist(jobName, jobGroup))
{
var job = AppScheduler.CreateProcessJob(jobName, jobGroup, procName, userConnection.Workspace.Name, userConnection.CurrentUser.Name);
var trigger = new CronTriggerImpl(jobName + "Trigger", jobGroup, cronExp);
trigger.MisfireInstruction = MisfireInstruction.CronTrigger.FireOnceNow;
trigger.TimeZone = TimeZoneInfo.Utc;
AppScheduler.Instance.ScheduleJob(job, trigger);
}
ScheduleMinutelyProcessJob:
int periodInMinutes = 3;
if (!AppScheduler.DoesJobExist(jobName, jobGroup))
{
AppScheduler.ScheduleMinutelyProcessJob(jobName, jobGroup, procName,
userConnection.Workspace.Name, userConnection.CurrentUser.Name, periodInMinutes);
}
SimpleTriggerImpl:
int startOffset = 4;
if (AppScheduler.DoesJobExist(jobName, jobGroup))
{
AppScheduler.RemoveJob(jobName, jobGroup);
}
var job = AppScheduler.CreateProcessJob(jobName, jobGroup, procName, userConnection.Workspace.Name, userConnection.CurrentUser.Name);
var trigger = new SimpleTriggerImpl(jobName + "Trigger", jobGroup, DateTime.UtcNow.AddMinutes(startOffset));
AppScheduler.Instance.ScheduleJob(job, trigger);
SimpleTriggerImpl от системного пользователя:
int startOffset = 4;
if (AppScheduler.DoesJobExist(jobName, jobGroup))
{
AppScheduler.RemoveJob(jobName, jobGroup);
}
var job = AppScheduler.CreateProcessJob(jobName, jobGroup, procName, userConnection.Workspace.Name, userConnection.CurrentUser.Name, null, true);
var trigger = new SimpleTriggerImpl(jobName + "Trigger", jobGroup, DateTime.UtcNow.AddMinutes(startOffset));
AppScheduler.Instance.ScheduleJob(job, trigger);
При использовании всех вариантов - триггеры создаются в БД, но повторно не срабатывают. Куда копать?