Системные атрибуты

_null

всегда возвращает null значение

_type

возвращает тип сущности

_notExists

возвращает true, если сущность не существует

_has

проверить наличие чего-то в значении. Например:
permissions._has.Write?bool
проверить наличие прав на изменение сущности

_edge

получить мета-информацию об атрибуте. (имя, заголовок, возможность просматривать, возможность редактировать и т.д.)

_edge.title.protected?bool
например, для того чтобы узнать, что атрибут защищен от редактирования

_alias

алиас сущности при сабмите. Используется, когда нужно создать несколько связанных сущностей.
т.к. ID новых сущностей станет известен только после того, как непосредственно они будут созданы, то необходим какой-то «фэйковый ID», чтобы на него ссылаться в атрибутах.
Например, хотим создать 2 сущности:
[
{"id": "emodel/some-type@", "attributes":{"link":"alias-value-0"}}, // тут link - это ассоциация. В ней мы пишем значение алиаса
{"id": "emodel/some-type@", "attributes":{"_alias":"alias-value-0"}, // тут _alias - это тот фейковый id под которым эта сущность представлена
]
Движок создает сущности с конца. Т.е. сначала создаст:
{"id": "emodel/some-type@", "attributes":{"_alias":"alias-value-0"}
получит идентификатор новой сущности emodel/some-type@123-123-123-123 пробежится по сущностям,
которые будут созданы далее и подменит все «alias-value-0» на реальный ID (emodel/some-type@123-123-123-123)
т.е. вторая сущность отправится на создание уже в виде:
{"id": "emodel/some-type@", "attributes":{"link":"emodel/some-type@123-123-123-123"}}

_parent

ассоциация на родителя

_parentAtt

родительский атрибут, по которому создается ссылка родитель->дочерняя_сущность

_formKey

ключ формы (в множественном варианте), которые можно использовать для редактирования сущности в порядке приоритета от большего к меньшему.
Позволяет связывать сущности без ECOS типа с формами (старые задачи, например).

_modified

дата изменения сущности

_modifier

изменивший сущность

_statusModified

хранит в себе дату последнего изменения статуса у записи

_created

дата создания сущности

_creator

создавший сущность

_content

содержимое сущности

_actions

действия

_docNum

номер документа, который генерируется по шаблону нумерации в типе

_status

текущий статус

_status?str

id текущего статуса

_name

атрибут, который возвращает отображаемое имя сущности.
Может быть вычислен следующим образом:
1. Если в конфиге типа есть dispNameTemplate, то имя будет вычислено на его основе
2. Если в типе есть атрибут с id=name и в сущности это поле не пустое, то его значение как раз будет значением _name
3. Берется name типа
4. Берется id типа
Вычисленное значение _name всегда сохраняется в БД и по нему можно искать

_self

атрибут, который представляет само значение.
Т.е. _self._self._self._self._self это то же самое что и _self._self
используется:
1. Там, где значение - это примитив (строка, число), но его нужно отредактировать на форме (форма может редактировать только атрибуты). В этом случае можно добавить на форме атрибут _self
2. Там, где нам нужно сделать мутацию передав на форме файл (или json объект), который по сути является сборником атрибутов сущности (форма с загрузкой конфигурацией артефактов например). Т.е. мы отправляем на бэк:
{"id":"abc", "attributes": {"_self": {"first":"second", "third":"fourh"}}}
и движок это воспринимает все равно что:
{"id":"abc", "attributes": {"first":"second", "third":"fourh"}}

_as

получить значение как что-то другое. Список вариантов зависит от типа значения.
Для строки доступно:
используется:
_as.ref - получить строку как ссылку на сущность
_as.mltext - получить строку как multi language text
_localId
_disp
_str
скаляры, которые можно получить как значения обычных атрибутов.
Т.е. в API доступ к скалярам идет через вопросительный знак (например, ?str и ?bin), но поменяв «?» на «_» мы получим те же данные, но уже в неконечном виде (т.е. можно будет запрашивать вложенные атрибуты).
Как вариант использования - берем свойство, в котором в виде строки записана ссылка на что-то другое. Пишем:
someField._str._as.ref.fieldFromRef
_roles.isCurrentUserMemberOf.initiator?bool
Является ли текущий пользователь представителем роли «инициатор». Вместо initiator можно подставлять любой идентификатор роли
_roles.assigneesOf.initiator[]?str
Загрузить представителей роли «инициатор». Вместо initiator можно подставлять любой идентификатор роли