Приветствую всех!
Возникла необходимость повесить проверку на кол-во символов в обычном и расширенном фильтрах раздела из-за большого объема результата выборки, который влияет на производительность. Нужно сделать только для одного раздела.
![]()
Мне надо повесить проверку для фильтра "Заголовок".
Если с обычным фильтром можно как-то решить вопрос через getFilter, то как стучать в расширенные?
Нравится
Здравствуйте Владислав,
С расширенными фильтрами так же само, как и с обычными: как только нажимается кнопка "Применить", чтобы применить расширенный фильтр, вызывается тот же метод getFilters из BaseDataView. То есть нужно смотреть как можно заменить логику этого метода.
С уважением,
Олег
Удалось достать значения фильтров, но понял что используя getFilter мою задачу реализовать не выйдет. Во-первых я никак не могу переопределить кнопку "применить" из схемы которая рисует и собирает конфиг расширенного фильтра - ExtendedFilterEditModelV2.
Во-вторых, как я понял, в коробке при инициализации раздела по дефолту применяется фильтрация из профайла текущего пользователя и метод getFilter при открытии раздела отрабатывает несколько раз.
Прикрепляю код переопределенной схемы раздела.
define("ActivitySectionV2", ["ExtendedFilterEditModelV2"], function(ExtendedFilterEditModelV2) {
return {
entitySchemaName: "Activity",
details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/,
methods: {
getFilters: function () {
var filters = this.callParent(arguments);
var customFilters = filters.contains("CustomFilters") ? filters.get("CustomFilters") : null;
//debugger;
var count = 0;
for(var i in customFilters.collection.keys) {
if(customFilters.collection.items[i].isEnabled && customFilters.collection.items[i].leftExpressionCaption == "Заголовок"){
var headerCaption = customFilters.collection.items[i].rightExpression.parameter.value; //rightExpression.parameter.value
if(headerCaption == null || headerCaption.length < 3) {
this.showInformationDialog("WORKING");
//this.applyFilters();
return filters;
}
}
}
return filters;
},
applyButton: function() {
this.showInformationDialog("btn handler works");
},
}
};
});
По сути минимально хотелось бы достичь фикса кнопки applyButton, чтобы при apply отлавливать фильтрацию и отображать свое сообщение пользователю.
Буду благодарен за любую помощь.