Настройка компонента

Allow Manual Override of Calculated Value / Разрешить ручное переопределение вычисляемого значения

Настройка расположена на вкладке «Данные».

При помощи Allow Manual Override of Calculated Value / Разрешить ручное переопределение вычисляемого значения поле перевычисляется до тех пор, пока пользователь не поменяет это значение.

../../../../_images/calculated_value.png

Описание работы

Режим создания

Чтобы 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:

  1. После первого вычисления calculatedValue (первое или нет определяется по флагу calculatedValueWasCalculated) проставляется значение флага valueChangedByUser.

  2. calculatedValueWasCalculated проставляется в true

  3. Если флаг valueChangedByUser = false, то меняется dataValue, иначе с dataValue действия не производятся

Дополнительная логика:

  1. Если значение dataValue меняется пользователем, то проставляется флаг valueChangedByUser = true

Пример работы с компонентом TableForm

Задача

данные должны вычисляться на основе компонента 1 и помещаться в компонент 2, и после этого у пользователя должна быть возможность их изменять.

И если пользователь ошибся или изменил решение, то удалить данные из компонента 2 и снова путем перевыбора в компоненте 1 получить другие данные и также изменять их:

../../../../_images/calculated_value_table.png
Реализация:
  1. использование флага allow Manual Override,

  2. но вместо calculated value, логика подтягивания записей перенесена в раздел компонента «Logic» (table form)

  3. Логика включается по событию нажатия кнопки (только когда пользователь действительно хочет перезаписать свои значения вычисленными)

Итог: работает перезапись, ручной запуск вычисления данных (на формах создания и редактирования). Не работало ранее, до использования instance.setValue().