Обязательность поля для заполнения, с привязкой к атрибуту - не работает, хотя визуально отображается.
7.10 (Sales)
В типовой карточке Активности (LeadPageV2), поле DetailedResult потребовалось установить его обязательность для заполнения в зависимости от определенных условий и действий пользователя.
в замещающей схеме был добавлен аттрибут
...
"DetailedResultRequire": {
type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
dataValueType: Terrasoft.DataValueType.BOOLEAN,
value: false
},
...
соответственно, привязка свойства isRequred для поля расширена через merge
...
{
"operation": "merge",
"name": "DetailedResult",
"values": {
"isRequired": {bindTo: "DetailedResultRequire"}
}
},
...
Далее была проработана логика, которая включает в себя реакцию на изменение значения в поле Result для чего были описаны соответствующая зависимость
...
"Result": {
dependencies: [
{
columns: ["Result"],
methodName: "DetailedResultRequireController"
}
]
}
...
ну и собственно сам метод "DetailedResultRequireController",
н/п упростим его до тривиальности -
...
"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-ка):
Ума не приложу где можно было бы искать проблему.
Возможно у пользователей сообщества возникали аналогичные ситуации, или есть идеи на счет причин такого поведения ?
Нравится
Здравствуйте, попробуйте бизнес правила:
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 необходимо повторить в бизнес-правилах.