Основная динамика в интерфейсе форм и страниц достигается за счёт отображения или скрытия определённого контента и виджетов в зависимости от условий или действий пользователя. Иногда кнопку необходимо отобразить либо после выполнения определённых действий или расчётов, либо при наличии у пользователя соответствующих прав. Иногда, наоборот, необходимо скрыть блоки формы, которые ещё не нужны или заполнены до конца. Существует множество вариантов использования динамики на формах, и в системе есть возможности для их реализации.
Для управления видимостью виджетов предусмотрена настройка Видимость, которую можно найти в настройках практически любого виджета на вкладке Системные.
Кроме того, для добавленных на форму полей из контекста приложения может применяться настройка Отображается при выполнении условия.
Рассмотрим эти опции подробнее.
Эти базовые опции позволяют всегда показывать или всегда скрывать виджет, независимо от каких-либо условий. По умолчанию для всех виджетов установлено значение Показывать всегда.
При выборе значения видимости Показать по условию можно привязать к настройкам видимости поле из контекста формы или страницы. Нажмите <Не установлено>, чтобы выбрать поле для привязки. Если в контексте есть поле типа Приложение, вы можете развернуть его и использовать его свойства без ограничений по уровню вложенности.
После выбора поля, к которому привязано отображение виджета, в настройках можно увидеть его название. Значение поля проверяется при рендере виджета на странице или форме для определения его отображения. Если поле имеет значение true или приводимое к true, то виджет будет отображён, в противном случае — скрыт.
Рассмотрим пример.
Вы можете отображать кнопку для перехода к следующей части формы только тогда, когда пользователь введёт название установленной длины.
Для этого создайте в контексте поле типа Выбор «да/нет» (boolean) c кодом showButton.
Добавьте на форму виджет Кнопка, для которого задана настройка видимости Показать по условию. Привяжите отображение виджета к созданному полю контекста.
Также добавьте и вынесите на форму поле Название.
В настройках виджета Строка формы, в котором размещается название, откройте вкладку События и задайте событие при изменении значения. Создайте новую функцию, например, nameChanged, и перейдите к её редактированию, нажав на кнопку Открыть.
В функции будет проверяться текущее значение строки с названием и, в зависимости от её длины, будет меняться значение поля контекста showButton. Если длина строки более пяти символов, то showButton будет присваиваться значение true, иначе — false:
Используя привязку значения видимости к полю типа Выбор «да/нет» и меняя его значение через скрипты, можно установить сложные, многосоставные условия отображения виджета для реализации любых настроек видимости.
Рассмотрим, как будет работать отображение кнопки на форме, настроенной выше. Теперь, пока текст в поле Название не более пяти символов длиной, созданная кнопка будет скрыта.
Однако, как только длина текста достигает шести символов, условие видимости возвращает true, и кнопка появляется на форме.
Опция Скрыть по условию работает по тому же принципу, что и предыдущая, но наоборот. Виджет скрывается, когда связанное поле контекста имеет значение или может быть приведено к значению true, в обратном случае виджет отображается.
Например, создайте в контексте поле типа Выбор «да/нет» и назовите его Скрыть кнопку (hideButton).
Разместите его в шаблоне формы.
В настройках видимости кнопки выберите Скрыть по условию и привяжите её отображение к созданному полю Скрыть кнопку.
Теперь, когда свойство Скрыть кнопку имеет значение true, кнопка скрывается.
Чтобы отображать содержимое формы или страницы только для определённых групп пользователей, например, в целях ограничения по правам, предусмотрена опция Показать для групп. При выборе данной опции появляется поле для выбора групп пользователей.
Чтобы выбрать группу, начните вводить её название в поле и выберите вариант из выпадающего списка или нажмите на значок лупы и выберите группу в открывшемся окне.
Список выбранных групп отображается под полем для ввода.
Когда вы добавляете на форму поле из контекста приложения, оно помещается внутри виджета-контейнера Строка формы. Его отображение определяется одной из настроек:
опцией Отображается при выполнении условия, заданной для поля в настройках формы приложения.
Она позволяет применять комплексные условия видимости без использования скрипта. Подробнее читайте в официальной справке ELMA365.
опцией видимости, выбранной в дизайнере интерфейсов в настройках виджета Строка формы: Показывать всегда, Показать по условию и т. д.
Рассмотрим, как выбирается приоритетность применения настройки:
Если используется опция видимости Показывать всегда, Скрывать всегда или Показать для групп, то приоритетность настроек можно изменить.
Для этого перейдите в настройки форм приложения. В зависимости от формы, на которой вы настраиваете отображение поля, откройте вкладку Создание, Просмотр или Редактирование. Вы можете:
добавить поле в список свойств — опция Отображается при выполнении условия станет приоритетной, а настройки видимости из виджета не применятся;
удалить поле из списка свойств — приоритет будет иметь настройка видимости, заданная в виджете. Опция Отображается при выполнении условия не будет работать.
Обратите внимание, удаление виджета Стандартная форма элемента с формы не влияет на приоритетность настроек.
Если используется опция видимости Показать по условию или Скрыть по условию, то настройка видимости в виджете всегда имеет приоритет. Опция Отображается при выполнении условия не влияет на отображение поля на форме.
Как сделать динамическое отображение полей и виджетов со сложным условием
Основная динамика в интерфейсе форм и страниц достигается за счёт отображения или скрытия определённого контента и виджетов в зависимости от условий или действий пользователя. Иногда кнопку необходимо отобразить либо после выполнения определённых действий или расчётов, либо при наличии у пользователя соответствующих прав. Иногда, наоборот, необходимо скрыть блоки формы, которые ещё не нужны или заполнены до конца. Существует множество вариантов использования динамики на формах, и в системе есть возможности для их реализации.
Для управления видимостью виджетов предусмотрена настройка Видимость, которую можно найти в настройках практически любого виджета на вкладке Системные.
Вы можете выбрать одну из опций видимости:
Кроме того, для добавленных на форму полей из контекста приложения может применяться настройка Отображается при выполнении условия. Рассмотрим эти опции подробнее.
Показывать всегда. Скрывать всегда
Эти базовые опции позволяют всегда показывать или всегда скрывать виджет, независимо от каких-либо условий. По умолчанию для всех виджетов установлено значение Показывать всегда.
Показать по условию
При выборе значения видимости Показать по условию можно привязать к настройкам видимости поле из контекста формы или страницы. Нажмите <Не установлено>, чтобы выбрать поле для привязки. Если в контексте есть поле типа Приложение, вы можете развернуть его и использовать его свойства без ограничений по уровню вложенности.
После выбора поля, к которому привязано отображение виджета, в настройках можно увидеть его название. Значение поля проверяется при рендере виджета на странице или форме для определения его отображения. Если поле имеет значение
true
или приводимое кtrue
, то виджет будет отображён, в противном случае — скрыт.Рассмотрим пример.
Вы можете отображать кнопку для перехода к следующей части формы только тогда, когда пользователь введёт название установленной длины.
Для этого создайте в контексте поле типа Выбор «да/нет» (boolean) c кодом
showButton
.Добавьте на форму виджет Кнопка, для которого задана настройка видимости Показать по условию. Привяжите отображение виджета к созданному полю контекста.
Также добавьте и вынесите на форму поле Название.
В настройках виджета Строка формы, в котором размещается название, откройте вкладку События и задайте событие при изменении значения. Создайте новую функцию, например,
nameChanged
, и перейдите к её редактированию, нажав на кнопку Открыть.В функции будет проверяться текущее значение строки с названием и, в зависимости от её длины, будет меняться значение поля контекста
showButton
. Если длина строки более пяти символов, тоshowButton
будет присваиваться значениеtrue
, иначе —false
:async function nameChanged(): Promise<void> { Context.data.showButton = Context.data.name && Context.data.name.length > 5 ? true : false; }
Используя привязку значения видимости к полю типа Выбор «да/нет» и меняя его значение через скрипты, можно установить сложные, многосоставные условия отображения виджета для реализации любых настроек видимости.
Рассмотрим, как будет работать отображение кнопки на форме, настроенной выше. Теперь, пока текст в поле Название не более пяти символов длиной, созданная кнопка будет скрыта.
Однако, как только длина текста достигает шести символов, условие видимости возвращает
true
, и кнопка появляется на форме.Скрыть по условию
Опция Скрыть по условию работает по тому же принципу, что и предыдущая, но наоборот. Виджет скрывается, когда связанное поле контекста имеет значение или может быть приведено к значению
true
, в обратном случае виджет отображается.Например, создайте в контексте поле типа Выбор «да/нет» и назовите его Скрыть кнопку (
hideButton
).Разместите его в шаблоне формы.
В настройках видимости кнопки выберите Скрыть по условию и привяжите её отображение к созданному полю Скрыть кнопку.
Теперь, когда свойство Скрыть кнопку имеет значение
true
, кнопка скрывается.Если значение поля
false
, кнопка отображается.Показать для групп
Чтобы отображать содержимое формы или страницы только для определённых групп пользователей, например, в целях ограничения по правам, предусмотрена опция Показать для групп. При выборе данной опции появляется поле для выбора групп пользователей.
Чтобы выбрать группу, начните вводить её название в поле и выберите вариант из выпадающего списка или нажмите на значок лупы и выберите группу в открывшемся окне.
Список выбранных групп отображается под полем для ввода.
Отображается при выполнении условия
Когда вы добавляете на форму поле из контекста приложения, оно помещается внутри виджета-контейнера Строка формы. Его отображение определяется одной из настроек:
Рассмотрим, как выбирается приоритетность применения настройки:
Обратите внимание, удаление виджета Стандартная форма элемента с формы не влияет на приоритетность настроек.