Настройка компонента
Allow Manual Override of Calculated Value / Разрешить ручное переопределение вычисляемого значения
Настройка расположена на вкладке «Данные».
При помощи Allow Manual Override of Calculated Value / Разрешить ручное переопределение вычисляемого значения поле перевычисляется до тех пор, пока пользователь не поменяет это значение.
Описание работы
Режим создания
Чтобы calculated value установилось, необходимо, чтобы valueChangedByUser = false (при условии, что включен Allow Manual Override of Calculated Value). Тогда в режиме создания достаточно просто очистить компонент, и calculatedValue снова заполнит его.
Режим редактирования
В режиме редактирования если очистить компонент, то это также считается за пользовательские правки, следовательно, нет возможности снова получить значение из calculatedValue.
Описание полей и логики
Имя |
Значение по умолчанию |
Описание |
---|---|---|
calculatedValue |
null |
вычисленное значение |
dataValue |
значение с сервера |
значение в поле |
режим формы |
по умолчанию выставить значение «CREATE».
Возможные значения - CREATE, EDIT
|
|
calculatedValueWasCalculated |
Внутренний флаг, по которому определяется первое это вычисление значения или нет.
После первого вычисления проставляется в true.
|
|
valueChangedByUser |
false |
Внутренний флаг, который определяет, что текущее значение (dataValue) отвязано от вычисленного |
До проставления dataValue у всех полей проверятся, что никакая логика с формы не начинает вычисляться.
Для каждого перевычисления calculatedValue:
После первого вычисления calculatedValue (первое или нет определяется по флагу calculatedValueWasCalculated) проставляется значение флага valueChangedByUser.
calculatedValueWasCalculated проставляется в true
Если флаг valueChangedByUser = false, то меняется dataValue, иначе с dataValue действия не производятся
Дополнительная логика:
Если значение dataValue меняется пользователем, то проставляется флаг valueChangedByUser = true
Пример работы с компонентом TableForm
Задача
данные должны вычисляться на основе компонента 1 и помещаться в компонент 2, и после этого у пользователя должна быть возможность их изменять.
И если пользователь ошибся или изменил решение, то удалить данные из компонента 2 и снова путем перевыбора в компоненте 1 получить другие данные и также изменять их:
- Реализация:
использование флага allow Manual Override,
но вместо calculated value, логика подтягивания записей перенесена в раздел компонента «Logic» (table form)
Логика включается по событию нажатия кнопки (только когда пользователь действительно хочет перезаписать свои значения вычисленными)
Итог: работает перезапись, ручной запуск вычисления данных (на формах создания и редактирования). Не работало ранее, до использования instance.setValue().