- 
         
Kernel
 - 
         
Plugins
 - 
         
Release Notes
 
Kernel
Plugins
Release Notes
Предназначен для создания отложенных либо (в перспективе) периодически выполняемых задач, как-то:
напоминания о процессе;
создание периодических процессов по шаблону.
| 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
        Класс позволяет периодически уведомлять пользователей через Email о непрочитанных новостях и необработанных сообщениях.
Настройка в конфигурации:
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. его запуск настраивается в планировщике.