Настройка компонента ====================== .. _manual_override: Allow Manual Override of Calculated Value / Разрешить ручное переопределение вычисляемого значения --------------------------------------------------------------------------------------------------- Настройка расположена на вкладке **"Данные"**. При помощи **Allow Manual Override of Calculated Value / Разрешить ручное переопределение вычисляемого значения** поле перевычисляется до тех пор, пока пользователь не поменяет это значение. .. image:: _static/calculated_value.png :width: 600 :align: center Описание работы ~~~~~~~~~~~~~~~~~~ Режим создания """""""""""""""""""""" Чтобы **calculated value** установилось, необходимо, чтобы **valueChangedByUser = false** (при условии, что включен **Allow Manual Override of Calculated Value**). Тогда в режиме создания достаточно просто очистить компонент, и **calculatedValue** снова заполнит его. Режим редактирования """""""""""""""""""""" В режиме редактирования если очистить компонент, то это также считается за пользовательские правки, следовательно, нет возможности снова получить значение из **calculatedValue**. Описание полей и логики ~~~~~~~~~~~~~~~~~~~~~~~~~ .. list-table:: :widths: 5 10 20 :header-rows: 1 :class: tight-table * - Имя - Значение по умолчанию - Описание * - **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 получить другие данные и также изменять их: .. image:: _static/calculated_value_table.png :width: 600 :align: center Реализация: 1. использование флага **allow Manual Override**, 2. но вместо **calculated value**, логика подтягивания записей перенесена в раздел компонента **«Logic»** (table form) 3. Логика включается по событию нажатия кнопки (только когда пользователь действительно хочет перезаписать свои значения вычисленными) Итог: работает перезапись, ручной запуск вычисления данных (на формах создания и редактирования). Не работало ранее, до использования **instance.setValue()**. .. _custom_default_value: Custom Default Value / Пользовательское значение по умолчанию -------------------------------------------------------------- Настройка расположена на вкладке **"Данные"**. Свойство **customDefaultValue** позволяет задать динамическое значение по умолчанию при помощи JavaScript-выражения. Результат присваивается переменной ``value``. Выражение выполняется при инициализации формы в режиме создания. .. note:: Статическое свойство ``defaultValue`` предназначено только для фиксированных значений. Для динамических (текущая дата, текущий пользователь и т.д.) используйте ``customDefaultValue``. Примеры ~~~~~~~~ Текущая дата для компонента Date/Time: .. code-block:: javascript value = new Date(); Фиксированная строка для текстового поля: .. code-block:: javascript value = "значение по умолчанию"; Пример JSON-конфигурации компонента Date/Time с текущей датой: .. code-block:: json { "key": "startDate", "type": "datetime", "input": true, "format": "yyyy-MM-dd", "enableTime": false, "customDefaultValue": "value = new Date();", "defaultValue": "" } .. _current_user_by_default: Current User by Default / Текущий пользователь по умолчанию (selectOrgstruct) ------------------------------------------------------------------------------- Настройка расположена на вкладке **"Кастомные"** компонента **selectOrgstruct**. Свойство **currentUserByDefault** автоматически подставляет текущего пользователя в поле при открытии формы на создание. Настройка работает только в режиме создания (``formMode = CREATE``) и только для компонента ``selectOrgstruct``. Пример JSON-конфигурации: .. code-block:: json { "key": "responsible", "type": "selectOrgstruct", "input": true, "allowedAuthorityType": "USER", "currentUserByDefault": true, "defaultValue": "" } .. note:: Для динамических значений по умолчанию в других типах компонентов используйте ``customDefaultValue`` (см. :ref:`Custom Default Value `).