Изменение видимости детали в зависимости от значения поля
Вопрос
Я создал деталь [Документы водителя], схема UsrSchema6Detail, в разделе [Контакты]. Мне необходимо показывать ее если выбрана должность [Водитель]. Если должность не выбрана или выбрана другая, то деталь скрыта.
Я добавил бизнес правило в схему контакты, оно не работает.
rules: { "UsrSchema6Detail": { BindParametrVisibilePlaceByType: { // Тип правила BINDPARAMETER. ruleType: BusinessRuleModule.enums.RuleType.BINDPARAMETER, // Правило регулирует свойство VISIBLE поля. property: BusinessRuleModule.enums.Property.VISIBLE, conditions: [{ // Выражение левой части условия. leftExpression: { //Тип выражения ATTRIBUTE указывает на то, что в качестве выражения выступает // аттрибут (колонка) модели представления. type: BusinessRuleModule.enums.ValueType.ATTRIBUTE, // Название колонки модели представления, значение которой сравнивается в выражении. attribute: "Job" }, // Тип операции сравнения. comparisonType: Terrasoft.ComparisonType.EQUAL, // Выражение правой части условия. rightExpression: { type: BusinessRuleModule.enums.ValueType.CONSTANT, value: "703e34d6-4113-43b5-84dc-2e1f8635c6d4" } }] } } }
Если я применяю это же правило к колонке [Департамент], то оно работает так как надо.
Ответ
Для решения Вашей бизнес задачи использование бизнес правил не подходит.
Вот пример кода для скрытия детали [Средства связи] на карточке редактирования [Контрагента].
Создаете замещающий модуль AccountPagev2, в секции diff добавляете следующий код:
{ "operation": "merge", "name": "Communications", "values": { "visible" : { "bindTo": "communicationsVisibility" } } }
Объявляете метод отвечающий за видимость детали в секции methods:
communicationsVisibility: function(){ var type = this.get("Type"); return !!type && type.displayValue === "Наша компания"; }
В результате деталь будет видима только в случае, если “Тип” указан как “Наша компания”. По аналогии можно скрывать любую деталь.