FilterBuilder доступ к элементам фильтра по коду фильтра указанному в SelectQuery
У меня в форме добавлен элемент FilterBuilder.
И направлен на нужный мне Dataset.
У меня есть необходимость проверять выбран или нет фильтр по определенному полю и получить значение фильтрации и тип сравнения(больше/меньше/равно) по коду указанному в SelectQuery .
Нравится
Смотрите по SDK http://terrasoft.com.ua/sdk/
есть свойство IFiltersBuilder.RootItems, возвращающее IFiltersBuilderItems
находим нужный IFiltersBuilderItem
у него DataFieldName - имя поля набора данных, на основе которого создается элемент построителя фильтров
DisplayValue - правая часть элемента построителя фильтров
тип операции смотрите в IFiltersBuilderItems::LogicalOperator - операция между элементами
Это все хорошо и работает, но с одним но.
В SelectQuery присутствуют фильтры пользователя (это не простые фильтры).
Вот эти фильтры в IFiltersBuilder.RootItems присутствую но непонятно как их идентифицировать если их несколько, ведь у них значения DisplayValue и DataFieldName пустые. :confused:
Могу посоветовать проверить существование системного набора фильтров FiltersBuilderOriginalFilters, который создается при применении фильтров с содержанием пользовательских фильтров.
Dataset.SelectQuery.Items(0).Filters.ItemsByCode('FiltersBuilderOriginalFilters')
Если набор фильтров непустой, то попробуйте поискать в его элементах. Пока больше идей нет...
Да, Вы правы. Я тоже таким образом смог добраться до него. Но встал опять в тупик. :smile:
Как понять, установлен ли он в FilterBuilder или нет, и какие данные для филтрации и тип сравнения.
Мне всего то нужно, проверять задан этот пользовательский фильтр или нет.
Если задан то применить его к другому Dataset-у.
У интерфейса IFiltersBuilderItems метод ItemsByName возвращает IBaseFiltersBuilderItem, от которого наследуется IFiltersBuilderItem, а из него -- IUserFilterFiltersBuilderItem. Соответственно, если фильтр есть пользовательским, то он описывается последним интерфейсом, в котором есть свойство UserFilter, возвращающее интерфейс IUserFilter, среди декларируемых свойств которого есть:
Code - Код фильтра
FilterType - Тип фильтра
UserFilterType - Тип пользовательского фильтра
IsEnabled - Признак активности фильтра
Все шикарно.
Но осталось последнее.
Нашел я этот UserFilter что надо.
Как теперь получить значение которое в нем установлено?
Свойство DisplayValue как у обычного фильтра отсутствует. :(
А разве в свойстве Code нет нужного значения?
В любом случае смотрите SDK по нужному интерфейсу, там весь перечень свойств и методов с описанием, я ведь туда же смотрю по данному вопросу )
Цытирую SDK
'Code - Код фильтра.'
Я сам сижу в этом SDK уже не первый день...
Код это не значение которое указывает пользователь при включении фильтра.
UserFilter.Code: RoomTypeID
UserFilter.IsEnabled: false
UserFilter.KeyValue: RoomTypeID
Например, у меня есть пользовательский фильтр по дате. Как мне получить эту дату?
Вот каким образом я добрался в разделе контактов до фильтра пользователя:
Self.Attributes('WorkspaceWindow').ComponentsByName('fbcFilters').FiltersBuilder.RootItems.Items(0).UserFilter.LookupDataset('State')
Брал Items(0), потому что добавил только один фильтр, так проще.
Фильтр "Документ.Состояние". Выбирал значение "В планах". Оно и вернулось указанным способом.