About

Предназначен для создания отложенных либо (в перспективе) периодически выполняемых задач, как-то:

  • напоминания о процессе;

  • создание периодических процессов по шаблону.

Setup

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 передаются:

Проверку и выполнение задач выполняет класс 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

Отображение в карточке процесса

Для включения карточки в конфигурации типа процесса добавить.

task:processShowTasks=1
process tasks