Ошибка фильтрации справочного поля через атрибуты

Добрый день!

Столкнулся с такой проблемой.

В разделе Обращения реализовал фильтр справочного поля по примеру из академии. В атрибуте указал правила фильтрации поля Контакт по полю Квартира (VcApartment), таким образом чтобы отображались только те Контакты у которых на детали Адрес контакта квартира соответствует полю Квартира в Обращении.

attributes: {
			"Contact": {
				"dataValueType": Terrasoft.DataValueType.LOOKUP,
				"lookupListConfig": {
					"filters": [
						function() {
							var apt = this.get("VcApartment");
							var filterGroup = Ext.create("Terrasoft.FilterGroup");
							filterGroup.add("IsActive",
								Terrasoft.createColumnFilterWithParameter(
									Terrasoft.ComparisonType.EQUAL,
									"[ContactAddress:Contact].VcApt",
									apt.value));
							return filterGroup;
						}
					]
				}
			}
		},

Фильтр отрабатывает нормально. Но если создать новое обращение из карточки Контакта, то  система зависает и в консоли появляется следующая ошибка: Uncaught TypeError: Cannot read property 'value' of undefined. 

Изображение удалено.

 Понятно что ошибка вылазит из за того что поле Квартира не заполнено. Но вот как обойти эту ошибку не могу понять. 

Нравится

2 комментария
Лучший ответ

Добрый день!

Можно так:

attributes: {
	"Contact": {
		"dataValueType": Terrasoft.DataValueType.LOOKUP,
		"lookupListConfig": {
			"filters": [
				function() {
					var apt = this.get("VcApartment");
					var aptValue = apt && apt.value ? apt.value : "";
					var filterGroup = Ext.create("Terrasoft.FilterGroup");
					filterGroup.add("IsActive",
						Terrasoft.createColumnFilterWithParameter(
							Terrasoft.ComparisonType.EQUAL,
							"[ContactAddress:Contact].VcApt",
							aptValue ));
					return filterGroup;
				}
			]
		}
	}
}

Тогда при незаполненной квартире будут отображаться контакты, с адресами с незаполненной квартирой.

Если нужно отображать все контакты, то

attributes: {
	"Contact": {
		"dataValueType": Terrasoft.DataValueType.LOOKUP,
		"lookupListConfig": {
			"filters": [
				function() {
					var apt = this.get("VcApartment");
					var filterGroup = Ext.create("Terrasoft.FilterGroup");
					if (apt) {
						filterGroup.add("IsActive",
						Terrasoft.createColumnFilterWithParameter(
							Terrasoft.ComparisonType.EQUAL,
							"[ContactAddress:Contact].VcApt",
							apt.value));
					}
					return filterGroup;
				}
			]
		}
	}
}

 

Добрый день!

Можно так:

attributes: {
	"Contact": {
		"dataValueType": Terrasoft.DataValueType.LOOKUP,
		"lookupListConfig": {
			"filters": [
				function() {
					var apt = this.get("VcApartment");
					var aptValue = apt && apt.value ? apt.value : "";
					var filterGroup = Ext.create("Terrasoft.FilterGroup");
					filterGroup.add("IsActive",
						Terrasoft.createColumnFilterWithParameter(
							Terrasoft.ComparisonType.EQUAL,
							"[ContactAddress:Contact].VcApt",
							aptValue ));
					return filterGroup;
				}
			]
		}
	}
}

Тогда при незаполненной квартире будут отображаться контакты, с адресами с незаполненной квартирой.

Если нужно отображать все контакты, то

attributes: {
	"Contact": {
		"dataValueType": Terrasoft.DataValueType.LOOKUP,
		"lookupListConfig": {
			"filters": [
				function() {
					var apt = this.get("VcApartment");
					var filterGroup = Ext.create("Terrasoft.FilterGroup");
					if (apt) {
						filterGroup.add("IsActive",
						Terrasoft.createColumnFilterWithParameter(
							Terrasoft.ComparisonType.EQUAL,
							"[ContactAddress:Contact].VcApt",
							apt.value));
					}
					return filterGroup;
				}
			]
		}
	}
}

 

Сидоров Александр В.,

Спасибо, все получилось! 

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