Всем добрый день!
Бьюсь второй день. Нужно добавить группу фильтров в разделе с оператором OR.
По умолчанию в коробке в коллекцию фильтров filters добавляются группы через AND, при этом легко добавляется просто одиночный фильтр (например "FilterStatus"). Но вот группа фильтров - уже не работает.
Судя по примеру добавления фильтров "FixedFilter" и "CustomFilter" в коробке продукта - нужно как то хитро определять конфиг этой группы. Я добавляю items в группу, но получается не так, как у Terrasoft. Их исходного кода найти не могу. Помогите, пожалуйста :( Что не так...
getFilters: function() {
debugger;
var filters = this.callParent(arguments);
var items = this.$UsrGroups;
let counter = 1;
//создание группы фильтров
var usrFilterGroup = this.Ext.create("Terrasoft.FilterGroup");
usrFilterGroup.logicalOperation = this.Terrasoft.LogicalOperatorType.OR;
//добавление фильтра по каждой группе юзера
for (var item in items) {
var tempFilterGroup = Terrasoft.createColumnFilterWithParameter(
Terrasoft.ComparisonType.EQUAL, "Group.Id", item);
usrFilterGroup.addItem(tempFilterGroup);
window.console.log("Добавлен фильтр по группе " + item.Name);
counter++;
}
filters.add("UserGroupsFilter", usrFilterGroup);
return filters;
}
Нравится
Вам нужно вернуть фильтр с условием User filter или Section filter, так?
Если так, то тогда нужно создать две группы, одна группа, которая будет объединять фильтры секции и вторая с вашими фильтрами. В общей группе сделать тип or, в вашей вам нужно. И потов вернуть не filters, а объединяющую группу.
var usrSectionFilterGroup = this.Ext.create("Terrasoft.FilterGroup");
usrSectionFilterGroup.logicalOperation = this.Terrasoft.LogicalOperatorType.OR;
usrSectionFilterGroup.add("SectionFilter", filters);
var usrFilterGroup = this.Ext.create("Terrasoft.FilterGroup");
//ваш фильтр
usrSectionFilterGroup.add("UsrFilterGroup", usrFilterGroup);
return usrSectionFilterGroup;
Трефилов Павел Сергеевич,
Ваш вариант не работает (
Надо добавить фильтр так чтобы он нигде визуально не отображался, остальное не важно.
Помогите разобраться (
В ActivitySectionV2 так, и все работает... Тут тоже самое - нет... Каааааак?
getFilters: function() {
var filters = this.callParent(arguments);
var fixedFilters = filters.contains("FixedFilters") ? filters.get("FixedFilters") : null;
if (!this.Ext.isEmpty(fixedFilters) && fixedFilters.contains("Owner")) {
var ownerFilters = fixedFilters.get("Owner");
if (ownerFilters.contains("OwnerDefaultFilter")) {
ownerFilters.removeByKey("OwnerDefaultFilter");
}
}
if (this.isSchedulerDataView()) {
if (!filters.contains("ShowInSchedulerFilter")) {
filters.add("ShowInSchedulerFilter", this.Terrasoft.createColumnFilterWithParameter(
this.Terrasoft.ComparisonType.EQUAL, "ShowInScheduler", true));
}
if (!fixedFilters) {
fixedFilters = this.Terrasoft.createFilterGroup();
fixedFilters.logicalOperation = Terrasoft.LogicalOperatorType.AND;
filters.add("FixedFilters", fixedFilters);
}
var hasPeriodFilters = fixedFilters.contains("PeriodFilter");
var periodFilter = hasPeriodFilters ? fixedFilters.get("PeriodFilter") : null;
if (!hasPeriodFilters || (periodFilter && !(periodFilter instanceof Terrasoft.Collection))) {
this.setDateFiltersCurrentDate(fixedFilters);
}
}
if (this.isNotSchedulerDataView() &&
filters.contains("ShowInSchedulerFilter")) {
filters.removeByKey("ShowInSchedulerFilter");
}
filters.add("NotEmailFilter", this.Terrasoft.createColumnFilterWithParameter(
this.Terrasoft.ComparisonType.NOT_EQUAL, "Type", ConfigurationConstants.Activity.Type.Email
));
return filters;
},
/**
* ############# ############ ####### ## ####### ### ########## ## ####### ####.
* @private
* @param {Object} fixedFilters ###### ############ ########.
*/
setDateFiltersCurrentDate: function(fixedFilters) {
var now = new Date();
var periodFilter = this.Terrasoft.createFilterGroup();
periodFilter.logicalOperation = Terrasoft.LogicalOperatorType.AND;
periodFilter.add("DueDate", this.Terrasoft.createColumnFilterWithParameter(
this.Terrasoft.ComparisonType.GREATER_OR_EQUAL, "DueDate",
this.Terrasoft.startOfDay(now)));
periodFilter.add("StartDate", this.Terrasoft.createColumnFilterWithParameter(
this.Terrasoft.ComparisonType.LESS_OR_EQUAL, "StartDate",
this.Terrasoft.endOfDay(now)));
if (fixedFilters.contains("PeriodFilter")) {
fixedFilters.removeByKey("PeriodFilter");
}
fixedFilters.add("PeriodFilter", periodFilter);
},
Добрый день, Надежда!
Хочу у вас уточнить, вы проводили отладку вашего кода?
Также мне интересно, что именно у вас представляет $UsrGroups?
Попробовал запустить ваш код, в итоге объект items был undefiend.