Быстрый фильтр по целочисленному полю
Добрый день, коллеги. На академии есть статья по созданию быстрых фильтров для раздела (по дате либо по справочному полю), но в ней нет кейса, если нужно отфильтровать все записи по текстовому либо целочисленному полю. Буду очень признателен,если кто-нибудь подскажет как это реализовать.
Нравится
{
"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 нарисовать текстовое поле