Правила данных в домене
Этот раздел описывает правила данных в домене.
В блоке dataRules схемы домена вы можете задавать специальные правила данных. Правила данных — это выражения, которые при выполнении определенных условий:
-
ограничивают возможные операции с атрибутами и связями сущностей;
-
контролируют допустимые значения атрибутов и связей.
Правила данных выполняются на уровне атрибутов и связей сущностей и содержат следующие компоненты:
-
условие, которое должно выполняться;
-
параметр для атрибутов или связей, соответствующих условию.
| Ознакомьтесь с правилами нотации в схеме домена. Это позволит присваивать корректные названия создаваемым элементам схемы. Эти названия будут отображаться в интерфейсе системы. |
Логика работы правил данных
|
Проверка согласно правилам данных выполняется только после успешной проверки согласно правилам атрибутов. Например, если для атрибута установлено правило |
-
Правила данных могут лишь дополнять и усиливать существующие ограничения и правила атрибутов, но не ослаблять их.
Например, если для атрибута установлено
readonly: true, в правиле данных нельзя сделать этот атрибут редактируемым. -
В правиле можно использовать все атрибуты сущности, включая системные, а также атрибуты типов
WorkflowиEnum.-
Для атрибута типа
Arrayобъектом правила может быть как весь массив, так и конкретные элементы массива. -
Для атрибута типа
Tableобъектом правила может быть как вся таблица, так и конкретные столбцы таблицы.
-
-
Правила данных поддерживают наследование:
-
Правило можно определить как для Родителя, так и для Потомка. В правиле Потомка можно использовать атрибуты Родителя.
-
Если в правиле указана ссылка на сущность Родителя, правило применяется только для объектов Родителя.
-
Если в правиле указана ссылка на сущность Потомка, правило применяется только для объектов Потомка.
-
Структура поля dataRules
Путь в схеме: dataRules[]
Поле dataRules представляет собой массив записей правил данных для атрибутов сущности. Каждый элемент массива имеет следующую структуру:
| Поле | Обязательность и значение по умолчанию | Тип данных | Описание |
|---|---|---|---|
|
да |
Data ID |
Уникальный идентификатор правила. |
|
да |
строка |
Название правила. |
|
нет (по умолчанию — пустая строка) |
строка |
Описание правила. |
|
да |
перечисление |
Тип объекта правила. Допустимые значения:
|
|
да (при |
Data ID Ref |
Ссылка на идентификатор сущности, к которой применяется правило. Объектом может быть сущность, расположенная как в текущем, так и в другом домене. |
|
да (при |
Data ID Ref |
Ссылка на идентификатор связи, к которой применяется правило. |
|
да (при |
Data ID Ref |
Ссылка на идентификатор атрибута. Доступно, если объектом правила определен атрибут с типом |
|
да |
логическое или RQL-выражение |
Условие, при истинности которого применяется заданное правило:
Ознакомьтесь с описанием поля |
|
да |
объект |
Описание действия правила. Ознакомьтесь с описанием поля |
|
нет (по умолчанию — пустая строка) |
строка |
|
|
нет (по умолчанию — пустая строка) |
строка |
Условие правила данных (condition)
Путь в схеме: dataRules[].condition
В поле condition указывается условие, которое определяет, в каких случаях применяется правило данных. Условие может быть задано в одном из следующих вариантов:
-
Всегда истина (
true) — правило применяется безусловно. -
RQL-выражение — правило применяется, только если выражение возвращает значение
true.
В рамках RQL-выражения доступно обращение к следующим данным:
-
данные сущностей из текущего и других доменов:
-
идентификатор сущности;
-
значения атрибутов сущности, в том числе значения элементов массивов и перечислений, атрибутов таблиц, этапов рабочих процессов и метаданных файлов.
-
-
данные связей при использовании стороны связи с одним объектом (1-1, 1-N):
-
атрибуты связи;
-
идентификатор связанной сущности;
-
атрибуты связанной сущности.
-
-
данные окружения:
-
текущий пользователь и связанные с ним характеристики: идентификатор, имя, роли, группы и организации.
-
текущие дата и время, а также их составляющие.
-
В выражении можно применять операторы сравнения и специальные функции. Подробный перечень доступных операторов, функций и псевдонимов приведен в руководстве по RQL.
Описание действия правила данных (rule)
Путь в схеме: dataRules[].rule
Поле имеет следующую структуру:
| Поле | Обязательность и значение по умолчанию | Тип данных | Описание |
|---|---|---|---|
|
да |
перечисление |
Действие, выполняемое над объектом при истинности условия. Ознакомьтесь с доступными значениями. |
|
да |
массив |
Определения значений для объектов правила. Ознакомьтесь с описанием поля |
|
да (для |
Определения значений для объектов правила. Доступно, если правило применяется к конкретным столбцам таблицы или элементам массива. Ознакомьтесь с описанием поля |
объект |
|
нет |
массив |
Определения значений для связей. Доступно при Ознакомьтесь с описанием поля |
Действие над атрибутом (effect)
Путь в схеме: dataRules[].rule.effect
Когда правило данных срабатывает, над объектом выполняется действие. Это действие обусловлено значением поля effect:
-
hidden— скрыть указанные атрибуты для отображения в пользовательском интерфейсе и API. -
readonly— сделать поле существующего объекта недоступным для редактирования. -
required— сделать поле обязательным для заполнения. -
default— использовать значение по умолчанию. -
allowed— проверить значения на допустимость или предоставить для выбора только допустимые значения.
Скрытие (effect: hidden)
Эффект hidden скрывает виджеты атрибутов и связей, указанных в правиле:
-
В таблице списка объектов скрываются значения в столбцах, соответствующих условию правила.
-
В карточке и окнах объекта скрывается объект правила.
Заголовок группы виджетов остается видимым, даже если согласно правилу скрыты все виджеты в группе. -
При запросе через API данные об объекте правила не передаются.
|
Не рекомендуется применять эффект |
Для атрибута типа Array с помощью параметра можно скрыть как весь массив, так и конкретные элементы:
-
Если объект правила — атрибут-массив, скрывается весь атрибут.
-
Если объект правила — элементы массива, и в поле
itemуказано значение'*', скрываются все элементы. -
Если объект правила — элементы массива, и в поле
itemуказан индекс элемента, скрывается указанный элемент.
Для атрибута типа Table с помощью параметра можно скрыть как всю таблицу, так и конкретный столбец:
-
Если объект правила — таблица, скрывается вся таблица.
-
Если объект правила — столбец таблицы, и для условия используется атрибут сущности, столбец скрывается во всех строках таблицы.
-
Если объект правила — столбец таблицы, и для условия используется другой столбец таблицы, значение столбца скрывается в строках таблицы, соответствующих условию. Сами столбцы при этом не скрываются.
Примеры скрытия значений в атрибуте-таблице
dataRules:
- id: hidden_usersTable
name: Скрытие таблицы.
target: entity
entity: Incident
condition: !rql incidentTime < CAST('10:00', 'Time')
rule:
effect: hidden
# Правило применяется к отдельным атрибутам таблицы.
attributes:
- attribute: incidentArtifactsTable
Правило hidden_usersTable применяется для всех строк таблицы. Таким образом, если значение атрибута incidentTime текущего объекта меньше 10.00, его атрибут-таблица incidentArtifactsTable скрывается полностью.
dataRules:
- id: hidden_usersAttrInTable
name: Скрытие столбцов с пользовательскими атрибутами в таблице
target: entityAttribute
entity: Incident
attribute: incidentArtifactsTable
# В условии используется атрибут сущности, а не атрибут атрибута-таблицы.
condition: !rql incidentTime < CAST('10:00', 'Time')
rule:
effect: hidden
# Правило применяется к отдельным атрибутам таблицы.
nested:
type: table
attributes:
- attribute: incidentArtifactsResp
- attribute: incidentArtifactsReport
Правило hidden_usersAttrInTable применяется для всех строк таблицы. Таким образом, если значение атрибута incidentTime текущего объекта меньше 10.00, в таблице полностью скрываются столбцы incidentArtifactsResp и incidentArtifactsReport.
dataRules:
- id: required_baseAttrInTableRow
name: Обязательность атрибутов для конкретной строки таблицы
target: entityAttribute
entity: Incident
attribute: incidentArtifactsTable
# Условие для конкретной строки должно быть с указанием атрибута таблицы. Обращение к атрибуту таблицы через @row.
condition: !rql |
@row.incidentArtifactStatus = 'REGISTERED'
rule:
effect: required
nested:
type: table
attributes:
- attribute: incidentArtifactsResp
- attribute: incidentArtifactsReport
Правило required_baseAttrInTableRow применяется только к ячейкам строк, для которых выполняется условие. Таким образом, если значение атрибута incidentArtifactStatus в текущей строке таблицы равно "REGISTERED", значения столбцов incidentArtifactsResp и incidentArtifactsReport в ячейках этой строки скрываются. Сами столбцы при этом отображаются в таблице.
Эффект hidden не поддерживается для атрибутов с типом Counter и RQL.
|
Если нужно скрыть часть значений атрибута типа Enum, используйте эффект default
|
Запрет редактирования (effect: readonly)
Эффект readonly запрещает редактирование атрибутов и связей, указанных в правиле:
-
Значение заполняется один раз, при создании объекта.
-
Иконки и опции редактирования скрываются в компактном и полноэкранном представлениях, а также в окне редактирования. Если объект правила — атрибут типа
TableилиArray, в редакторах таблиц и массивов скрываются иконки и опции редактирования. -
При запросе через API данные об объекте правила не редактируются.
|
Не рекомендуется применять эффекты |
Для атрибута типа Array параметр можно применять как ко всему массиву, так и к конкретному элементу:
-
Если объект правила — атрибут-массив, массив становится недоступным для редактирования. Опции добавления, удаления и изменения элементов массива скрываются.
-
Если объект правила — элементы массива, и в поле
itemуказано значение'*', все текущие элементы массива становятся нередактируемыми: опции изменения и удаления элементов скрываются. При этом можно добавлять новые элементы. -
Если объект правила — элементы массива, и в поле
itemуказан индекс элемента, нередактируемым становится указанный элемент: опции изменения и удаления элементов скрываются.
Примеры нередактируемых значений в массиве
dataRules:
- id: readonly_ArrayIpAddress
name: Нередактируемость массива
target: entity
entity: Incident
condition: !rql attributesString = 'special'
message: Значения недоступны для редактирования.
rule:
effect: readonly
attributes:
- attribute: IpAddress
Правило readonly_ArrayIpAddress применяется для массива в целом. Таким образом, в массиве нельзя изменять существующие элементы и добавлять новые.
dataRules:
- id: readonly_itemArrayIpAddress
name: Нередактируемость всех элементов массива
target: entityAttribute
entity: Incident
attribute: IpAddress
condition: !rql attributesString = 'special'
message: Элементы недоступны для редактирования.
rule:
effect: readonly
nested:
type: array
items:
# Применение ко всем элементам массива.
- item: '*'
Правило readonly_itemArrayIpAddress применяется для всех элементов таблицы. Таким образом, в массиве нельзя изменять существующие элементы, но можно добавлять новые.
dataRules:
- id: readonly_itemArrayIpAddress_first
name: Нередактируемость конкретных элементов массива
target: entityAttribute
entity: Incident
attribute: IpAddress
condition: !rql attributesString = 'special'
message: Элементы недоступны для редактирования.
rule:
effect: readonly
nested:
type: array
items:
# Применение к конкретному элементу массива -- первому.
- item: 0
...
Правило readonly_itemArrayIpAddress_first применяется к указанным элементам массива. Таким образом, недоступен для редактирования первый элемент массива, остальные можно изменять.
Для атрибута типа Table параметр можно применять как ко всей таблице, так и к конкретному столбцу:
-
Если объект правила — таблица, атрибут таблицы становится недоступными для редактирования.
-
Если объект правила — столбец таблицы, и для условия используется атрибут сущности, столбец становится нередактируемым во всех строках таблицы.
-
Если объект правила — столбец таблицы, и для условия используется другой столбец таблицы, столбец становится нередактируемым в строках таблицы, соответствующих условию.
Эффект readonly не поддерживается для атрибутов с типами Counter, Identifier, и RQL, а также для системных атрибутов, помимо organizationId.
|
Обязательность (effect: required)
Эффект required делает обязательным заполнение атрибутов или установление связей, указанных в правиле. При запросе через API необходимо заполнить атрибуты или связи сущности, указанные в правиле.
| При редактировании атрибута в карточке объекта может сработать правило об обязательности другого атрибута. Поскольку при таком редактировании значения сохраняются для каждого атрибута отдельно, выполнение условия обязательности становится невозможным. В таком случае система предложит пользователю перейти в окно для редактирования объекта. |
|
Не рекомендуется применять эффекты |
Для атрибута типа Array параметр можно применять как ко всему массиву, так и к конкретному элементу массива:
-
Если объект правила — массив, необходимо добавить хотя бы один элемент массива.
-
Если объект правила — элементы массива, указанные в правиле элементы становятся обязательными.
Для атрибута типа Table параметр можно применять как ко всей таблице, так и к конкретному столбцу:
-
Если объект правила — таблица, необходимо добавить хотя бы одну строку таблицы.
-
Если объект правила — столбец таблицы, и для условия используется атрибут сущности, столбец обязателен во всех строках таблицы.
-
Если объект правила — столбец таблицы, и для условия используется другой столбец таблицы, столбец обязателен в строках таблицы, соответствующих условию.
Эффект required не поддерживается для атрибутов с типами Counter, Identifier и RQL, а также для системных атрибутов, помимо organizationId.
|
Значение по умолчанию (effect: default)
Эффект default подставляет в объект правила данных значение по умолчанию, указанное в блоке values, если пользователь не указал иное значение.
|
Если в условии правила данных используются данные связи, эффект не применяется при редактировании в компактном представлении. Пример. Правило данных задает для атрибута объекта значение по умолчанию в зависимости от наличия связи: Пример правила данных
Пользователь создает связь |
Блок values содержит массив объектов "объект правила — значение". Объект должен быть уникален в рамках конкретного правила данных.
Значение по умолчанию можно задать следующими способами:
-
Указать статическое значение, соответствующее типу данных атрибута.
-
Задать RQL-выражение, которое возвращает значение, соответствующее типу данных атрибута.
|
Чтобы сгенерировать значение по умолчанию для атрибута типа
|
Эффект default не поддерживается для связей, системных атрибутов и атрибутов с типами Attachment, Counter, Identifier, Reference, RQL Table и Workflow.
|
Проверка допустимости (effect: allowed)
Эффект allowed проверяет значение на допустимость:
-
Для атрибутов типа
EnumиWorkflow: отфильтровывает список значений для выбора согласно выражению, заданному в полеexpression.-
При создании объекта значение атрибута типа
Workflowвсегда будетinitial, эффектallowedне применяется. -
При редактировании список значений атрибута типа
Workflowбудет отфильтрован в соответствии с ограничениями эффектаallowedс учетом возможных переходов из текущего статуса согласно схеме домена.
-
-
Проверяет введенное значение на допустимость согласно ограничению, заданному в поле
constraint.Если значение не задано пользователем, оно равно
NULL. Поэтому проверка на отсутствие значения должна быть задана явно с использованием оператораIS NULLилиIS NOT NULL.
Если в отношении одного и того же объекта правила срабатывает несколько правил, фильтры объединяются через логическое "И".
| При редактировании атрибута в карточке объекта может сработать проверка допустимости другого атрибута. Поскольку при таком редактировании значения сохраняются для каждого атрибута отдельно, выполнение условия допустимости становится невозможным. В таком случае система предложит пользователю перейти в окно для редактирования объекта. |
Эффект allowed не поддерживается для связей и атрибутов типа Array, Counter, Reference, RQL и Table.
|
Атрибуты, подпадающие под правило (attributes)
Путь в схеме: dataRules[].attributes[]
Каждый элемент массива имеет следующую структуру:
| Поле | Обязательное поле | Описание | Тип данных |
|---|---|---|---|
|
да |
Ссылка на идентификатор атрибута, подпадающего под действие правила. |
Data ID Ref |
|
да (при |
Выражение на языке RQL, которое определяет ограничение для возможных значений атрибута, например, выражение сравнения со значениями атрибутов объектов. Выражение должно возвращать логическое значение. Если в поле |
RQL-выражение или выражение сравнения |
|
да (подробности в описании) |
Значение по умолчанию для атрибута при Если в поле |
Значение соответствующего типа данных. |
|
да (подробности в описании) |
Выражение на языке RQL, которое возвращает вычисленное значение соответствующего типа данных. Если в поле
|
RQL-выражение |
|
нет |
Сообщение, отображаемое в случае ошибки выполнения правила. Доступно, если значение в поле Ознакомьтесь с описанием поля |
строка |
|
нет |
Сообщение, отображаемое при наведении курсора на иконку справки. Доступно, если значение в поле Ознакомьтесь с описанием поля |
строка |
Элементы массива и атрибуты таблицы (nested)
Путь в схеме: dataRules[].nested
Поля items и attributes представляют собой массив записей атрибутов, подпадающих под действие правила, их возможных значений и отображаемых сообщений.
Поле имеет следующую структуру:
| Поле | Обязательное поле | Описание | Тип данных |
|---|---|---|---|
|
да |
Тип атрибута. Возможные значения:
|
перечисление |
|
да (для |
Массив определения значений для объектов правила. Запись включает поле |
массив |
|
да (для |
Массив определения значений для объектов правила. Запись включает поле Доступные значения индекса:
|
массив |
Связи, подпадающие под правило (linkages)
Путь в схеме: dataRules[].linkages[]
Каждый элемент массива имеет следующую структуру:
| Поле | Обязательность и значение по умолчанию | Тип данных | Описание |
|---|---|---|---|
|
да |
Data ID Ref |
Ссылка на идентификатор связи, подпадающей под действие правила. |
|
нет |
строка |
|
|
нет |
строка |
Сообщение при применении правила (message)
Путь в схеме:
-
dataRules[].message -
dataRules[].attributes[].message
Поле message содержит текст сообщения, отображаемого при применении правила данных в интерфейсе и ответе API:
-
В поле
messageвнутри элемента блокаdataRulesсодержится единое сообщение для всех атрибутов объекта правила. -
В поле
messageвнутри записи действия для атрибута содержится сообщение для конкретного атрибута.
message для всех атрибутовdataRules:
- id: required_attributes
...
description: атрибуты становятся обязательными, если сработало условие в поле condition
target: entity
entity: incident
condition: !rql incidentStatus = 'Подтвержден'
message: "Укажите значения атрибутов!"
rule:
effect: required
attributes:
- attribute: incidentGuid
- attribute: registrationDate
- attribute: ipAddress
...
message для конкретных атрибутовdataRules:
- id: required_attributes
...
description: атрибуты становятся обязательными, если сработало условие в поле condition
target: entity
entity: incident
condition: !rql incidentStatus = 'Подтвержден'
rule:
effect: required
attributes:
- attribute: incidentGuid
message: "Укажите GUID!"
- attribute: registrationDate
message: "Укажите дату регистрации!"
- attribute: ipAddress
message: "Укажите IP-адрес!"
...
Сообщение справки (help)
Путь в схеме:
-
dataRules[].help -
dataRules[].attributes[].help
Поле help содержит текст сообщения, отображаемого при наведении курсора на иконку справки.
-
В поле
helpвнутри блокаdataRulesсодержится единое сообщение для всех атрибутов объекта правила. -
В поле
helpвнутри записи действия для атрибута содержится сообщение для конкретного атрибута.
help для всех атрибутовdataRules:
- id: required_attributes
...
description: атрибуты становятся обязательными, если сработало условие в поле condition
target: entity
entity: incident
condition: !rql incidentStatus = 'Подтвержден'
help: "Необходимо заполнить все поля."
rule:
effect: required
attributes:
- attribute: incidentGuid
- attribute: registrationDate
- attribute: ipAddress
...
help для конкретных атрибутовdataRules:
- id: required_attributes
...
description: атрибуты становятся обязательными, если сработало условие в поле condition
target: entity
entity: incident
condition: !rql incidentStatus = 'Подтвержден'
rule:
effect: required
attributes:
- attribute: incidentGuid
help: "Необходимо указать GUID."
- attribute: registrationDate
help: "Необходимо дату регистрации инцидента."
- attribute: ipAddress
help: "Необходимо указать IP-адрес устройства."
...
Была ли полезна эта страница?