Предыдущая статья курса: Быстрый старт
Общая информация

Классы являются основой всех систем и приложений, разрабатываемых на платформе Эра. Набор классов в пакетее реализует структуру данных, с которой взаимодействуют остальные элементы пакета. Каждый класс определяется набором параметров, полей и действий. Параметры класса определяют его наименование, поведение, способ хранения данных, структуру наследования и т.д. Обзор параметров класса будет произведен ниже в данной статье.
Набор полей определяет структуру данных класса, а также формирует связь объектов этого класса с другими классами (в рамках всех пакетов системы).
Набор действий может определять некоторые операции, которые могут производиться над объектами данного класса. С помощью действий может реализовываться часть логики работы с классом. Также для реализации логики работы с данными можно использовать обработчики (handlers) и сервисы (services).
При создании модели класса, указывается его тип (classKind):
- entity - сущность, объект для хранение данных
- object -
- interface - интерфейс для взаимодействия других классов (не хранит данные, только определяет структуру).
Классы могут наследовать поля и действия от других, родительских классов.
Для каждого класса, после активации пакета создается хранилище, соответствующее настройкам класса.
Хранилище может размещаться в оперативной памяти, в распределенной объектной БД, в реляционной БД Postgres (с партициями для исторических данных и без), в брокере Kafka, а также сохранять данные в аналитической колоночной БД Clickhouse.
Класс может быть абстрактным (abstract), или интерфейсом (interface) в этом случае, для него не генерируются хранилище. Данные вариации классов не хранят в себе данные, и используются для взаимодействия между другими классами и описания структур данных.
Параметры класса

У класса достаточно большой набор настраиваемых параметров. Для удобства, рассмотрим их в порядке группировки в окне редактирования.
Вкладка Common
Основная вкладка, содержащая ключевые параметры работы класса.

Name and Location
| Название параметра | Значение по-умолчанию | Комментарий |
|---|---|---|
| package | [текущий выбранный пакет] | Определяет, к какому пакету будет относиться данный класс |
| folderName | Определяет имя папки для группировки классов | |
| name | Системное наименование класса в единственном числе (используется в API) | |
| multiName | Системное наименование класса во множественном числе числе (используется в API) | |
| fullName | [package]/[folderName]/[name] | Формируется автоматически, используется для доступа к данным через API |
| fullMultiName | [package]/[folderName]/[multiName] | Формируется автоматически, используется для доступа к данным через API |
| caption | Заголовок класса, используется для отображения данных пользователю (напр., при отображении карточки редактирования) | |
| multiCaption | Заголовок класса, используется для отображения данных пользователю (напр., при отображении реестра данных класса) |

Data
| Название параметра | Значение по-умолчанию | Комментарий |
|---|---|---|
| storageMode | category | Определяет тип хранилища, создаваемого для класса
ram/runtime/category/history
|
| storageInstance | Используется только для storage_mode = category, history, transactionlog
Данным параметром задается ключ инстанса для хранения данных. При отсутствии настроенного хранилища с кодом 'auto' класс автоматически привязывается к модельной базе ('era_model_DOMAIN'), созданной через основное подключение к БД Postgres домена). | |
| section | Имя секции для выбора экземпляра DMS | |
| integrityMode | sync_fast_notify
|
Режим обеспечения целостности (приоритетность применения изменений в хранилище и рассылки уведомлений)
|
| partitionPropertyName | Используется только для storage_mode = history, transactionlog
Является опциональным для режима history, и обязательным для transactionlog В данном параметре определяется имя поля (с типом datetime), которое будет использоваться для построения партиции в Postgresql / префикса ключа в Kafka+Clickhouse | |
| maxLimit | Максимальное количество строк при чтении одной страницы. Используется в API при пагинации данных | |
| realtime | Обеспечение обновлений данных в реальном времени (путем подписки на изменения). Данный параметр в том чилсе, влияет на работу в интерфейсе (когда два пользователя пытаются изменять один и тот же объект этого класса). | |
| serverCacheMode | none | Режим кэширования данных на сервере (слой платформы, роль DMS)
|
| clientCacheMode | temp | Режим кэширования данных на клиенте (в приложениях и микросервисах продуктового слоя).
Возможные значения аналогичны serverCacheMode |
| classDataSource | model | Источник данных класса
Возможные значения:
|
| restURL | URL сервиса для получения данных. Используется только при dataSource = root | |
| dataFactoryServiceName | Имя сервиса, который используется в качестве фабрики данных (вместо классического REST) | |
| dataFactoryMethodName | Имя метода сервиса, который используется в качестве фабрики данных (вместо классического REST) | |
| tuningOptions | Дополнительные опции (opts) для design/classes
Полный список опций доступен в документации к классу |

Class
| Название параметра | Значение по-умолчанию | Комментарий |
|---|---|---|
| classKind | entity | Тип класса (сущность, объект или интерфейс) |
| parent | Родительский класс (для наследования свойств и действий) | |
| abstract | False | Для абстрактных классов не создаются таблицы в хранилищах, они предназначены для дальнейшего наследования |
| unionContents | Список дочерних классов для объединения в единую коллекцию | |
| onlyAddProperties | Предполагается, что класс уже существует (создан на слое платформы), но в него необходимо добавить недостающие поля |

Autodelete
| Название параметра | Значение по-умолчанию | Комментарий |
|---|---|---|
| expiresMode | none | Режим автоматического удаления устаревших объектов (по истечении времени жизни)
Только для storage_mode =
|
| expiresTimestampPropertyName | Имя поля, относительно которого рассчитывается время жизни (timestamp, в миллисекундах unix time * 1000) | |
| expiresTimeToLivePropertyName | Имя поля, содержащего время жизни объекта (в секундах) |

Lookup
| Название параметра | Значение по-умолчанию | Комментарий |
|---|---|---|
| lookupLink | True | Разрешить ли переход к объектам данного типа по гиперссылкам |
| lookupLinkKind | Способ открытия гиперссылки:
| |
| lookupAddEnabled | Разрешить автоматическое пополнение справочника (добавление значений из выпадающих списков) | |
| lookupAddConfirmationText | Текст подтверждения при автоматическом пополнении справочника | |
| lookupAddValues | Значения при автоматическом пополнении справочника (JSON) | |
| lookupSearchExpr | Поле или список полей для поиска в выпадающих списках (JSON) | |
| indexedProperties | Индексированные свойства для быстрого поиска в локальном кэше |

Misc
| Название параметра | Значение по-умолчанию | Комментарий |
|---|---|---|
| historyChangesMode | Режим автоматического сохранения истории изменений объектов класса | |
| previousName | Предыдущее имя класса (fullMultiName, для автоматического переименования старой таблицы при активации пакета) | |
| enabled | Включен ли данный класс. Отключенные классы игнорируются при активации пакета |
Templates
| Название параметра | Значение по-умолчанию | Комментарий |
|---|---|---|
| generateCommunications | Генерация joined-свойства, содержащего средства связи | |
| generateUniversalHistory | Генерация вкладки с универсальной историей и комментариями |

Code
| Название параметра | Значение по-умолчанию | Комментарий |
|---|---|---|
| afterApplyUpdatesCode | Фрагмент кода, выполняемый после применения изменений (TypeScript) | |
| beforeInsertCode | Фрагмент кода, выполняемый перед добавлением (TypeScript) | |
| beforeModifyCode | Фрагмент кода, выполняемый перед изменением (TypeScript) | |
| beforeDeleteCode | Фрагмент кода, выполняемый перед удалением (TypeScript) |
Вкладка Properties
Опциональные параметры, определяют применение полей класса.

Блок Misc
| Название параметра | Значение по-умолчанию | Комментарий |
|---|---|---|
| keyPropertyName | Имя ключевого свойства (которое сохраняется в полях-ссылках других классов) | |
| displayPropertyName | Имя отображаемого свойства (которое отображается в выпадающих списках) | |
| colorPropertyName | Имя свойства, содержащего цвет (отображается в пользовательских интерфейсах) | |
| hashPropertyName | Имя свойства, хэш-функцией от которого определяется идентификатор id | |
| modificationTimePropertyName | Имя свойства, в которое автоматически сохраняется время последнего изменения объекта | |
| autoCalcCondition | Условие, при выполнении которого рассчитываются поля с заданным autoCalcExpression (TypeScript) |
Вкладка Security
Опциональные параметры, определяют настройки доступа к данным класса.

Roles access (allowed for all package roles if empty)
| Название параметра | Значение по-умолчанию | Комментарий |
|---|---|---|
| readRoles | Роли, которым разрешено чтение (если оба списка пусты – все роли пакета имеют разрешение на чтение и запись) | |
| writeRoles | Роли, которым разрешена запись (если оба списка пусты – все роли пакета имеют разрешение на чтение и запись) | |
| readByIDRoles | Роли, которым разрешено чтение по ИД (если полное чтение ограничено) |

readFilter
Фильтр, применяемый к классу при чтении (ограничивает выдачу строк).
Возможные параметры конфигурации фильтра можно посмотреть на портале вендора.
| Название параметра | Значение по-умолчанию | Комментарий |
|---|---|---|
| roles | ||
| userPropertyNames | ||
| subordintatedPropertyNames | ||
| mandatePropertyName | ||
| customFilter |
writeFilter
Блок writeFilter по составу аналогичен блоку readFilter.
Фильтр, применяемый к классу при записи (запрещает изменение строк).
Возможные параметры конфигурации фильтра можно посмотреть на портале вендора.
| Название параметра | Значение по-умолчанию | Комментарий |
|---|---|---|
| roles | ||
| userPropertyNames | ||
| subordintatedPropertyNames | ||
| mandatePropertyName | ||
| customFilter |
Вкладка UI
На данной вкладке содержится большое число параметров, влияющих на интерфейс работы с данными.
В данной статье будут рассмотрены только параметры, влияющие на логику работы класса. Остальные параметры UI будут рассмотрены в статье, посвещенной control'ам.

dataOptions
| Название параметра | Значение по-умолчанию | Комментарий |
|---|---|---|
| allowInsert | Доступно добавление данных | |
| allowInsertRoles | Роли с доступом к добавлению данных | |
| allowModify | Доступно изменение данных | |
| allowModifyRoles | Роли с доступом к изменению данных | |
| allowDelete | Доступно удаление данных | |
| allowDeleteRoles | Роли с доступом к удалению данных | |
| allowActions | Доступны действия класса | |
| autoCalcProperties | Использовать автоматический расчет значений полей | |
| autoRefreshInterval | Интервал автоматического обновления данных |
Вкладка Help
Опциональные параметры, опеределяют выводимые подсказки
| Название параметра | Значение по-умолчанию | Комментарий |
|---|---|---|
| description | Описание класса, выводится подсказкой в реестре класса | |
| includeProperties | Включать ли описания полей в текст подсказки | |
| includeActions | Включать ли описания действий в текст подсказки | |
| showInTable |
Следующая статья курса: Хранение данных. Классы. Поля и действия
Предыдущая статья курса: Быстрый старт