Всем добрый день!
Бьюсь второй день. Нужно добавить группу фильтров в разделе с оператором 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.