ProcessService
ru.bgcrm.model.process.service.ProcessService — основной сервис чтения и изменения процессов. Он объединяет операции над самим процессом, создание, группы, исполнителей и привязки.
Используйте его вместо ProcessDAO: сервис работает в текущем ServerContext, выполняет проверки и публикует доменные события.
Получение сервиса
val processService = ServerContext.get().getService<ProcessService>()
ProcessService processService = ServerContext.lookup(ProcessService.class);
В JEXL-контексте процесса тот же интерфейс доступен как processService.
Состав сервиса
| Интерфейс | Назначение |
|---|---|
|
Получение и удаление процесса, описание, статус, приоритет |
|
Создание обычного или связанного процесса |
|
Группы процесса |
|
Исполнители процесса |
|
Процессы, контрагенты, договоры и произвольные привязки |
Если компоненту нужен только один набор операций, можно запросить узкий интерфейс напрямую. Все перечисленные интерфейсы зарегистрированы как сервисы.
Процесс и тип процесса
| Метод | Поведение |
|---|---|
|
Возвращает процесс или выбрасывает |
|
Возвращает пустой |
|
Загружает процессы по коллекции идентификаторов |
|
Берёт тип из |
|
Удаляет процесс через repository. Метод не публикует события удаления |
Для обязательной сущности используйте getProcess, для ожидаемого отсутствия — findProcess.
Описание, статус и приоритет
| Метод | Поведение |
|---|---|
|
Полностью заменяет описание и публикует событие изменения |
|
Добавляет непустое сообщение по шаблону типа процесса |
|
Добавляет сообщение по явному шаблону; доступны |
|
Проверяет существование статуса, записывает историю и публикует события до/после изменения |
|
Ограничивает значение диапазоном |
При переходе в закрывающий статус updateStatus дополнительно публикует события для связанных процессов типов processMade, processDepend и processLink.
Создание процесса
| Метод | Назначение |
|---|---|
|
Создать процесс без привязки |
|
Создать процесс, связанный с другим процессом |
|
То же, если объект процесса уже загружен |
|
Создать процесс с привязкой к контрагенту |
|
Создать процесс с привязкой к договору биллинга |
|
Создать процесс с привязкой к единому договору |
|
Создать процесс с произвольной |
|
Создать процесс и заполнить параметры через |
title = null преобразуется в пустую строку. Создание запрещено для архивного типа и типа без существующего начального статуса. Сервис назначает начальный статус и группы типа процесса, затем публикует соответствующее событие создания.
Допустимые типы связи процессов определены константами Process:
-
processLink— обычная связь; -
processMade— связанный процесс создан из исходного; -
processDepend— зависимость между процессами.
Группы процесса
| Метод | Назначение |
|---|---|
|
Вернуть группы только для указанной роли |
|
Подобрать группу пользователя с учётом разрешённых групп типа |
|
Добавить группы к существующим |
|
То же с выбором проверки точного списка либо списка с потомками |
|
Полностью заменить группы |
|
Удалить одну группу |
значение roleId = 0 не означает «все роли»: сервис фильтрует записи по роли 0.
|
Если подходящих групп пользователя несколько и firstSuitableGroup == false, сервис выбрасывает BGMessageException. Изменение полного набора групп публикует события groupsChanging и groupsChanged.
Исполнители
| Метод | Назначение |
|---|---|
|
Вернуть исполнителей только для указанной роли |
|
Добавить готовые |
|
Добавить с проверкой разрешённых групп |
|
Преобразовать пользователей в исполнителей через подходящие группы |
|
Полностью заменить исполнителей; доступны те же варианты аргументов |
|
Удалить конкретную запись исполнителя |
|
Удалить все записи пользователя в процессе |
При обновлении исполнителей сервис автоматически добавляет отсутствующие группы процесса и публикует события executorsChanging и executorsChanged.
Привязки
Процессы
| Метод | Назначение |
|---|---|
|
Процессы, на которые ссылается текущий процесс; пустой фильтр не ограничивает выборку |
|
Процессы, которые ссылаются на текущий |
|
Добавить одну или несколько связей |
|
Удалить связь указанного типа |
По умолчанию выборка учитывает processLink, processDepend и processMade.
Контрагенты и договоры
| Метод | Назначение |
|---|---|
|
Получить привязанных контрагентов |
|
Добавить контрагента по идентификатору или объекту |
|
Добавить коллекцию контрагентов |
|
Полностью заменить привязанных контрагентов |
|
Удалить одного или несколько контрагентов |
|
Получить привязанные договоры биллинга |
|
Добавить один или несколько договоров |
|
Заменить привязанные договоры |
|
Удалить договор |
|
Получить привязанные единые договоры |
|
Добавить единый договор |
|
Добавить коллекцию единых договоров |
|
Полностью заменить единые договоры |
|
Удалить единый договор |
Методы с update заменяют текущий набор соответствующих привязок. Для договоров биллинга текущая реализация updateLinkedContracts делегирует общей замене привязок и может затронуть привязки других типов; перед применением проверьте состав связей процесса. Для точечного изменения безопаснее использовать addLinkedContract и removeLinkedContract.
Произвольные объекты
| Метод | Назначение |
|---|---|
|
Все исходящие |
|
Исходящие привязки, тип которых полностью совпал с регулярным выражением |
|
Входящие привязки |
|
Добавить привязку |
|
Удалить все исходящие привязки и добавить переданный набор |
|
Удалить одну привязку |
|
Удалить все исходящие привязки |
Изменения привязок публикуют события linkAdding/linkAdded и linkRemoving/linkRemoved.
Транзакции и ошибки
Сервис использует соединения текущего ServerContext. В транзакционном контексте изменения становятся окончательными только после commit; при перехваченной ошибке вызывающий код должен осознанно выполнить rollback и завершить контекст. Подробнее: Соединения и транзакции.
Ожидайте BGMessageException для отсутствующего процесса, типа, контрагента или единого договора и IllegalArgumentException для неизвестного статуса либо пустого сообщения, добавляемого в описание.
Не смешивайте сервисные операции с отдельным соединением, созданным вручную: они окажутся в разных транзакциях.