-
Kernel
-
Plugins
-
Billing
-
Collaboration
-
Planning
-
Messaging
-
Security
-
Service
-
Release Notes
Kernel
Plugins
Billing
Collaboration
Planning
Messaging
Security
Service
Release Notes
Предназначен для создания отложенных либо (в перспективе) периодически выполняемых задач, как-то:
напоминания о процессе;
создание периодических процессов по шаблону.
You can see the plugin enabled in Demo System. |
Типы задач настраиваются в конфигурации.
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
Класс позволяет периодически уведомлять пользователей через E-Mail о непрочитанных новостях и необработанных сообщениях.
Настройка в конфигурации:
task:userStateSender.email.paramId=<paramId> task:userStateSender.email.doExpression=<jexl>
Где:
<paramId> - код параметра пользователя типа email;
<jexl> - JEXL скрипт, выполняющий отправку.
В контекст JEXL скрипта дополнительно передаются:
msg - объект класса ru.bgcrm.util.MailMsg;
emails - List объектов класса ru.bgcrm.model.param.ParameterEmailValue.
Параметр 79 - с типом email у пользователя.
task:userStateSender.email.paramId=79 task:userStateSender.email.doExpression=<<END if (event.getNewsCount() <= 0 && event.getMessagesCount() <= 0) { log.debug("No messages."); return 1; } subject = "BGERP cводка "; text = ""; if (event.getNewsCount() > 0) text += "Непрочитанных новостей: " + event.getNewsCount(); if (event.getMessagesCount() > 0) text += NEW_LINE + "Необработанных сообщений: " + event.getMessagesCount(); email = u.getFirst(emails).getValue(); msg.sendMessage(email, subject, text); END
Проверку и выполнение задач выполняет класс UserStateSender. его запуск настраивается в планировщике.
Задачи могут исполняться многократно по расписанию. Для этого в редакторе карточки процесса будет реализован визуальный редактор. После первого выполнения задача будет не помечаться исполненной, а ставить дату следующего выполнения. Такие задачи смогут быть использованы, например, для клонирования регулярных процессов по расписанию.