Сервис управления задачами

Описание

ru.bgcrm.core.task.TaskService управляет определениями обработчиков в справочнике задач. Конкретные запуски для процессов создаются через ProcessTaskService.

Сервис зарегистрирован в глобальном контексте. Соответственно может быть вызван из контекста.
Пример:
val taskService = ServerContext.lookup(TaskService::class.java)

Конфигурация

Справочник и сервис доступны независимо от исполнителя. Чтобы созданные задачи процесса выполнялись автоматически, включите TaskRunner в конфигурации сервера:

task.runner.enabled=true

Дополнительные ключи и устройство исполнения описаны на странице Модуль «Задачи».

Методы

TaskService

Создание задачи:

fun createTask(task: CreateTaskRequest): Task

Редактирование задачи:

fun updateTask(task: UpdateTaskRequest)

Выключение задачи:

fun disableTask(id: Int)

Включение задачи:

fun enableTask(id: Int)

Получение задачи по ID:

fun getTaskById(id: Int): Task

Удаление задачи:

fun deleteTask(id: Int)

Отказывает, пока задача используется в правилах автоматизации типов процессов либо у неё остались запуски в статусах "В ожидании", "Выполняется" или "Ошибка" с неисчерпанными попытками.

Откат последнего изменения:

fun rollbackTask(request: RollbackTaskRequest): Task

Правку откатывает возвратом полей к значениям до неё, удаление — восстановлением задачи под прежним id. Создание и восстановление не откатываются.

Получение списка задач:

fun searchTasks(request: TaskSearchRequest, page: Page?): SearchResult<Task>

Получение использования задачи:

fun searchTaskUsage(id: Int, page: Page?): SearchResult<TaskUsage>

Получение истории изменений:

fun searchTaskAudit(request: TaskAuditSearchRequest, page: Page?): SearchResult<TaskAuditRecord>

Получение классов-обработчиков:

fun searchTaskHandlers(filter: String?): List<TaskHandlerClass>

Отдаёт скомпилированные классы динамического кода, реализующие TaskHandler; классы из сборки в выборку не попадают.

Модели

Task

Field Type Description

id

Int

Id задачи

title

String

Наименование задачи

clazz

String?

Класс обработчик задачи

script

String?

Скрипт

enabled

Boolean

Включена

Должно быть заполнено хотя бы одно из полей clazz и script. Если заполнены оба, при выполнении используется класс.

CreateTaskRequest

Field Type Description

title

String

Наименование задачи

clazz

String?

Класс обработчик задачи

script

String?

Скрипт

UpdateTaskRequest

Field Type Description

id

Int

Id задачи

title

String

Наименование задачи

clazz

String?

Класс обработчик задачи

script

String?

Скрипт

TaskSearchRequest

Field Type Description

id

Int?

Id задачи

filter

String?

Фильтры по наименованию, классу, скрипту

enabled

Boolean?

Состояние задачи

RollbackTaskRequest

Field Type Description

taskId

Int

Id задачи

recordId

Int

Id последней записи истории по задаче

TaskAuditSearchRequest

Field Type Description

taskId

Int?

Id задачи

actions

Set<TaskAuditAction>

Фильтр по действиям: CREATE, UPDATE, DELETE, RESTORE

deleted

Boolean

Только удалённые задачи: последние записи удаления по задачам, которых нет в справочнике

TaskAuditRecord

Field Type Description

id

Int

Id записи истории

taskId

Int

Id задачи

action

String

Код действия: create, update, delete, restore

actionTitle

String

Действие словами: создана, изменена, удалена, восстановлена

userId

Int

Id пользователя

userName

String?

Имя пользователя из кэша

time

Long

Время записи, миллисекунды

title

String

Наименование задачи на момент записи

changes

List<TaskFieldChange>

Изменения по полям

У создания, удаления и восстановления в changes лежит полный снимок полей задачи в after. Состояние хранится словами: включена и выключена.

TaskFieldChange

Field Type Description

field

String

Поле: title, clazz, script, enabled

title

String

Наименование поля

before

String?

Значение до изменения

after

String?

Значение после изменения

TaskUsage

Field Type Description

processTypeId

Int

Id типа процесса

processTypeTitle

String?

Наименование типа процесса

rules

List<TaskUsageRule>

Правила автоматизации этого типа, где используется задача

TaskUsageRule

Field Type Description

id

Int

Id правила автоматизации

title

String

Наименование правила

enabled

Boolean

Включено

TaskHandlerClass

Field Type Description

name

String

Полное имя класса

packageName

String

Пакет; пустая строка, если класс лежит в корне

simpleName

String

Имя класса без пакета

Хранение истории

Записи истории лежат в таблице task_audit, изменения полей — json в колонке changes. DDL таблицы в core/src/main/java/ru/bgcrm/core/task/db.sql, при выкладке её нужно создать.