Открытие окна справочника, фильтрация данных справочника

Здравствуйте.

В разделе контрагенты по действию открываю справочник выбора контакта:

var lookup = {
        config: {
                entitySchemaName: "Contact",
                columnName: "Owner",
                multiSelect: false              
        },
        callback: this.lookoupOwnerCallback
};
lookup.config.actionsButtonVisible = false;
LookupUtilities.Open(this.sandbox, lookup.config, lookup.callback, this, null, false, false);

Работает нормально, без ошибок.
Далее добавляю фильтрацию (в config добавляю свойство filters):
var lookup = {
        config: {
                entitySchemaName: "Contact",
                columnName: "Owner",
                multiSelect: false,
                filters: [
                        function () {
                                debugger
                                var filterGroup = Ext.create("Terrasoft.FilterGroup");
                                filterGroup.add("IsOurType",
                                        Terrasoft.createColumnFilterWithParameter(
                                                Terrasoft.ComparisonType.EQUAL,
                                                "Type",
                                                "60733efc-f36b-1410-a883-16d83cab0980"));
                                return filterGroup;
                        }
                ]              
        },
        callback: this.lookoupOwnerCallback
};
lookup.config.actionsButtonVisible = false;
LookupUtilities.Open(this.sandbox, lookup.config, lookup.callback, this, null, false, false);

Возникает ошибка. Код фильтра взял из атрибута Owner страницы редактирования(т.е. там он работает и данные фильтруются), но при его использовании в описанном примере возникает ошибка, причем debugger не вызывается. Подскажите правильный синтаксис добавления фильтра при открытии справочника с помощью LookupUtilities.

Ошибка из консоли: "Uncaught TypeError: a.on is not a function"

Нравится

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

Здравствуйте!

Пример решения этой задачи есть на SDK.

"Демьяник Алексей" написал:

Здравствуйте!

Пример решения этой задачи есть на SDK.

Алексей, по статье в SDK я создавал фильтр для колонки Owner страницы редактирования контрагента и там он работает, но если этот же фильтр применять при открытии справочника контактов с помощью LookupUtilities вне страницы редактирования (в моем случае в разделе контрагента) фильтр не работает выпадает ошибка, подробно описал выше.

Изменил объявление справочника:

var lookup = {
	config: {
		entitySchemaName: "Contact",
		columnName: "UsrOwnerOPKA",
		multiSelect: false,
		lookupListConfig: {
			filters: [
				function () {
					debugger
					var filterGroup = Ext.create("Terrasoft.FilterGroup");
					filterGroup.add("IsOurType", Terrasoft.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, "Type", "60733efc-f36b-1410-a883-16d83cab0980")); 
				}
			]
		}
	},
	callback: this.changeOwner
};

После этого ошибки нет, но и фильтры не работают, функция не вызываеться.

в filters ставьте не массив, а саму функцию

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

в filters ставьте не массив, а саму функцию

Не помогло.

В filters передал Terrasoft.FilterGroup и заработало:

var filterGroup = Ext.create("Terrasoft.FilterGroup");
filterGroup.add("IsOurType",
   Terrasoft.createColumnFilterWithParameter(
   Terrasoft.ComparisonType.EQUAL,
   "Type",
   "60733efc-f36b-1410-a883-16d83cab0980"));
 
var lookup = {
        config: {
                entitySchemaName: "Contact",
                columnName: "Owner",
                multiSelect: false,
                filters: filterGroup         
        },
        callback: this.lookoupOwnerCallback
};
lookup.config.actionsButtonVisible = false;
LookupUtilities.Open(this.sandbox, lookup.config, lookup.callback, this, null, false, false);

так у вас функция ничего не возвращает)). Ваш вариант не будет работать, если в фильтре будет использовать в качестве значения параметра какая-то переменная - он будет создан один раз и использоваться всегда в первоначальном виде.

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

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