Иногда возникает необходимость в изменении свойств атрибутов прямо во время редактирования объекта. Например, нужно показать атрибут только в том случае, если другой атрибут имеет определенное значение.
В декларативном фреймворке Evado динамическое изменение свойств атрибутов классов реализовано через настройки действий, которые зависят от текущих данных объекта в момент его редактирования.
Настройки создаются для конкретного атрибута и могут содержать условия для следующих действий:
- Показать (show) - показать атрибут при выполнении условия, иначе скрыть.
- Требовать (require) - сделать атрибут обязательным при выполнении условия, иначе необязательный.
- Активировать (enable) - сделать атрибут доступным для редактирования при выполнении условия, иначе только для чтения.
- Значение (value) - установить атрибуту заданное значение при выполнении условия.
Условие действия задается в формате JSON. Нормализованный шаблон условия имеет формат ["оператор", ..."операнды"]. Например, условие ["notEmpty","attrName"] выполнится, если атрибут с кодовым именем attrName имеет не пустое значение. Количество и тип операндов зависят от оператора. Список операторов можно найти здесь.
Условие равенства может быть записано в нормальном формате ["=","attrName","value"] или в сокращенном - {"attrName":"value"}.
Оператор может быть логическим. Тогда каждый его операнд - это отдельное условие. Например, ["and", {"attr1": true}, [">","attr2", 5]].
Для настройки действия «Значение» формат определен как
["значение", ["оператор", ..."операнды"]].
Обратите внимание, что настройки действий могут только увеличивать ограничения заданные в метаданных. Например, если в метаданных задано, что атрибут только для чтения, то настройка активности не сделает его редактируемым.
Настройки обязательности и активности проверяются на сервере при сохранении объекта. У обязательного атрибута должно быть не пустое значение. Неактивный атрибут изменить нельзя.
В атрибуте представления можно задать свои настройки действий, которые переопределят те, что заданы в атрибуте класса.
Настройку действий можно задать и для группы. Она будет влиять на все входящие в группу атрибуты. Если у атрибута уже есть настройки, то они будут скомбинированы с групповыми. Для настройки обязательности через логическое ИЛИ, для настройки активности через логическое И.
Рабочий пример настроек действий можно посмотреть в демо-приложении в модуле «Офис» меню «Настройки действий».