Интересует как создать фильтр в разделе из кода на клиентской стороне по нажатию кнопки
Есть задача создавать фильтр из кода на клиентской стороне по кнопке и применять его на раздел, если он не был создан ранее
Нравится
Смотрите в коде функции onFilterUpdate устанавливает фильтр. initFilterAttributes в ней можно самостоятельно обработать данные фильтра из профиля при загрузке реестра.
Добрый день, Денис!
Прошу Вас уточнить более подробно бизнес-задачу, так как не совсем понятно, что конкретно Вы хотите сделать.
Светлана Змиёва, создание фильтра в разделе из кода клиентской части
Денис, Вы хотите, чтобы слева в разделе визуально сформировался и применился фильтр или чтобы просто данные реестра отфильтровались, как происходит при изменении быстрого фильтра?
Если Вы имеете в виду второй вариант, то обратите внимание на логику какого-нибудь раздела с быстрыми фильтрами по дате, ответственному и подобному.
Например, см. раздел «Маркетинговые планы», фильтр по выбору года в выпадающем списке.
В схеме CampaignPlannerSection логика отправки сообщения в «песочницу» на событии изменения года:
/** * @override Terrasoft.BaseMarketingCalendarSection#calendarYearChanged */ calendarYearChanged: function (newValue) { this.sandbox.publish("CalendarYearChanged", newValue, ["MarketingCalendarCampaignsModuleId"]); }
И базовая реализация этого поля и его обработчика с пустой функцией в BaseMarketingCalendarSection:
{ "operation": "insert", "parentName": "LeftGridUtilsContainer", "propertyName": "items", "name": "CalendarYear", "values": { "dataValueType": Terrasoft.DataValueType.ENUM, "caption": {bindTo: "Resources.Strings.YearControlLabel"}, "wrapClass": ["select-year-container"], "controlConfig": { "className": "Terrasoft.ComboBoxEdit", "list": { "bindTo": "CalendarYearList" }, "prepareList": { "bindTo": "loadCalendarYearList" }, "value": { "bindTo": "CalendarYear" }, "change": { "bindTo": "calendarYearChanged" } } } } ... /** * Fires when year in calendar changed. */ "CalendarYearChanged": { mode: Terrasoft.MessageMode.PTP, direction: Terrasoft.MessageDirectionType.PUBLISH } }, ..... /** * Handles change of selected year in calendar. * @protected * @param {Object} newValue Selected year value. */ calendarYearChanged: Terrasoft.emptyFn,
А в схеме BaseMarketingCalendarPage приём этого сообщения и наложение фильтров по году:
/** * @inheritDoc Terrasoft.BaseSectionV2#subscribeSandboxEvents * @overridden */ subscribeSandboxEvents: function() { var resolvedClickSubscriberId = this.sandbox.id; this.sandbox.subscribe("OpenCalendarGridSettings", function() { this.openGridSettings(); }, this, [resolvedClickSubscriberId]); this.sandbox.subscribe("SetCalendarScale", function(config) { this.setScale(config.tag); }, this, [resolvedClickSubscriberId]); this.sandbox.subscribe("ToggleCalendar", function(value) { this.set("IsRightGridContainerVisible", value); }, this, [resolvedClickSubscriberId]); this.sandbox.subscribe("SortGrid", function(tag) { this.sortGrid(tag); }, this, [resolvedClickSubscriberId]); this.sandbox.subscribe("CalendarYearChanged", function(value) { this.$CalendarYear = value; this.reloadGridData(); }, this, [resolvedClickSubscriberId]); }, ... /** * @inheritdoc Terrasoft.GridUtilities#getFilters * @returns {Terrasoft.FilterGroup} */ getFilters: function() { var sectionFilters = this.get("SectionFilters"); if (Ext.isEmpty(sectionFilters)) { return this.mixins.GridUtilities.getFilters.call(this); } var selectedYear = new Date().getFullYear(); if (!Terrasoft.isEmpty(this.$CalendarYear) && !Terrasoft.isEmpty(this.$CalendarYear.value)) { selectedYear = this.$CalendarYear.value; } var serializationInfo = sectionFilters.getDefSerializationInfo(); serializationInfo.serializeFilterManagerInfo = true; var deserializedFilters = Terrasoft.deserialize(sectionFilters.serialize(serializationInfo)); deserializedFilters.addItem(Terrasoft.createColumnFilterWithParameter( Terrasoft.ComparisonType.GREATER_OR_EQUAL, "StartDate", new Date(Date.UTC(selectedYear, 0)), Terrasoft.DataValueType.DATE)); deserializedFilters.addItem(Terrasoft.createColumnFilterWithParameter( Terrasoft.ComparisonType.LESS, "StartDate", new Date(Date.UTC(selectedYear + 1, 0)), Terrasoft.DataValueType.DATE)); ...
Смотрите в коде функции onFilterUpdate устанавливает фильтр. initFilterAttributes в ней можно самостоятельно обработать данные фильтра из профиля при загрузке реестра.