Задача [IDE8]: Настройка условных действий с компонентами формы

Формулировка проблемы: для того, чтобы снизить частоту использования скриптинга форм, необходимо добавить инструмент для настройки свойств компонентов штатными средствами Synergy. В частности, позволить настраивать видимость, доступность изменения, обязательность заполнения и корректность значения компонента в зависимости от значений компонентов формы без применения скриптинга.

Решение:

  1. В настройки всех компонентов добавить флаг "Скрытое поле", по умолчанию отключенный.

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

Приоритет у флага ниже, чем у скриптов или действий с компонентом.

  1. Группы действий:

    • В папку формы (при отображении в навигаторе) добавить новую вложенную папку "Условные действия". У этой папки есть специальный пункт контекстного меню: "Добавить группу действий".

    • При добавлении действия в папку в первую очередь в диалоге вводится его наименование. Позже наименование можно изменить через контекстное меню "Переименовать". К названиям применяются те же правила валидации, что и для кодов объектов.

    • Количество элементов в папке "Условные действия" не ограничено.

    • Доступно копирование и удаление группы.

    • При экспорте приложения папка формы должна содержать папку conditional_actions, в которой каждая группа действий расположена в отдельном файле. Имя файла совпадает с названием группы.

  2. Работа с группами действий:

    • Группа действий открывается во внутренней вкладке формы:

    Рисунок 47. Вкладка с условными действиями

    Вкладка с условными действиями

    • В верхней части редактора находится кнопка "Добавить действие", которая добавляет новое действие в конец списка.

    • При клике по отображается подтверждение:

      Вы действительно хотите удалить действие? 
      

      Если пользователь подтверждает удаление, то действие удаляется.

    • Сохранение действий выполняется при сохранении самой формы.

  3. Действия:

    • Действие состоит из набора условий, налагаемых на значения компонентов формы, и набора действий, которые должны быть выполнены при выполнении условий.

    • Состав условия:

      • левый операнд: поле выбора id компонента формы (выпадающий список с текстовым поиском)

      • способ сравнения: выпадающий список со способами сравнения, которые используются в условных переходах, и новыми элементами "Пусто" и "Не пусто"

        • поле выбора типа правого операнда заблокировано, если в способе сравнения выбрано "Пусто" или "Не пусто"

      • правый операнд: выпадающий список для выбора типа операнда и поле для его указания:

        • если выбран тип "Компонент формы", то поле - выпадающий список компонентов формы с текстовым поиском;

        • для пункта "текстовое значение" - текстовое поле ввода;

        • для пункта "дата и время": поле выбора даты, поле ввода времени;

        • для пункта "объект Synergy - Пользователи": поле выбора пользователей;

        • для пункта "объект Synergy - Должности": поле выбора должностей;

        • для пункта "объект Synergy - Подразделения": поле выбора подразделений;

        • для пункта "запись реестра": поле выбора записи реестра, выбранного в левом операнде. Если левый операнд - не "Ссылка на реестр", или в нем не выбран реестр, то отображается ошибка "Не выбран реестр. Обратитесь к разработчику Synergy".

    • Если у операндов есть key, то сравнение выполняется по нему, иначе - сравнивается value.

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

    • В случае, когда указанный набор условий истинный, выполяются все указанные действия с компонентами формы. Количество действий также не ограничено.

    • Состав действия:

      • поле выбора id компонента формы (выпадающий список с текстовым поиском)

      • выбор действия из списка:

        • сделать обязательным

        • сделать не обязательным

        • включить доступность для редактирования

        • заблокировать от изменений

        • пометить правильно заполненным

        • пометить неправильно заполненным

        • скрыть

        • отобразить

    • Вне зависимости от выбранного компонента доступны все действия; если выбранное действие невозможно применить к компоненту (например, компонент "Лист подписей" должен быть помечен как неправильно заполненный), то действие игнорируется.

    • Одновременно может быть выполнено несколько действий с компонентами формы. Для добавления нового действия используется кнопка "+", при этом новое действие добавляется в конец списка.

    • Порядок выполнения действий не гарантируется: например, если для одного и того же компонента при выполнении одного условия указаны последовательно действия "скрыть" и "показать", то итоговое состояние компонента не определено. Контроль отсутствия подобных взаимоисключающих действий остается на стороне пользователя.

    • Если компонент формы находится в скрытом состоянии, то действия "сделать обязательным" и "пометить неправильно заполненным" игнорируются.

    • Действие удаляется по клику на . Если указано только одно действие с компонентом, оно не удаляется (не отображается иконка удаления).

  4. Работа с компонентами динамических таблиц:

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

    • Если выполняется сравнение компонентов динтаблицы между собой, то сравниваться должны key/value компонентов в одном блоке.

    • Если в результате сравнения компонентов динамической таблицы между собой или с другими компонентами формы / эталонными значениями нужно выполнить действие с компонентом, находящимся вне этой таблицы, то действие выполняется в случае, когда есть хотя бы один блок динтаблицы, для которого выполнено условие.

    • Действия, указанные для компонента в динамической таблице, выполняются только в том случае, если в этой таблице есть блок, для компонентов в котором выполнено условие, и только для компонента этого же блока.

    • В случае, когда в условии участвуют только компоненты основной таблицы формы, а в действиях указан компонент динамической таблицы, эти действия выполняются с этим компонентом во всех блоках (т.е. со всем столбцом).

Например:

На форме расположены:

Задано условие:
Если dyn_table.c1 = cmp1 и dyn_table.c2 = cmp2, то: видимость t1.c3 отключить, видимость cmp3 отключить.

Значение компонентов формы:

Рисунок 48. Значение компонентов формы

Значение компонентов формы

Результат выполнения действия:

Рисунок 49. Результат выполнения действия

Результат выполнения действия

Поле cmp3 скрыто, т.к. нашелся блок в таблице, для компонентов которого выполнено условие.

Поле dyn_table.c3 скрыто в блоке 3, т.к. для компонентов в этом блоке выполнено условие.