7.6
Технические вопросы
7.x

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

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

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

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 вне страницы редактирования (в моем случае в разделе контрагента) фильтр не работает выпадает ошибка, подробно описал выше.

Изменил объявление справочника:
[javascript]
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
};
[/javascript]

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

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

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

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

Не помогло.

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

[javascript]
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);
[/javascript]

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

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

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