Аспекты

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

Один и тот же аспект можно подключить к нескольким типам данных, что позволяет переиспользовать логику без дублирования. Аспект может быть добавлен к типу явно — через вкладку Аспекты в настройках типа, или автоматически — в зависимости от конфигурации.

Атрибуты аспекта доступны через префикс в формате {prefix}:{attribute.id}, что позволяет однозначно идентифицировать их в формах, журналах, конфигурациях действий и мутациях записей.

В Citeck представлены системные аспекты для типовых задач: учёт времени, управление связями между документами, генерация штрихкода, конфигурация истории событий, импорт данных и обработка активностей.

Журнал аспектов доступен по адресу: v2/journals?journalId=ecos-aspects&viewMode=table&ws=admin$workspace

Модель аспекта

id: String // Идентификатор аспекта
name: MLText // Имя аспекта (справочная информация)
prefix: String // Префикс аспекта. Будет добавляться перед идентификатором каждого атрибута, которые описаны в attributes и systemAttributes
configFormRef: EntityRef // Ссылка на форму, которую следует использовать для редактирования конфигурации аспекта в типе ECOS
attributes: List<AttributeDef> // Атрибуты аспекта, которые будут добавлены к сущностям с данным аспектом
systemAttributes: List<AttributeDef> // Системные атрибуты аспекта, которые будут добавлены к сущностям с данным аспектом. Системные атрибуты могут быть изменены только под пользователем system.

В конфигурации типа предусмотрено поле aspects, которое содержит список аспектов и их конфигурацию:

TypeDef
...
aspects: List<TypeAspectDef>
...

TypeAspectDef
ref: EntityRef // ссылка на аспект
config: ObjectData // конфигурация аспекта

API

Проверить наличие аспекта у сущности

await Records.get('emodel/some-id@local-id').load('_aspects._has.aspectToTest?bool!')

где,

emodel/some-id@local-id - идентификатор сущности, у которой мы хотим проверить наличие аспекта

aspectToTest - идентификатор аспекта, наличие которого мы проверяем

Получить конфиг аспекта из сущности

await Records.get('emodel/some-id@local-id').load('_type.aspectById.you-aspect-id.config')

Добавить аспект к сущности

Примечание

Добавление так же происходит автоматически, когда мы проставляем для сущности атрибут из аспекта

var rec = Records.get('emodel/some-id@local-id');
rec.att('att_add__aspects', 'emodel/aspect@aspectToAdd');
await rec.save();

где,

emodel/some-id@local-id - идентификатор сущности, к которой мы хотим добавить аспект

aspectToAdd - идентификатор аспекта, который мы добавляем

Удаление аспекта

var rec = Records.get('emodel/some-id@local-id');
rec.att('att_rem__aspects', 'emodel/aspect@aspectToRemove');
await rec.save();

где,

emodel/some-id@local-id - идентификатор сущности, у которой мы хотим удалить аспект

aspectToRemove - идентификатор аспекта, который мы удаляем.

Пользовательское описание работы с аспектами