1.4.4. Универсальный фильтр¶
1.4.4.1. Использование универсальных фильтров¶
Нажмите кнопку «Фильтр» на панели управления или в контекстном меню. Настройте условия фильтрации в отобразившемся диалоге.
Управляющие кнопки:
- «Открыть…» - открывает диалог выбора (редактирования) пользовательских сохраненных настроек. Список также содержит общие настройки, они доступны только для выбора.
- «Открыть общие настройки…» - (операция находится в выпадающем меню под кнопкой «Открыть…») открывает диалог выбора (редактирования) общих сохраненных настроек.
- «Сохранить» - сохраняет настройку фильтра.
- «Сохранить как…» - сохраняет настройку фильтра под новым именем.
- «OK» - применяет фильтр и закрывает построитель фильтров
- «Отмена» - закрывает построитель фильтров с отменой всех изменений фильтра (кроме сохранений), без применения фильтра.
- «Применить» - применяет фильтр без закрытия построителя фильтра.
1.4.4.2. Для разработчика приложений¶
Универсальный фильтр позволяет создавать сложные условия фильтрации данных в визуальном редакторе фильтра. После применения универсального фильтра в GST выборки будут внесены условия, указанные в мастере фильтра. Если GST содержит простой запрос то, после применения универсального фильтра существующий запрос будет окружён запросом фильтрации (курсорный запрос окружаться запросом фильтрации не будет):
Select * from ('Исходный запрос') where 'условие фильтрации'
Для того, чтобы GST не окружался дополнительным запросом, необходимо, чтобы в тексте запроса содержались макросы фильтрации.
Select * from MyTable where &DefUniFltMacros
Attention
Если вы используете курсорную выборку, и в запросе отсутствует макрос &DefUniFltMacros, выражение фильтра не будет поставлено.
1.4.4.2.1. Настройка фильтруемых атрибутов выборки¶
Для обычных (значимых) атрибутов настройка не требуется. Если вы хотите исключить атрибут из списка фильтруемых, установите свойство «Доступен в универсальном фильтре» в false. Для ссылочных атрибутов требуется следующая настройка:
- В свойстве «Заголовок ссылочного атрибута» должно быть указано имя атрибута являющегося заголовком для данного ссылочного атрибута.
- У атрибута, который является заголовком, должны быть проставлены свойства «Изменяемый атрибут» и «Ссылка на класс». Если вы хотите указать выборку с отображением, из которой пользователь должен выбирать значение для фильтрации, укажите свойства «Выборка» и «Отображение».
При компиляции класса все необходимые свойства будут проставлены.
Указание описанных выше свойств для ссылочного атрибута и его заголовка необходимо для того, чтобы:
- Фильтрация была доступна как для ссылочного атрибута, так и для его заголовка. Причем, если в фильтре будет участвовать заголовок, фильтрация будет происходить не по тексту заголовка, а по идентификатору объекта, которому принадлежит заголовок.
- Была известна выборка, которую необходимо открыть для выбора значения ссылочного атрибута.
По умолчанию, для фильтрации доступны все видимые атрибуты, если вам необходимо фильтровать по невидимому атрибуту явно укажите свойство «Доступен в универсальном фильтре»
1.4.4.2.2. О доступности сохранённых настроек фильтров в отображениях¶
С помощью свойства «Использовать ун-ный фильтр Default отображения» можно указать, что выборка должна использовать настройки фильтра, общие для всех отображений (настроенные для отображения Default). Если этот флаг не установлен, настройки, сохранённые в каком-либо отображении, не будут видны в другом отображении.
1.4.4.2.3. Read-Only фильтр разработчика¶
Есть возможность задать условие фильтрации, которое не будет доступно
пользователю для редактирования. Для этого необходимо обратиться к полю
UniFilterMacrosRO выборки:
Selection.UniFilterMacrosRO := 'AttrName > 100500';
Такое условие будет дополнять обычный фильтр, и будет выводиться в нижней части карточки универсального фильтра в виде текста. Оно недоступно для редактирования из карточки.
Значение указанное в UniFilterMacrosRO добавляется к GST через
&DefUniFltMacrosRO.
1.4.4.2.4. Паскаль-события фильтрации¶
В работе универсального фильтра используются События фильтра.
События OnApplyFilter, OnResetFilter и OnAddSelectedRecToFilter могут
возвращать объект класса TbtkNamedArgs, созданный с помощью
скриптового метода CreateArgs(). Обязательные поля - Code (0 - успешно)
и WhereMacro - текст запроса, который будет добавлен к макросу
фильтрации при его применении (TbtkScriptSelectionObject.ApplyFilter()). Условие, возвращенное в
WhereMacro, будет приписано к &DefUniFltMacros.
Caution
Каждое новое непустое WhereMacro, возвращаемое операциями
OnApplyFilter, OnResetFilter и
OnAddSelectedRecToFilter затирает предыдущее значение.
События OnFilterInit и OnFilterFinalize вызываются сразу после и до
операций OnLoadMeta и OnUnloadMeta соответственно. Операция
OnFilterInit может возвращать результат типа Variant, который в
последствии будет передаваться как входной параметр в методы
OnApplyFilter, OnResetFilter и OnAddSelectedRecToFilter при каждом их вызове.
Возвращение значения операцией OnFilterFinalize не предполагается
и будет игнорировано.
Событие OnFilterInit среди своих параметров может содержать поле Alias,
значение которого будет добавлено в GST через &ServFilterAliasMacros.