Вопрос

Быстрый фильтр по целочисленному полю

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

Нравится

13 комментариев
Лучший ответ
{
   "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 нарисовать текстовое поле

Показать все комментарии