Предназначен для создания отложенных либо (в перспективе) периодически выполняемых задач, как-то:
напоминания о процессе;
создание периодических процессов по шаблону.
| You can see (process Plugin Task) the plugin operation in Demo System. |
Make sure the plugin is enabled and append to the configuration:
task:type.<ID>.id=<ID> task:type.<ID>.title=<TITLE> task:type.<ID>.doExpression=<JEXL>
Где:
<ID> - уникальный числовой идентификатор;
<TITLE> - наименование задачи при отображении;
<JEXL> - JEXL скрипт.
В контекст JEXL скрипта помимо standard context for process передаются:
taskObject - объект класса ru.bgcrm.plugin.task.model.Task;
taskType - объект класса ru.bgcrm.plugin.task.model.TaskType.
Проверку и выполнение задач выполняет класс TaskRunner. запуск которого настраивается в планировщике.
При изменении параметра процесса типа date с кодом 39 устанавливается напоминание, создаётся задача. Далее при наступлении момента времени задача отрабатывает и отправляет новость о процессе.
Конфигурация на изменение параметра в простом обработчике изменений процесса:
onProcessEvent.1.events=paramChanged:39
onProcessEvent.1.doExpression=<<END
t = new("ru.bgcrm.plugin.task.model.Task", "reminder", process.getId(), event.getValue());
t.getConfig().set("userId", user.getId().toString());
task.setTask(t);
END
Сама задача определяется в конфигурации:
task:type.1.id=reminder
task:type.1.doExpression=<<END
text =
"Необходимо обратить внимание на процесс, в котором вы числитесь исполнителем.<br/>" +
"Описание:<br>" + process.getDescription();
text += "<br/><a href='#' onClick='$$.process.open( " + process.getId() + " ); return false;'>Перейти к процессу</a>";
news = new("ru.bgcrm.model.News", true, "Напоминание о процессе #" + process.getId(), text);
news.setUserId(taskObject.getConfig().getInt("userId", 0));
// отправка исполнителям процесса
new("ru.bgcrm.dao.NewsDAO", conSet.getConnection()).updateNewsUsers(news, process.getExecutorIds());
// либо произвольным пользователям
// new("ru.bgcrm.dao.NewsDAO", conSet.getConnection()).updateNewsUsers(news, {1,2});
END