Формулировка проблемы: для того, чтобы снизить частоту использования скриптинга форм, необходимо добавить инструмент для настройки свойств компонентов штатными средствами Synergy. В частности, позволить настраивать видимость, доступность изменения, обязательность заполнения и корректность значения компонента в зависимости от значений компонентов формы без применения скриптинга.
Решение:
В настройки всех компонентов добавить флаг "Скрытое поле", по умолчанию отключенный.
Этот флаг задает начальное состояние поля. В дальнейшем видимость поля может быть включена/отключена с помощью скриптов или условных действий, при этом состояние флага в настройках компонента не меняется.
Приоритет у флага ниже, чем у скриптов или действий с компонентом.
Группы действий:
В папку формы (при отображении в навигаторе) добавить новую вложенную папку "Условные действия". У этой папки есть специальный пункт контекстного меню: "Добавить группу действий".
При добавлении действия в папку в первую очередь в диалоге вводится его наименование. Позже наименование можно изменить через контекстное меню "Переименовать". К названиям применяются те же правила валидации, что и для кодов объектов.
Количество элементов в папке "Условные действия" не ограничено.
Доступно копирование и удаление группы.
При экспорте приложения папка формы должна содержать папку
conditional_actions
, в которой каждая
группа действий расположена в отдельном файле. Имя файла
совпадает с названием группы.
Работа с группами действий:
Группа действий открывается во внутренней вкладке формы:
В верхней части редактора находится кнопка "Добавить действие", которая добавляет новое действие в конец списка.
При клике по отображается подтверждение:
Вы действительно хотите удалить действие?
Если пользователь подтверждает удаление, то действие удаляется.
Сохранение действий выполняется при сохранении самой формы.
Действия:
Действие состоит из набора условий, налагаемых на значения компонентов формы, и набора действий, которые должны быть выполнены при выполнении условий.
Состав условия:
левый операнд: поле выбора id компонента формы (выпадающий список с текстовым поиском)
способ сравнения: выпадающий список со способами сравнения, которые используются в условных переходах, и новыми элементами "Пусто" и "Не пусто"
поле выбора типа правого операнда заблокировано, если в способе сравнения выбрано "Пусто" или "Не пусто"
правый операнд: выпадающий список для выбора типа операнда и поле для его указания:
если выбран тип "Компонент формы", то поле - выпадающий список компонентов формы с текстовым поиском;
для пункта "текстовое значение" - текстовое поле ввода;
для пункта "дата и время": поле выбора даты, поле ввода времени;
для пункта "объект Synergy - Пользователи": поле выбора пользователей;
для пункта "объект Synergy - Должности": поле выбора должностей;
для пункта "объект Synergy - Подразделения": поле выбора подразделений;
для пункта "запись реестра": поле выбора записи реестра, выбранного в левом операнде. Если левый операнд - не "Ссылка на реестр", или в нем не выбран реестр, то отображается ошибка "Не выбран реестр. Обратитесь к разработчику Synergy".
Если у операндов есть key
, то сравнение
выполняется по нему, иначе - сравнивается
value
.
Условия соединяются операторами И или ИЛИ, выбираемых из выпадающего списка. Если в списке выбран оператор, то добавляется новое условие. Если же в списке выбрано пустое значние, то следующее за ним условие удаляется (по аналогии с условиями в условном переходе). Количество соединяемых условий не ограничено.
В случае, когда указанный набор условий истинный, выполяются все указанные действия с компонентами формы. Количество действий также не ограничено.
Состав действия:
поле выбора id компонента формы (выпадающий список с текстовым поиском)
выбор действия из списка:
сделать обязательным
сделать не обязательным
включить доступность для редактирования
заблокировать от изменений
пометить правильно заполненным
пометить неправильно заполненным
скрыть
отобразить
Вне зависимости от выбранного компонента доступны все действия; если выбранное действие невозможно применить к компоненту (например, компонент "Лист подписей" должен быть помечен как неправильно заполненный), то действие игнорируется.
Одновременно может быть выполнено несколько действий с компонентами формы. Для добавления нового действия используется кнопка "+", при этом новое действие добавляется в конец списка.
Порядок выполнения действий не гарантируется: например, если для одного и того же компонента при выполнении одного условия указаны последовательно действия "скрыть" и "показать", то итоговое состояние компонента не определено. Контроль отсутствия подобных взаимоисключающих действий остается на стороне пользователя.
Если компонент формы находится в скрытом состоянии, то действия "сделать обязательным" и "пометить неправильно заполненным" игнорируются.
Действие удаляется по клику на . Если указано только одно действие с компонентом, оно не удаляется (не отображается иконка удаления).
Работа с компонентами динамических таблиц:
Сравнение компонентов разных динтаблиц и влияние их друг на друга не допускается: если в качестве левого операнда выбран компонент динамической таблицы, то список компонентов правой части и компонентов, над которыми выполняются действия, содержит компоненты только той же динтаблицы и компоненты, расположенные в основной таблице формы.
Если выполняется сравнение компонентов динтаблицы между
собой, то сравниваться должны
key
/value
компонентов
в одном блоке.
Если в результате сравнения компонентов динамической таблицы между собой или с другими компонентами формы / эталонными значениями нужно выполнить действие с компонентом, находящимся вне этой таблицы, то действие выполняется в случае, когда есть хотя бы один блок динтаблицы, для которого выполнено условие.
Действия, указанные для компонента в динамической таблице, выполняются только в том случае, если в этой таблице есть блок, для компонентов в котором выполнено условие, и только для компонента этого же блока.
В случае, когда в условии участвуют только компоненты основной таблицы формы, а в действиях указан компонент динамической таблицы, эти действия выполняются с этим компонентом во всех блоках (т.е. со всем столбцом).
Например:
На форме расположены:
компоненты cmp1
, cmp2
,
cmp3
динамическая таблица dyn_table
, в которой
находятся компоненты c1
,
c2
и c3
.
Задано условие:
Если dyn_table.c1
= cmp1
и dyn_table.c2
= cmp2
, то: видимость t1.c3
отключить, видимость cmp3
отключить.
Значение компонентов формы:
Результат выполнения действия:
Поле cmp3
скрыто, т.к. нашелся блок в таблице,
для компонентов которого выполнено условие.
Поле dyn_table.c3
скрыто в блоке 3, т.к. для
компонентов в этом блоке выполнено условие.