Системные атрибуты
Системные атрибуты — зарезервированные атрибуты платформы Citeck, доступные для любой сущности вне зависимости от её типа. Они начинаются с символа _ и предоставляют служебную информацию: метаданные сущности, права доступа, статус, мета-информацию об атрибутах, а также управляют поведением операций чтения и записи.
Системные атрибуты используются в тех же контекстах, что и обычные атрибуты: в Records API, в конфигурации журналов, форм, вычислениях и бизнес-процессах.
Атрибут |
Описание |
|---|---|
_null |
всегда возвращает |
_type |
возвращает тип сущности |
_notExists |
возвращает |
_has |
проверить наличие чего-то в значении. Например:
проверить наличие прав на изменение сущности
|
_edge |
получить мета-информацию об атрибуте (имя, заголовок, возможность просматривать, возможность редактировать и т.д.):
например, для того чтобы узнать, что атрибут защищён от редактирования
|
_alias |
алиас сущности при сабмите. Используется, когда нужно создать несколько связанных сущностей.
Т.к. ID новых сущностей станет известен только после того, как непосредственно они будут созданы, то необходим «фиктивный ID», чтобы на него ссылаться в атрибутах.
Например, хотим создать 2 сущности:
Движок создаёт сущности с конца. Т.е. сначала создаст:
получит идентификатор новой сущности emodel/some-type@123-123-123-123, пробежится по сущностям,
которые будут созданы далее и подменит все
alias-value-0 на реальный ID emodel/some-type@123-123-123-123.Т.е. вторая сущность отправится на создание уже в виде:
|
_parent |
ассоциация на родителя |
_parentAtt |
родительский атрибут, по которому создаётся ссылка родитель → дочерняя сущность |
_formKey |
ключ формы (в множественном варианте), которые можно использовать для редактирования сущности в порядке приоритета от большего к меньшему.
Позволяет связывать сущности без ECOS типа с формами (старые задачи, например).
|
_modified |
дата изменения сущности |
_modifier |
изменивший сущность |
_statusModified |
дата последнего изменения статуса у записи |
_created |
дата создания сущности |
_creator |
создавший сущность |
_content |
содержимое сущности |
_actions |
действия |
_docNum |
номер документа, который генерируется по шаблону нумерации в типе |
_status |
текущий статус |
_stage |
этап |
_status?str |
id текущего статуса |
_name |
атрибут, который возвращает отображаемое имя сущности.
Может быть вычислен следующим образом:
1. Если в конфиге типа есть dispNameTemplate, то имя будет вычислено на его основе
2. Если в типе есть атрибут с id=name и в сущности это поле не пустое, то его значение будет значением
_name3. Берётся name типа
4. Берётся id типа
Вычисленное значение _name всегда сохраняется в БД и по нему можно искать
|
_self |
атрибут, который представляет само значение.
Т.е.
_self._self._self._self._self — то же самое что и _self._self.Используется:
1. Там, где значение — примитив (строка, число), но его нужно отредактировать на форме (форма может редактировать только атрибуты). В этом случае можно добавить на форме атрибут _self.
2. Там, где нужно сделать мутацию, передав на форме файл (или JSON-объект), который по сути является сборником атрибутов сущности (например, форма с загрузкой конфигурации артефактов). Т.е. при отправке:
движок воспринимает это так же, как:
|
_isDraft?bool |
Получить значение системного флага «Черновик». Для записей в черновике отключена проверка обязательности полей и не запускается бизнес-процесс. |
_as |
получить значение как другой тип. Список вариантов зависит от типа значения.
Для строки доступно:
_as.ref — получить строку как ссылку на сущность
_as.mltext — получить строку как multi language text
|
_localId
_disp
_str
|
скаляры, которые можно получить как значения обычных атрибутов.
Т.е. в API доступ к скалярам идёт через вопросительный знак (например, ?str и ?bin), но заменив «?» на «_» мы получим те же данные в неконечном виде (т.е. можно запрашивать вложенные атрибуты).
Как вариант использования — берём свойство, в котором в виде строки записана ссылка на что-то другое. Пишем:
|
_roles.isCurrentUserMemberOf.initiator?bool
|
Является ли текущий пользователь представителем роли «инициатор». Вместо
initiator можно подставлять любой идентификатор роли |
_roles.assigneesOf.initiator[]?str
|
Загрузить представителей роли «инициатор». Вместо
initiator можно подставлять любой идентификатор роли |
_pathByAssoc.someAssoc[]{?id,?disp}
|
Загрузить путь до текущей записи через ассоциацию с id
someAssoc |
_pathByParent[]{?id,?disp}
|
Загрузить путь до текущей записи через ассоциацию с id
_parent |