Объект
Объектно-реляционное отображение (ORM, Object-Relational Mapping) в системе основано на объектах. Бизнес-объект — это компонент системы, используемый для backend-разработки и хранения данных.
Схема объекта реализована классом EntitySchema, в котором описываются:
- колонки объекта;
- индексы;
- связи;
- методы;
- настройки поведения объекта.
На уровне базы данных объект может представлять собой:
- таблицу базы данных;
- представление базы данных (VIEW);
- виртуальную сущность без хранения в базе данных.
В зависимости от назначения может использоваться один из типов объектов.
Различают следующие схемы объектов:
- Пользовательские схемы объектов — это схемы, создаваемые при конфигурации системы. Данные схемы помещаются в пользовательские пакеты.
- Базовые схемы объектов — предустановленные схемы, недоступные для изменения. Данные схемы могут быть расширены в пользовательских пакетах.
Создание объекта
Алгоритм создания схемы объекта:
- Откройте раздел «Конфигурация».
- Выберите пользовательский пакет, в который хотите добавить объект.
- На панели инструментов рабочей области раздела «Конфигурация» нажмите «Добавить» и выберите «Объект».
Рисунок 1 — Создание схемы объекта

- Заполните основные параметры объекта:
Таблица 1 — Свойства объекта
|
Свойство |
Описание |
Рекомендации и ограничения |
|
Код |
Название схемы |
Должен начинаться с префикса, указанного в системной настройке «Префикс названия объекта». Код должен содержать символы латинского алфавита и цифры. Максимальная длина названия объекта — 128 символов |
|
Заголовок |
Локализуемый заголовок схемы |
|
|
Родительский объект |
Объект, от которого данная схема будет наследоваться. В поле указывается код объекта. Объект-наследник получает функциональность и колонки родительского объекта |
Для базовых объектов в свойстве «Родительский объект» указывается BaseEntity.
BaseEntity находится в пакете Base, поэтому перед началом создания необходимо проверить наличие данного пакета в зависимостях. Либо наличие любого другого пакета, у которого в зависимостях есть пакет Base. Посмотреть зависимости пакетов можно через диаграмму зависимостей пакетов, вызвав соответствующее действие из выпадающего списка «Действия» панели инструментов раздела «Конфигурация».
После выбора родительского объекта подтвердите выбор родителя во всплывающем окне |
|
Идентификатор |
Первичный ключ. Тип данных идентификатора — «Уникальный идентификатор» |
Заполняется автоматически после заполнения свойства «Родительский объект». Так как объект представляет собой таблицу в базе данных, он обязательно должен содержать идентификатор |
Рисунок 2 — Основные параметры объекта

- Для добавления новой колонки нажмите
в области расположения и добавления новых колонок:
Рисунок 3 — Область расположения унаследованных колонок и добавления новых колонок

Выберите тип поля, который хотите добавить:
Рисунок 4 — Меню выбора типа данных новой колонки

Заполните свойства колонки:
Таблица 2 — Свойства колонки
|
Свойство |
Описание |
Рекомендации и ограничения |
|
Код |
Заполняется автоматически, рекомендуется изменить на необходимое значение. После публикации введенный код используется для наименования колонки в таблице базы данных |
Важно помнить, что значение свойство «Код» колонки не должно совпадать со значением аналогичного поля родительского объекта. Иначе при попытке опубликовать объект возникнет ошибка. Код должен начинаться с префикса, указанного в системной настройке «Префикс названия объекта» |
|
Заголовок |
Локализуемое название колонки |
|
|
Тип данных |
Заполняется автоматически после выбора типа при создании колонки |
|
|
Обязательность |
Флаг обязательности заполнения колонки |
Для того чтобы колонка заполнялась всегда, необходимо установить значение «На уровне приложения» |
|
Значение по умолчанию |
Значение колонки при создании записи |
Подробнее: Настройка значения по умолчанию для поля |
|
Режим использования |
Подробнее: Режим использования колонки |
|
- Нажмите «Сохранить».
- Нажмите «Опубликовать».
После сохранения данные о новом объекте сохранятся в метаданных.
После публикации таблица будет создана в базе данных.
Настройки колонок
Режим использования колонки
Режим использования колонки — это параметр, определяющий доступность и особенности применения колонки в системе (в интерфейсе, конфигурации или запросах к базе данных).
Существуют следующие режимы использования колонки:
- Общий — стандартный режим колонок. Колонка будет доступна всем пользователям (например, колонки «Email» и «Phone» объекта «Contact»);
- Расширенный — режим, который используется для системных колонок (например, колонки «Id», «CreatedBy», «CreatedOn», «ModifiedBy», «ModifiedOn» базового объекта «BaseEntity»). Не содержит дополнительной логики;
- Никогда — колонка будет недоступна для использования в интерфейсе (UI) системы, но останется при работе с объектом в разделе «Конфигурация» (например, колонка «ProcessListeners» базового объекта «BaseEntity»).
Рисунок 5 — Режимы использования колонок в системе

private void TestMethod(EntitySchemaColumn column)
{
if(column.UsageType == EntitySchemaColumnUsageType.Advanced)
{
//Реализация логики
}
}
Настройка каскадной связи
Используя колонку типа «Справочник», можно установить каскадную связь для объекта. Для этого:
- Добавьте новое поле типа «Справочник».
Рисунок 6 — Создание колонки типа «Справочник»

- Настройте связь в блоке «Источник данных», изменяя следующие свойства:
- «Не контролировать целостность»;
- Действия из свойства «При удалении значения справочника».
Рисунок 7 — Свойства для настройки каскадной связи

Рассмотрим варианты каскадной связи на примере двух сущностей: Контакт и Контрагент. У объекта Контакт есть колонка типа «Справочник», источник данных которой Контрагент.
- Если установлен признак «Не контролировать целостность», то при удалении записи контрагента записи контактов не будут удалены;
- Если не установлен признак «Не контролировать целостность», и выбрано действие «Блокировать удаление, если есть связанные записи в текущем объекте с этим значением», то при попытке удаления записи контрагента удаление будет заблокировано, и система выдаст предупреждение. В случае подтверждения удаления пользователем, запись контрагента будет удалена, но связанные записи контактов останутся;
- Если не установлен признак «Не контролировать целостность», и выбрано действие «Удалять записи из текущего объекта со значением», то при удалении контрагента будут удалены и записи контактов, связанные с контрагентом.
Добавление индексов
Для объекта также можно добавить индекс, который при публикации будет создан в базе данных.
Алгоритм создания составного индекса:
- Создайте колонку типа «Справочник». В блоке «Источник данных» в свойстве «Выбор объекта» выберите необходимый объект, например, «Account».
Рисунок 8 — Колонка типа «BpmTestLookup»

- Нажмите на кнопку
.
Рисунок 9 — Блок расположения и добавления индексов

- Заполните свойство «Код», указав идентификатор для создаваемого индекса.
- Установите значение «Уникальный», если необходимо исключить возможность вставки повторяющихся значений.
Установка признака «Уникальный» необходима, если для колонок индекса важно задать ограничение целостности, то есть исключить возможность вставки повторяющихся значений.
Рисунок 10 — Заполнение полей индекса

- В блоке «Колонки индекса» нажмите «Добавить».
Рисунок 11 — Блок «Колонки индекса»

- Добавьте колонки, которые будут включены в составной индекс.
Рисунок 12 — Добавление полей для составного индекса

- Нажмите «Сохранить», а затем «Опубликовать».
Настройки объекта
Контроль коллизий
При создании или редактировании схемы объекта существует возможность включения функции «Контроль коллизий», которая предназначена для предотвращения одновременного внесения изменений несколькими пользователями в одну и ту же запись.
По умолчанию контроль коллизий отключен. Чтобы включить, выполните следующие шаги:
- Откройте раздел «Конфигурация».
- Найдите объект, для которого требуется настроить контроль коллизий.
- В настройках объекта найдите блок «Поведение».
- Установите флаг в поле «Контроль коллизий».
- Сохраните и опубликуйте изменения.
Рисунок 13 — Включение контроля коллизий

После включения данной настройки можно контролировать редактирование данных на странице записи. Подробнее: Редактирование данных.
При необходимости включить контроль коллизий на объекте из предустановленного пакета, необходимо на его основе создать замещающий объект в пользовательском пакете и включить признак «Контроль коллизий».
Деактивация записей объектов
В приложении BPMSoft существует возможность деактивировать записи объектов системы для ограничения их действия в системе, например, в случае устаревших или неиспользуемых данных.
Использование в дизайнере объекта
Данная возможность настраивается посредством изменения поля «Разрешить деактивацию записей» в дизайнере объектов. Деактивация записи становится возможной после публикации объекта.
Деактивация записи позволяет скрыть значение справочника при выборе пользователем во внешнем интерфейсе, например, в быстрых фильтрах, полях с выпадающим списком, на страницах выбора из справочника. На отображение записи в разделе, детали или расширенном фильтре деактивация не влияет.
Рисунок 14 — Настройка разрешения на деактивацию объектов в дизайнере объектов

Использование в программном коде
За активацию или деактивацию фильтрации деактивированных записей отвечает аргумент UseRecordDeactivation класса EntitySchemaQuery. Подробнее о классе EntitySchemaQuery смотрите в статье: Класс EntitySchemaQuery. По умолчанию этот аргумент установлен в значение false. Если в запросе требуется фильтрация по активным/неактивным объектам, необходимо присвоить аргументу значение true, тогда в запрос будет добавлен соответствующий фильтр, убирающий неактивные записи.
var esq = Ext.create("BPMSoft.EntitySchemaQuery", {
rootSchemaName: "ActivityType",
useRecordDeactivation: true
});
var esq = new EntitySchemaQuery(userConnection.EntitySchemaManager, "ActivityType") {
UseRecordDeactivation = true
};
SELECT [ActivityType].[Id] [Id] FROM [dbo].[ActivityType] [ActivityType] WITH(NOLOCK) WHERE [ActivityType].[RecordInactive] = 0
Дополнительные настройки объекта
Ниже представлены дополнительные настройки для объекта:
Таблица 3 — Дополнительные настройки объекта
|
Название |
Описание |
Подробнее |
|
Представление в базе данных |
Используется чтобы указать, что объект основан не на таблице, а на представлении (VIEW) в базе данных |
Использование представлений в базе данных для оптимизации производительности |
|
Объект доступен на портале как раздел |
Используется чтобы отобразить представление портального раздела |
|
|
Виртуальный |
Объект не имеет физической таблицы или представления в базе данных и существует только на уровне приложения |
|
|
Вести журнал изменений |
Включает логирование в журнале изменений |
|
|
Измерять Apdex |
Включает измерение метрик по методологии APDEX |
Рекомендуем изучить
Исходный код (C#)
Возможности раздела «Конфигурация»
Замещающий объект