Здраствуйте,
Как запустить БП процессов по расписанию? Напр, начиная с текущего момента, запускать процесс «ActiveCheck» (название БП) каждые 15 минут в течение часа. Заранее, Спосиба.
С уважением,
Гюнель
Нравится
Гюнель, посмотрите в сторону методов класса AppScheduler. Ознакомится с методами и их параметрами в можно в SDK : http://www.terrasoft.ua/bpmonlinesdk/.
Добавлю, что в SDK в разделе "Статьи" как раз размещена статья "Запуск процессов по расписанию", которая может помочь в решении вашего вопроса.
Здраствуйте,
Она у меня не сработала. Не могли ба подсказать, что я не правильно сделала.
Создала новый БП. На дизайнере процесса добавила следующие настройки:
1. Methods
SheduleMinutelyProcessJob
Сценарий:
int minutleyInterval = 5;
AppScheduler.ScheduleMinutelyProcessJob("Process5",
null, "CurrentSolution", "CurrentUserName", minutleyInterval);
return true;
Тип возвращаемого значения:
bool
2. Usings
Terrasoft.Core.Scheduler
Заранее Спосиба
С уважением,
Гюнель
Здравствуйте.
Начиная с текущего момента, запускать процесс каждые 15 минут в течение часа
[csharp]
// Создаем задание для запуска процесса
JobDetail job = AppScheduler.CreateProcessJob("ReadSomeDataProcessJob", null, "ReadSomeDataProcess",
"TSBpm", "CurrentUserName");
// Создаем простой триггер, соответствующий графику запуска задания
Trigger trigger = new SimpleTrigger("ReadSomeDataProcessTrigger", null, DateTime.UtcNow,
DateTime.UtcNow.AddHours(1), SimpleTrigger.RepeatIndefinitely, TimeSpan.FromMinutes(15));
// Добавляем задание и триггер в планировщик
AppScheduler.Instance.ScheduleJob(job, trigger);
[/csharp]
где, TSBpm - рабочее пространство, в котором запустится БП.
CurrentUserName - имя пользователя, от имени которого запустится БП.
Данный код поместите в рамках элемента "задание-сценарий". Первый запуск осуществите вручную.
Чтобы не плодить темы, спрошу здесь. Почитал описание планировщика.
Хочу уточнить - он может функционировать автономно? То есть на сервере необходимо выполнение неких сценариев в определенные промежутки времени без участия пользователей, открывших интерфейс системы и работающих в ней.
Александр, не тестировал, но если Вы добавите и запустите Job в планировщике, и поставите его выполнение каждый час в течении одного года - то он будет выполнятся, пока живой сервер приложения.
Но я бы посмотрел в сторону Job'ов SQL сервера.
"Александр Кудряшов" написал:Чтобы не плодить темы, спрошу здесь. Почитал описание планировщика.
Хочу уточнить - он может функционировать автономно? То есть на сервере необходимо выполнение неких сценариев в определенные промежутки времени без участия пользователей, открывших интерфейс системы и работающих в ней.
Этот планировщик - часть системы BPMonline. Т.е. он будет работать, пока работает приложение на веб-сервере. Как только приложение свернется по таймауту, например, планировщик тоже "умрет".
При отсутствии в бизнес-процессе элементов, ожидающих реакции от пользователя, все будет работать и без активных пользователей в системе.
"Лариса" написал:
Олейник Дмитрий пишет:
Данный код поместите в рамках элемента "задание-сценарий". Первый запуск осуществите вручную.
в том же процессе, запуск которого настраивается ("ReadSomeDataProcess") ?
Как вручную запустить БП? В окне "Процессы" мой БП не появился.
В данный раздел попадают процессы с тегом "Business Process". Есть такое свойство у процесса в дизайнере процессов (нужно включить отображение всех свойств).
"Олейник Дмитрий" написал:где, TSBpm - рабочее пространство, в котором запустится БП.
Дмитрий, а откуда брать название рабочего пространства? Что это за параметр
"Александр Кудряшов" написал:
Олейник Дмитрий пишет:
где, TSBpm - рабочее пространство, в котором запустится БП.
Дмитрий, а откуда брать название рабочего пространства? Что это за параметр
Это "Конфигурация" на этапе логина в систему.
"Дмитрий Логвиненко" написал:Это "Конфигурация" на этапе логина в систему.
Ага, спасибо, уже разобрался :)
Еще вопрос.
Смотрим СДК
Видим что
[csharp]
public static Quartz.IJobDetail CreateProcessJob(
string jobName,
string jobGroup,
string processName,
string workspaceName,
string userName,
IDictionary parameters
)
[/csharp]
но если попробовать использовать этот метод так
[csharp]
var job = AppScheduler.CreateProcessJob(TitleJob, "DefaultGroup", "SendSMSProcess",
"TSBpm", "Supervisor", parameters);
[/csharp]
то возникает ошибка по причине наличия 6-го параметра.... действительно, смотрим в ILSpy данный метод (BPM 5.4.0.1351):
[csharp]
CreateProcessJob(string jobName, string jobGroup, string processName, string solutionName, string userName)
[/csharp]
Видим что он действительно при вызове не содержит 6-ой параметр и в СДК ошибка.
Теперь интереснее: мне надо создать Job, который в некоторый запланированный момент запустит процесс, и передаст в него параметр Id некоторой записи. Так вот, запустить отсроченно процесс я могу, а параметр передать в него не получается. Параметр мне известен на момент создания Job.
Вопрос такой: как с помощью Job вызвать по расписанию процесс и передать в него параметр?
Уже пробовал сделать вот так:
[csharp]
var parameters =
new Dictionary {
{"ActivityId", ActivityId.ToString()}
};
var job = AppScheduler.CreateProcessJob("SomeJob", "DefaultGroup", "SomeProcess",
"TSBpm", "Supervisor");
if (parameters != null) {
foreach (KeyValuePair current in parameters){
job.JobDataMap[current.Key] = current.Value;
}
}
var trigger = new SimpleTrigger("SomeTrigger", null, DateTime.UtcNow.AddHours(1));
AppScheduler.Instance.ScheduleJob(job, trigger);
[/csharp]
если закомментировать строку job.JobDataMap[current.Key] = current.Value; то все ок, правда без параметра. Если строку оставить, шедулер вообще не создает Job...
Простите за многобукв:smile:
Почитал очень внимательно статью про запуск процессов.
В СДК не ошибка, а неточность выходит... пометки там не хватает, что параметры поддерживаются начиная с версии 7.0
Так выходит нельзя вообще параметры в вызываемый процесс передать в 5-ке, никак-никак? :smile:
В версии 5.4.х параметры можно передать в немедленно запускаемый бизнес-процесс. Вот код метода, возможно Вас натолкнет на некоторые мысли:
[csharp]
/// Планирует задачу для немедленного однократного запуска процесса BPMonline
/// Название задачи
/// Название группы, к которой относится задача
/// Название процесса
/// Solution, в котором следует запустить процесс
/// Пользователь, от имени которого будет запускаться процесс
/// Параметры, которые будут передаваться в процесс
/// Если задача с таким именем в данной группе уже существует, она пересоздается заново. Если
/// процесс не может быть запущен в текущий момент, он будет запущен как только это станет возможно.
public static void ScheduleImmediateProcessJob(string jobName, string jobGroup, string processName,
string solutionName, string userName, IDictionary parameters) {
if (string.IsNullOrEmpty(jobName)) {
throw new ArgumentNullException("jobName");
}
if (string.IsNullOrEmpty(jobGroup)) {
throw new ArgumentNullException("jobGroup");
}
if (string.IsNullOrEmpty(processName)) {
throw new ArgumentNullException("processName");
}
if (string.IsNullOrEmpty(solutionName)) {
throw new ArgumentNullException("solutionName");
}
if (string.IsNullOrEmpty(userName)) {
throw new ArgumentNullException("userName");
}
RemoveJob(jobName, jobGroup);
JobDetail job = CreateProcessJob(jobName, jobGroup, processName, solutionName, userName);
Trigger trigger = new SimpleTrigger(jobName + "Trigger", jobGroup, DateTime.UtcNow, null, 0, TimeSpan.Zero);
trigger.MisfireInstruction = MisfireInstruction.SimpleTrigger.FireNow;
if (parameters != null) {
foreach (var parameter in parameters) {
job.JobDataMap[parameter.Key] = parameter.Value;
}
}
Instance.ScheduleJob(job, trigger);
}
[/csharp]
Дмитрий, я этот код и использовал для написания передачи параметра. Не работает оно. Вообще Джоб не создается если так написать (см мой пример выше)