ParameterService
ru.bgcrm.model.param.service.ParameterService — основной сервис чтения и изменения значений параметров. Он проверяет существование и тип параметра, применяет ограничения значения и при записи публикует события параметров.
Используйте его вместо ParamValueDAO и устаревшего ru.bgcrm.service.ParameterService.
Получение сервиса
val parameterService = ServerContext.get().getService<ParameterService>()
ParameterService parameterService = ServerContext.lookup(ParameterService.class);
В JEXL-контексте процесса сервис доступен как parameterService.
id во всех методах — идентификатор объекта-владельца значения, а param/paramId — идентификатор определения параметра. Владельцем может быть процесс, контрагент, пользователь или другой поддерживаемый объект; тип владельца задан в самом определении параметра.
События и проверки
Обычный ParameterService при записи выполняет следующую последовательность:
-
Находит определение параметра в
ParameterCacheи проверяет его тип. -
Публикует
ParamChangingEventдля скрипта параметра и, для параметра процесса, для скрипта типа процесса. -
Записывает новое значение через repository.
-
Публикует
ParamChangedEventпо тем же маршрутам.
getListExt динамического спискового параметра также публикует ParamListGetEvent.
EventlessParameterService имеет тот же интерфейс и те же проверки типов, но не публикует события изменения. Используйте его только там, где подавление событий является явной частью сценария; это не более быстрый вариант по умолчанию.
Текст и blob
| Метод | Поведение |
|---|---|
|
Читает параметр типа |
|
Записывает значение; |
Boolean и число
| Метод | Поведение |
|---|---|
|
Читает флаговый параметр |
|
Записывает |
|
Читает число без потери точности |
|
Записывает число или очищает значение |
Для числа проверяются общая точность до 20 знаков, scale до 5 знаков после запятой и ограничения min/max из конфигурации параметра.
Tree и list
| Метод | Поведение |
|---|---|
|
Идентификаторы выбранных узлов tree |
|
Идентификаторы и названия выбранных узлов |
|
Полностью заменяет выбранные узлы |
|
Идентификаторы выбранных значений списка |
|
Идентификатор, название и комментарий каждого значения |
|
Полностью заменяет значения без комментариев |
|
Полностью заменяет значения и комментарии |
Пустой набор очищает параметр.
ListCount
| Метод | Поведение |
|---|---|
|
Читает значения с количеством |
|
Полностью заменяет набор и проверяет числовые ограничения количества |
Email и телефон
| Метод | Поведение |
|---|---|
|
Читает все email-значения |
|
Полностью заменяет email-значения |
|
Возвращает строковое значение телефона либо |
|
Записывает один телефон; пустое значение очищает параметр |
|
Возвращает полную структуру телефонного параметра |
|
Записывает полную структуру |
Для нескольких телефонов и сохранения дополнительных полей используйте методы *PhoneExt.
Адрес
| Метод | Поведение |
|---|---|
|
Читает адреса; |
|
Полностью заменяет адреса |
Если нужны только идентификаторы и поля сохранённого значения, передавайте loadDetails = false.
Дата и дата-время
| Метод | Поведение |
|---|---|
|
Читает календарную дату |
|
Записывает или очищает дату |
|
Читает локальные дату и время |
|
Записывает или очищает дату-время |
API использует java.time, а преобразование к формату хранения выполняет реализация сервиса.
Файлы
| Метод | Поведение |
|---|---|
|
Возвращает версии файлов параметра |
|
Привязывает уже сохранённый файл; нужны положительный |
|
Создаёт и добавляет файл из массива байтов |
|
Удаляет указанную версию; нужны положительные |
Не загружайте большие файлы в память без необходимости: перегрузка с ByteArray получает весь файл целиком.
Пакетное обновление
updateValues(objectId, values: List<ParamValue<*>>) применяет типизированные значения последовательно. Поддерживаются ParamValueText, ParamValueBoolean, ParamValueDate, ParamValueDateTime, ParamValueList, ParamValueEmail, ParamValueAddress, ParamValuePhone, ParamValueTree, ParamValueListCount и ParamValueNumber.
Особенности текущей реализации:
-
objectId == 0считается ошибкой; -
пустой список ничего не меняет;
-
элементы с
paramId ⇐ 0пропускаются; -
пустые значения list, email, address, tree и listCount пропускаются, а не очищают параметр;
-
неподдерживаемый класс
ParamValueприводит кBGException.
Если требуется гарантированно очистить значение, вызовите типовой update* с null/пустой коллекцией либо cleanParam.
Копирование и очистка
| Метод | Поведение |
|---|---|
|
Копирует один и тот же параметр между объектами; событие копирования не публикуется |
|
Копирует между разными параметрами и публикует |
|
Очищает значение через соответствующий |
|
Проверяет заполненность по правилам типа параметра |
Строки объектного списка
Для параметра объектного списка доступны низкоуровневые операции:
| Метод | Поведение |
|---|---|
|
Получить идентификаторы строк |
|
Добавить строку и вернуть её идентификатор |
|
Удалить строку |
Эти методы не вызывают assertParameter и не публикуют события параметра. Используйте их только вместе с API конкретного объектного списка, которое заполняет содержимое строки.
Ошибки и транзакции
При отсутствии определения параметра большинство типовых операций выбрасывает IllegalArgumentException, при несовпадении типа — IllegalStateException. Ошибки бизнес-валидации возвращаются как BGException/BGMessageException.
Сервис использует соединение текущего ServerContext. В транзакционном контексте вызывающий код отвечает за commit, а при перехваченной ошибке — за осознанный rollback и завершение контекста. Не смешивайте сервис с ParamValueDAO, созданным на другом соединении. Подробнее: Соединения и транзакции.