Отображаемое поле Контакта в зависимости от Типа

Добрый день!

Необходимо отображать поле Департамент в зависимости от Типа контакта.
Добавляю код в замещаемый модуль Контакта:
rules: {
"Department": {
BindParameterVisibleDepartmentByType: {
ruleType: BusinessRuleModule.enums.RuleType.BINDPARAMETER,
property: BusinessRuleModule.enums.Property.VISIBLE,
conditions: [{
leftExpression: {
type: BusinessRuleModule.enums.ValueType.ATTRIBUTE,
attribute: "Type"
},
comparisonType: Terrasoft.ComparisonType.EQAL,
rightExpression: {
type: BusinessRuleModule.enums.ValueType.CONSTANT,
value: ConfigurationConstants.ContactType.Client
}
}]
}
}
},

Возникает ошибка "Неверный формат правила BindParameterVisibleDepartmentByType".
Почему-то не может определить тип правила.

Нравится

24 комментария
comparisonType : Terrasoft.ComparisonType.EQAL
comparisonType : Terrasoft.ComparisonType.EQUAL

Да, спасибо. Ошибки теперь нет.

Но почему-то скрывает не поле, а некоторые детали...

Александра, проверьте, может быть у Вас на странице добавлена деталь с названием "Department" (свойство name объекта массива diff). Она и скрывается.

Детали нет. Есть поле:
{
"operation": "insert",
"parentName": "JobInformationBlock",
"propertyName": "items",
"name": "Department",
"values": {
"contentType": Terrasoft.ContentType.ENUM,
"layout": {"column": 0, "row": 1}
}
},

А скажите пожалуйста, как отображаются у вас остальные поля на в родителе JobInformationBlock?

Возможно проблема в родительском элементе, или накладываются элементы в layout. А вообще надо смотреть на страницу целиком

Сейчас не скрываются, даже Департамент. Скрывается детали Внутренние и Внешние ставки.
В целом я только фильтрацию пытаюсь добавить и одно поле, в остальном стандартная страница ContactPageV2. Весь код:
define("ContactPageV2", ["terrasoft", "BusinessRuleModule", "ContactPageV2Resources", "ConfigurationConstants",
"ConfigurationItemGenerator", "ContactCommunicationDetailV2", "ext-base", "sandbox",
"DuplicatesSearchUtilitiesV2"],
function(Terrasoft, BusinessRuleModule, resources, ConfigurationConstants) {
return {
entitySchemaName: "Contact",
attributes: {
"UsrDepartmentStr": {
name: "UsrDepartmentStr",
dataValueType: Terrasoft.DataValueType.TEXT,
type: Terrasoft.ViewModelColumnType.TEXT
}
},
rules: {
"Department": {
"BindParameterVisibleDepartmentByType": {
ruleType: BusinessRuleModule.enums.RuleType.BINDPARAMETER,
property: BusinessRuleModule.enums.Property.VISIBLE,
conditions: [{
leftExpression: {
type: BusinessRuleModule.enums.ValueType.ATTRIBUTE,
attribute: "Type"
},
comparisonType: Terrasoft.ComparisonType.EQUAL,
rightExpression: {
type: BusinessRuleModule.enums.ValueType.CONSTANT,
value: ConfigurationConstants.ContactType.Employee
}
}]
}
}
},
diff: [
{
"operation": "insert",
"parentName": "JobInformationBlock",
"propertyName": "items",
"name": "UsrDepartmentStr",
"values": {
"layout": {"column": 0, "row": 1}
}
}
]
};
});

Попробуйте вместо бизнес-правил использовать привязку свойства visible. Примерно так:

define("ContactPageV2", ["terrasoft", "BusinessRuleModule", "ContactPageV2Resources", "ConfigurationConstants",
	"ConfigurationItemGenerator", "ContactCommunicationDetailV2", "ext-base", "sandbox",
	"DuplicatesSearchUtilitiesV2"],
	function(Terrasoft, BusinessRuleModule, resources, ConfigurationConstants) {
		return {
			entitySchemaName: "Contact",
			attributes: {
				"UsrDepartmentStr": {
					name: "UsrDepartmentStr",
					dataValueType: Terrasoft.DataValueType.TEXT,
					type: Terrasoft.ViewModelColumnType.TEXT
				}
			},
			diff: [
				{
					"operation": "insert",
					"parentName": "JobInformationBlock",
					"propertyName": "items",
					"name": "UsrDepartmentStr",
					"values": {
						"layout": {"column": 0, "row": 1}
					}
				},
				{
					"operation": "merge",
					"name": "Department",
					"values": {
						"visible": {
							"bindTo": "Type",
							"bindConfig": {"converter": "getIsDepartmentVisible"}
						}
					}
				}
			],
			methods: {
				getIsDepartmentVisible: function(contactType) {
					return (contactType && (contactType.value ===
						ConfigurationConstants.ContactType.Employee));
				}
			}
		};
	});

Тоже самое

во-первых, вы уверены, что деталь не скрывается где-то не в вашем коде?
во-вторых, вы вставили пропущенный return в getIsDepartmentVisible?:wink:

А Вы смотрели консоль? Возможно у Вас там "свал" происходит? Посмотрите в дебаге что у вас там происходит, тогда можно принимать какое-то решение

"Андросов Дмитрий" написал:

во-первых, вы уверены, что деталь не скрывается где-то не в вашем коде?

во-вторых, вы вставили пропущенный return в getIsDepartmentVisible?:wink:


Да, я больше ничего не писала.
Да, добавила return, иначе бы не опубликовался код.

"Олейников Владимир Владимирович" написал:

А Вы смотрели консоль? Возможно у Вас там "свал" происходит? Посмотрите в дебаге что у вас там происходит, тогда можно принимать какое-то решение


Ошибок нет

А попробуйте сделать не замещающий обьект, а унаследованый.

"Олейников Владимир Владимирович" написал:

А попробуйте сделать не замещающий обьект, а унаследованый.


Какой тип объекта выбирать?

На самом деле не могу найти в стандартном ContactPageV2 где объявляются и добавляются детали Внешние\Внутренние ставки

тот же что Вы и замещали

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

"Пигарева Александра" написал:

Да, добавила return, иначе бы не опубликовался код.


Это же JavaScript, публикация прошла бы без проблем, но была бы ошибка во время выполнения.

Страница открывается правильная.
Но не получается изменить обработку поля Департамент. Попробовала сделать обработку на новом поле все ок.
Видимо проблема в конкретном реквизите.

а у вас конечный пакет или, может где-то замещается ваша страница? (например в пакете Custom)

я создаю страницу в пакете Custom

попробуйте воспользоваться поиском по скриптам и найти, где происходит то, что меняет видимость


Только прежде, чем искать по скриптам, их надо загрузить (открыть страницу контакта)

Все же решила через правила. Все работает. Всем спасибо.

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