-
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 скрипта помимо типового набора для обработки процесса передаются:
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. его запуск настраивается в планировщике.
Задачи могут исполняться многократно по расписанию. Для этого в редакторе карточки процесса будет реализован визуальный редактор. После первого выполнения задача будет не помечаться исполненной, а ставить дату следующего выполнения. Такие задачи смогут быть использованы, например, для клонирования регулярных процессов по расписанию.