Открытие окна справочника, фильтрация данных справочника
Здравствуйте.
В разделе контрагенты по действию открываю справочник выбора контакта:
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):
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"
Нравится
Здравствуйте!
Пример решения этой задачи есть на 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 передал 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);
так у вас функция ничего не возвращает)). Ваш вариант не будет работать, если в фильтре будет использовать в качестве значения параметра какая-то переменная - он будет создан один раз и использоваться всегда в первоначальном виде.
Почему? Справочник открывается каждый раз при вызове функции, вместе с ним создается фильтр, который помещается в конфиг открываемого справочника, как бы нет проблем передать в функцию переменное значение или получать его внутри этой функции.