Добрый день, коллеги. На академии есть статья по созданию быстрых фильтров для раздела (по дате либо по справочному полю), но в ней нет кейса, если нужно отфильтровать все записи по текстовому либо целочисленному полю. Буду очень признателен,если кто-нибудь подскажет как это реализовать.
Нравится
{ "operation": "insert", "parentName": "FiltersContainer", "propertyName": "items", "name": "FilterText", "values": { "itemType": Terrasoft.ViewItemType.TEXT, "contentType": Terrasoft.ContentType.TEXT, "bindTo": "TestAttr", "caption": "Фильтр:" } },
Через diff нарисовать текстовое поле
Переопределяем метод getFilters добавляя в него свою фильтрацию согласно правилам фильтрации записей esq Пример ниже
getFilters: function () { var sectionFilters = this.callParent(arguments); this.setIsActiveFilter(sectionFilters); return sectionFilters; }, setIsActiveFilter: function (filterCollection) { var isActive = this.get("IsActive"); if (isActive) { if (!filterCollection.contains("IsActiveFilter")) { filterCollection.add("IsActiveFilter", this.Terrasoft.createColumnIsNullFilter("Account")); } } else { filterCollection.removeByKey("IsActiveFilter"); } },
Григорий Чех,
А нужно ли в initFixedFiltersConfig() создавать фильтр, куда, собственно, нужно будет ввести интересуемое меня целочисленное значение? Если да, то как это сделать? Мне ведь нужно будет получить значение пользователя и передать его в фильтр для сравнения, насколько я понимаю.
У меня на данный момент вот такая штука, я добавил один фильтр по справочному полю "UsrStreet", но мне еще надо фильтр по номеру квартиры (целочисленное поле).
Alex Zaslavsky,
По аналогии добавляете поле с типом this.Terrasoft.DataValueType.INTEGER (для целочисленного) или
this.Terrasoft.DataValueType.TEXT (для текстового).
Алла Савельева пишет:
По аналогии добавляете поле с типом this.Terrasoft.DataValueType.INTEGER
Добавил по аналогии, и у меня в консоле появилась ошибка
Alex Zaslavsky,
По аналогии не значит просто скопировать текст для элемента типа LOOKUP.
В фильтре для целочисленного поля некоторых параметров просто не может быть.
Попробуйте из параметров 'UsrFlatNumber' убрать appendCurrentContactMenuItem и filter.
P.S. И, если уж caption привязываете к ресурсам, то и hint тоже привяжите.
Алла Савельева,
Результат тот же. При чем, если в строке
dataValueType: this.Terrasoft.DataValueType.INTEGER - то название фильтра даже не отображается, если вернуть LOOKUP, то название возвращается на место.
Но и в обоих случаях при нажатии на фильтр и попытаться что-то выбрать, система пытается открыть модальное окно и в этот момент всё падает. Я думал, что в случае с INTEGER должно было появиться небольшое поле для ввода значения.
Я не разработчик, извините, если что-то не так объяснил)
В FixedFiltersConfig настраивается конфиг для стандартного фильтра по дате и ответственному/владельцу
Для фильтрации по другим полям вам нужно самостоятельно:
1) нарисовать поле (чек бокс и тд) для ввода фильтрируеміх данных
2) добавить атрибут (колонку в которой будут фильтрируемый данные введенные пользователем)
3) добавить свой фильтра в getFilters из моего примера выше
Может вам достаточно будет использовать уже готовый механизм расширенных фильтров* см статью (прокрути страничку до расширенные фильтры ) Задавать 2 параметра фильтрации и все будет работать!
Григорий Чех,
Спасибо за совет, но нужен быстрый фильтр в минимум кликов. Завтра попробую всё, что Вы описали выше, благодарю за помощь.
Григорий Чех,
Извините за беспокойство, я с утра перечитал что надо сделать, со вторым и третьим пунктом я могу справиться, но как создать поле в контейнере быстрых фильтров?
{ "operation": "insert", "parentName": "FiltersContainer", "propertyName": "items", "name": "FilterText", "values": { "itemType": Terrasoft.ViewItemType.TEXT, "contentType": Terrasoft.ContentType.TEXT, "bindTo": "TestAttr", "caption": "Фильтр:" } },
Через diff нарисовать текстовое поле