Объектные характеристики#

Объектные характеристики — это пользовательские свойства, расширяющие функциональность классов без изменения схемы базы данных. Документ описывает способы хранения, настройки, валидации и программного управления характеристиками.

Характеристики: понятие и назначение#

Характеристика — качественное или количественное свойство объекта.
В системе реализованы как специальные атрибуты для хранения дополнительной информации.

Существует два способа хранения:

  • В JSON-контейнере объекта
    Основной способ. Представляет собой NoSQL-расширение строки таблицы. Позволяет динамически добавлять характеристики без пересборки проекта и обновления схемы БД.

  • Как атрибут класса с признаком «объектная характеристика»
    Используется в высоконагруженных сценариях, где доступ к JSON-полям недостаточно эффективен. Характеристика хранится в отдельной колонке таблицы. Требует синхронизации схемы БД при добавлении.


Интеграция с выборкой#

Для вывода характеристик используется универсальное отображение Card_ObjectAttr. Его генерация управляется параметром objectAttrCardType в ODM.

Варианты настройки#

Значение

Описание

None

Объектные характеристики не используются. Отображение не формируется.

Simple

Характеристики настраиваются на уровне класса или типа объекта. Если у класса есть тип объекта — настраивается на нём. Если нет — отображаются все характеристики.

Group

Характеристики настраиваются для групп.

GroupAndObjectType

Характеристики настраиваются для групп и дополняются теми, что заданы на типе объекта.

Отсутствие настройки эквивалентно objectAttrCardType="Simple".

Что отображается в закладке#

В отображении выводятся:

  • Значения атрибутов с флагом isObjectAttr="true".

  • Значения из JSON-контейнера jObjAttrs_dz.

  • Универсальные характеристики (см. раздел Универсальные характеристики в Документации по модулю btk).


Настройка характеристик на проекте#

Пользователь может добавить характеристики через интерфейс:

  1. Откройте приложение «Настройка системы».

  2. Перейдите в раздел «Сущности > Классы».

  3. Откройте карточку нужного класса.

  4. Перейдите на закладку «Атрибуты».

  5. При необходимости задайте значение по умолчанию для существующих атрибутов.

  6. Создайте атрибут объектной характеристики.

Примечание

Имена атрибутов должны соответствовать соглашению:

  • Строковые: начинаются с s, например sStringAttrName.

  • Числовые: начинаются с n, например nNumberAttrName.

  • Даты: начинаются с d, например dDateAttrName.

  • Логические: начинаются с b, например bBooleanAttrName.

  1. Сбросьте кэш метаданных:
    Снимите галочку в пункте меню Сервис > Управление решением > Использовать кэш метаданных выборок.

  2. Выполните операцию «Сбросить кэш настройки» на текущей закладке.


Значения по умолчанию#

Значения по умолчанию подставляются при создании объекта.
Если класс использует группировку — значения берутся из основной группы.

Для базовых атрибутов#

  • Указываются в ODM.

  • Устанавливаются через DPI при вставке.

  • Могут быть переопределены на проекте.

Проектное переопределение#

  • В списке атрибутов укажите значение в поле «Значение по умолчанию».

  • Для сброса: выполните операцию «Удалить переопределение значения по умолчанию».

Программное переопределение#

Используйте метод:

ru.bitec.app.btk.Btk_AttributeApi#overrideDefaultValue

Формат значений по умолчанию#

  1. Ссылочные поля: ID ссылочного объекта.

  2. Переменная ссылочность: GID ссылочного объекта.

  3. Числа: десятичный разделитель — точка.

  4. Дата: формат 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.

По умолчанию зарегистрированы следующие значения:

Код

Наименование

Приоритет

Описание

User

Пользователь

20

Значение установлено пользователем.

Program

Программная установка

60

Значение установлено программной логикой.

Default

Значение по умолчанию

100

Значение установлено по умолчанию в соответствии с настройкой атрибута на группе или типе объекта.

При каждой установке значения система сохраняет способ, соответствующий текущей установке. Если значение изменяется повторно, ранее сохраненный способ ввода заменяется новым.

Источник установки определяется контекстом выполнения:

  • пользовательский ввод регистрируется как User;

  • установка значения по настройке атрибута или типа объекта — как Default;

  • обычная программная установка — как Program.

Для JEXL способ ввода зависит от сценария выполнения. Например, переопределение setter-а объектной характеристики выполняется в пользовательском контексте, а вызов программной логики или API-сеттера может регистрироваться как Program.

Включение сохранения способа ввода#

Сохранение способа ввода настраивается отдельно для каждого класса.

Для включения механизма:

  1. Откройте приложение «Настройка системы».

  2. Перейдите в раздел Сущности > Классы.

  3. Откройте карточку необходимого класса.

  4. Перейдите на закладку Характеристики.

  5. Установите признак Сохранять способ ввода значений атрибутов (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 создаются или обновляются при установке и изменении значений, если включен признак Сохранять способ ввода значений атрибутов.