# Плагин TaskS

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

- 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

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

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

    task:processShowTasks=1