Объектные характеристики#
Объектные характеристики — это пользовательские свойства, расширяющие функциональность классов без изменения схемы базы данных. Документ описывает способы хранения, настройки, валидации и программного управления характеристиками.
Характеристики: понятие и назначение#
Характеристика — качественное или количественное свойство объекта.
В системе реализованы как специальные атрибуты для хранения дополнительной информации.
Существует два способа хранения:
В JSON-контейнере объекта
Основной способ. Представляет собой NoSQL-расширение строки таблицы. Позволяет динамически добавлять характеристики без пересборки проекта и обновления схемы БД.Как атрибут класса с признаком «объектная характеристика»
Используется в высоконагруженных сценариях, где доступ к JSON-полям недостаточно эффективен. Характеристика хранится в отдельной колонке таблицы. Требует синхронизации схемы БД при добавлении.
Интеграция с выборкой#
Для вывода характеристик используется универсальное отображение Card_ObjectAttr. Его генерация управляется параметром objectAttrCardType в ODM.
Варианты настройки#
Значение |
Описание |
|---|---|
|
Объектные характеристики не используются. Отображение не формируется. |
|
Характеристики настраиваются на уровне класса или типа объекта. Если у класса есть тип объекта — настраивается на нём. Если нет — отображаются все характеристики. |
|
Характеристики настраиваются для групп. |
|
Характеристики настраиваются для групп и дополняются теми, что заданы на типе объекта. |
Отсутствие настройки эквивалентно objectAttrCardType="Simple".
Что отображается в закладке#
В отображении выводятся:
Значения атрибутов с флагом
isObjectAttr="true".Значения из JSON-контейнера
jObjAttrs_dz.Универсальные характеристики (см. раздел Универсальные характеристики в Документации по модулю btk).
Настройка характеристик на проекте#
Пользователь может добавить характеристики через интерфейс:
Откройте приложение «Настройка системы».
Перейдите в раздел «Сущности > Классы».
Откройте карточку нужного класса.
Перейдите на закладку «Атрибуты».
При необходимости задайте значение по умолчанию для существующих атрибутов.
Создайте атрибут объектной характеристики.
Примечание
Имена атрибутов должны соответствовать соглашению:
Строковые: начинаются с
s, напримерsStringAttrName.Числовые: начинаются с
n, напримерnNumberAttrName.Даты: начинаются с
d, напримерdDateAttrName.Логические: начинаются с
b, напримерbBooleanAttrName.
Сбросьте кэш метаданных:
Снимите галочку в пункте менюСервис > Управление решением > Использовать кэш метаданных выборок.Выполните операцию «Сбросить кэш настройки» на текущей закладке.
Значения по умолчанию#
Значения по умолчанию подставляются при создании объекта.
Если класс использует группировку — значения берутся из основной группы.
Для базовых атрибутов#
Указываются в ODM.
Устанавливаются через DPI при вставке.
Могут быть переопределены на проекте.
Проектное переопределение#
В списке атрибутов укажите значение в поле «Значение по умолчанию».
Для сброса: выполните операцию «Удалить переопределение значения по умолчанию».
Программное переопределение#
Используйте метод:
ru.bitec.app.btk.Btk_AttributeApi#overrideDefaultValue
Формат значений по умолчанию#
Ссылочные поля: ID ссылочного объекта.
Переменная ссылочность: GID ссылочного объекта.
Числа: десятичный разделитель — точка.
Дата: формат
dd.MM.yyyy HH:mm:ss.
Значениеsysdate→ текущая дата при вставке объекта.
Программная установка значений JSON-характеристик#
В бизнес-логике#
val rop = Bs_GoodsApi.load(209851.nl)
// Установка ссылочной характеристики
Bs_GoodsApi().setAttrValue(rop, "idGradeJson", 77016.nl)
В Jexl-скрипте#
var rop = Bs_GoodsApi.load(209851L); // Установка ссылочной характеристики Bs_GoodsApi.setAttrValue(rop, «idGradeJson», 77016L);
Сохранение способа ввода значений атрибутов#
Система может сохранять сведения о способе установки текущего значения атрибута или характеристики и пользователе, от имени которого оно было установлено. Сведения о способе ввода текущих значений можно просмотреть с помощью операции Способ ввода значения.
Признак Сохранять способ ввода значений атрибутов включает сохранение способа установки текущего значения.
Для регистрации способа ввода в истории изменений необходимо дополнительно включить признак Вести аудит в карточке класса. Если аудит не включен, способ ввода сохраняется для текущего значения, но не добавляется в историю.
В интерфейсе Аудит данных способ ввода отображается в поле Способ ввода значений в правом фрейме, где приведены старое и новое значения атрибута.
Подробнее о просмотре истории изменений см. в разделе Аудит данных.
Способы ввода значений#
Способы ввода хранятся в справочнике Btk_ValueInputType.
По умолчанию зарегистрированы следующие значения:
Код |
Наименование |
Приоритет |
Описание |
|---|---|---|---|
|
Пользователь |
20 |
Значение установлено пользователем. |
|
Программная установка |
60 |
Значение установлено программной логикой. |
|
Значение по умолчанию |
100 |
Значение установлено по умолчанию в соответствии с настройкой атрибута на группе или типе объекта. |
При каждой установке значения система сохраняет способ, соответствующий текущей установке. Если значение изменяется повторно, ранее сохраненный способ ввода заменяется новым.
Источник установки определяется контекстом выполнения:
пользовательский ввод регистрируется как
User;установка значения по настройке атрибута или типа объекта — как
Default;обычная программная установка — как
Program.
Для JEXL способ ввода зависит от сценария выполнения. Например, переопределение setter-а объектной характеристики выполняется в пользовательском контексте, а вызов программной логики или API-сеттера может регистрироваться как Program.
Включение сохранения способа ввода#
Сохранение способа ввода настраивается отдельно для каждого класса.
Для включения механизма:
Откройте приложение «Настройка системы».
Перейдите в раздел
Сущности > Классы.Откройте карточку необходимого класса.
Перейдите на закладку Характеристики.
Установите признак Сохранять способ ввода значений атрибутов (
bSaveValueInputType).
После включения признака способ ввода фиксируется при установке или изменении атрибутов класса и характеристик, в том числе хранящихся в JSON-контейнерах.
Операция Способ ввода значения позволяет просмотреть сохраненные сведения об атрибутах и характеристиках. Она открывает список, в котором отображаются:
атрибут;
способ ввода;
пользователь, от имени которого было установлено значение.
Механизм работает как с обычными атрибутами класса, так и с универсальными характеристиками.
Хранение способа ввода#
Способ ввода сохраняется в системном JSON объекта. Для каждого значения фиксируются тип ввода и пользователь.
Для обычных атрибутов используется контейнер attribute. Для характеристик, значения которых хранятся в JSON, используется системное имя соответствующего JSON-контейнера.
Например:
{
"inputType": {
"attribute": {
"sArticle": {
"type": "Default",
"user": "user"
},
"sName": {
"type": "User",
"user": "admin"
}
},
"jObjAttrs_dz": {
"UC_Thinkness": {
"type": "Default",
"user": "user"
},
"UC_Color": {
"type": "Program",
"user": "admin"
}
},
"jObjAttrConfig_dz": {
"UC_Thinkness": {
"type": "Default",
"user": "user"
},
"UC_Color": {
"type": "User",
"user": "admin"
}
}
}
}
В примере:
attributeсодержит сведения об обычных атрибутах классаsArticleиsName;jObjAttrs_dzиjObjAttrConfig_dzсодержат сведения о характеристиках, хранящихся в соответствующих JSON-контейнерах;typeсодержит код способа ввода;userсодержит пользователя, от имени которого установлено значение.
Для каждого атрибута или характеристики создается отдельная запись. Сведения в inputType создаются или обновляются при установке и изменении значений, если включен признак Сохранять способ ввода значений атрибутов.