Обязательность поля для заполнения, с привязкой к атрибуту - не работает, хотя визуально отображается.

7.10 (Sales)
В типовой карточке Активности (LeadPageV2), поле DetailedResult потребовалось установить его обязательность для заполнения в зависимости от определенных условий и действий пользователя.
в замещающей схеме был добавлен аттрибут

attributes: {
...
    "DetailedResultRequire": {
        type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
        dataValueType: Terrasoft.DataValueType.BOOLEAN,
        value: false
    },
...


соответственно, привязка свойства isRequred для поля расширена через merge

 

diff: {
...
    {
        "operation": "merge",
        "name": "DetailedResult",
        "values": {
            "isRequired": {bindTo: "DetailedResultRequire"}
        }
    },
...


Далее была проработана логика, которая включает в себя реакцию на изменение значения в поле Result для чего были описаны соответствующая зависимость

 

 

attributes: {
...
        "Result": {
            dependencies: [
                {
                    columns: ["Result"],
                    methodName: "DetailedResultRequireController"
                }
            ]
        }
...


ну и собственно сам метод "DetailedResultRequireController",
н/п упростим его до тривиальности -

 

 

methods: {
...
    "DetailedResultRequireController": function() {
        var targetStage = this.get("Status");
        var targetResult = this.get("Result");
        var requireState = false;
        if (targetStage.displayValue === "Завершена" && targetResult.displayValue === "Отменена") {
            requireState = true;
        }
        this.set("DetailedResultRequire", requireState);
    }
...


который производит некие проверки и устанавливать/сбрасывать значение целевого атрибута "DetailedResultRequire", тем самым контролируя обязательность поля "Результат подробно"
PS: Аналогичные кейсы реализовывались множество раз в других типовых карточках и карточках собственной разработки.

 

 

В конечном итоге, поведение весьма удивительное.
Зависимость от изменения значения поля "Результат" => срабатывает.
Метод-обработчик выполняется => устанавливает значение атрибута
=> у искомого поля появляется "*" (звездочка) [т.е. view реагирует на смену значения атрибута]
но это не мешает произвести сохранение карточки, штатные механизмы валидации или игнорируют сей факт или не выполняются вовсе

вот как-то так это выглядит (GIF-ка):

Ума не приложу где можно было бы искать проблему.
Возможно у пользователей сообщества возникали аналогичные ситуации, или есть идеи на счет причин такого поведения ?

Нравится

7 комментариев

Здравствуйте, попробуйте бизнес правила:
https://academy.terrasoft.ru/documents/technic-sdk/7-8/biznes-pravila-i…

Бизнес-правила, это бизнес-правила, это здесь не при чем. :smile:
Почему может не работать "привязка" обязательности к атрибуту ? - вот вопрос.
Такая логика с точки зрения архитектуры - более чем допустима, до появления бизнес-правил в "перерожденном виде" это использовалось везде и всюду.
Хочется понять природу проблемы.

Почему "звездочка" есть
А валидации - нет ?

"Севостьянов Илья Сергеевич" написал:Почему "звездочка" есть
А валидации - нет ?

Исходя из того, что обсуждается в этой теме http://www.community.terrasoft.ru/forum/topic/12633, такая проблема была обнаружена в более ранних версиях, но, судя по Вашему примеру, так до сих пор и не решена.

Проблема платформы? :wink:

Зарегистрировали проблему. Будет решено в след. версиях. На тек. момент используйте БП.

В 7.8 и 7.9 активно пользовались биндингами к isRequired, работало нормально, судя по всему в 7.10 наблюдается эта проблема, скорее всего как раз из-за "новых бизнес-правил".
Очень ждем версии с решением, т.к. много кода связано с этими биндингами, да и бизнес-правилами сложную логику не реализовать никак.
Как временное решение - добавлять бизнес правила, которые в зависимости от значения именно атрибута (на который делался биндинг) будет устанавливать обязательность.
Т.е. все ваши биндинги к isRequired необходимо повторить в бизнес-правилах.

Показать все комментарии