# Правила связывания

## Введение

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

Настраивая правила связывания, вы можете, например:

- Скрывать или отображать определённые блоки в зависимости от текущей роли пользователя. Разные роли могут видеть блоки с различным объёмом данных: например, администраторы видят блоки с полной информацией, в то время как обычные пользователи могут видеть только блоки с базовой информацией.
- При выборе определённой опции в форме автоматически заполнять или сбрасывать значения других полей.
- При выборе определённой опции в форме отключать некоторые поля ввода.
- При выборе определённой опции в форме делать некоторые поля ввода обязательными.
- Управлять видимостью или кликабельностью кнопок действий при определённых условиях.

## Настройка условий

![20251029114532](https://static-docs.nocobase.com/20251029114532.png)

### Левая переменная

Левая переменная в условии используется для определения «объекта оценки» в правиле связывания. Условие оценивается на основе значения этой переменной, чтобы определить, следует ли запускать действие связывания.

Доступные переменные включают:

- Поля в контексте, такие как `Текущая форма/xxx`, `Текущая запись/xxx`, `Текущая запись во всплывающем окне/xxx` и т. д.
- Системные глобальные переменные, такие как `Текущий пользователь`, `Текущая роль` и т. д., подходящие для динамического управления на основе идентификации пользователя, разрешений и другой информации.
  > ✅ Доступные опции для левой переменной определяются контекстом блока. Используйте левую переменную разумно, исходя из бизнес-потребностей:
  >
  > - `Текущий пользователь` представляет информацию о текущем вошедшем в систему пользователе.
  > - `Текущая форма` представляет значения, введённые в форму в реальном времени.
  > - `Текущая запись` представляет сохранённое значение записи, например, строку в таблице.

### Оператор

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

- **Текстовый тип**: `$includes`, `$eq`, `$ne`, `$empty`, `$notEmpty` и т. д.
- **Числовой тип**: `$eq`, `$gt`, `$lt`, `$gte`, `$lte` и т. д.
- **Булев тип**: `$isTruly`, `$isFalsy`
- **Тип массива**: `$match`, `$anyOf`, `$empty`, `$notEmpty` и т. д.

> ✅ Система автоматически предложит список доступных операторов на основе типа левой переменной, чтобы обеспечить логичность конфигурации.

### Правое значение

Используется для сравнения с левой переменной и является эталонным значением для определения выполнения условия.

Поддерживаемое содержимое включает:

- Константные значения: введите фиксированные числа, текст, даты и т. д.
- Контекстные переменные: например, другие поля в текущей форме, текущая запись и т. д.
- Системные переменные: например, текущий пользователь, текущее время, текущая роль и т. д.

> ✅ Система автоматически адаптирует метод ввода для правого значения в зависимости от типа левой переменной, например:
>
> - Если левая сторона является «полем выбора», будет отображён соответствующий селектор опций.
> - Если левая сторона является «полем даты», будет отображён выбор даты.
> - Если левая сторона является «текстовым полем», будет отображено текстовое поле ввода.

> 💡 Гибкое использование правых значений (особенно динамических переменных) позволяет создавать логику связывания на основе текущего пользователя, текущего состояния данных и контекста, тем самым обеспечивая более мощный интерактивный опыт.

## Логика выполнения правил

### Срабатывание условия

Когда условие в правиле выполняется (необязательно), действие по изменению свойства, расположенное ниже, будет выполнено автоматически. Если условие не задано, правило по умолчанию считается всегда выполненным, и действие по изменению свойства будет выполнено автоматически.

### Несколько правил

Вы можете настроить несколько правил связывания для одной формы. Когда условия нескольких правил выполняются одновременно, система будет выполнять их по порядку, от первого к последнему, то есть последнее выполненное правило будет определять окончательный результат.
Пример: Правило 1 устанавливает поле как «Отключено», а Правило 2 устанавливает поле как «Редактируемое». Если условия обоих правил выполняются, поле станет «Редактируемым».

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

## Управление правилами

С каждой записью правила можно выполнять следующие операции:

- Пользовательское именование: задайте легко понятное имя для правила для удобства управления и идентификации.
- Сортировка: настройте порядок на основе приоритета выполнения правил, чтобы система обрабатывала их в правильной последовательности.
- Удаление: удаляйте правила, которые больше не нужны.
- Включение/отключение: временно отключайте правило, не удаляя его. Это удобно в случаях, когда правило необходимо временно деактивировать.
- Копирование правила: создавайте новое правило, копируя существующее, чтобы избежать повторной настройки.

## О переменных

При присвоении значений полям и настройке условий поддерживаются как константы, так и переменные. Список переменных будет различаться в зависимости от расположения блока. Разумный выбор и использование переменных позволяет более гибко удовлетворять бизнес-потребности. Для получения дополнительной информации о переменных, пожалуйста, обратитесь к разделу [Переменные](/interface-builder/variables).

## Правила связывания блоков

Правила связывания блоков позволяют динамически управлять отображением блока на основе системных переменных (таких как текущий пользователь, роль) или контекстных переменных (таких как текущая запись во всплывающем окне). Например, администратор может просматривать полную информацию о заказе, в то время как роль службы поддержки клиентов может видеть только определённые данные заказа. С помощью правил связывания блоков вы можете настраивать соответствующие блоки на основе ролей и устанавливать различные поля, кнопки действий и области данных внутри этих блоков. Когда вошедшая в систему роль соответствует целевой роли, система отобразит соответствующий блок. Важно отметить, что блоки отображаются по умолчанию, поэтому обычно вам нужно определять логику для скрытия блока.

👉 Подробнее см.: [Блок/Правила связывания блоков](/interface-builder/blocks/block-settings/block-linkage-rule)

## Правила связывания полей

Правила связывания полей используются для динамической настройки состояния полей в форме или блоке деталей на основе действий пользователя, в основном включая:

- Управление состоянием **отображения/скрытия** поля
- Установка поля как **обязательного**
- **Присвоение значения**
- Выполнение JavaScript для обработки пользовательской бизнес-логики

👉 Подробнее см.: [Блок/Правила связывания полей](/interface-builder/blocks/block-settings/field-linkage-rule)

## Правила связывания действий

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

👉 Подробнее см.: [Действие/Правила связывания](/interface-builder/actions/action-settings/linkage-rule)