Аспекты
Аспект — механизм расширения функционала типа данных без изменения самого типа. Аспект добавляет к сущностям дополнительные атрибуты, форму конфигурации и связанное поведение, при этом тип данных остаётся неизменным.
Один и тот же аспект можно подключить к нескольким типам данных, что позволяет переиспользовать логику без дублирования. Аспект может быть добавлен к типу явно — через вкладку Аспекты в настройках типа, или автоматически — в зависимости от конфигурации.
Атрибуты аспекта доступны через префикс в формате {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 - идентификатор аспекта, который мы удаляем.