1.4.4. Универсальный фильтр

1.4.4.1. Использование универсальных фильтров

Нажмите кнопку «Фильтр» на панели управления или в контекстном меню. Настройте условия фильтрации в отобразившемся диалоге.

../../../_images/UniFilter_GUI.png

Управляющие кнопки:

  • «Открыть…» - открывает диалог выбора (редактирования) пользовательских сохраненных настроек. Список также содержит общие настройки, они доступны только для выбора.
  • «Открыть общие настройки…» - (операция находится в выпадающем меню под кнопкой «Открыть…») открывает диалог выбора (редактирования) общих сохраненных настроек.
  • «Сохранить» - сохраняет настройку фильтра.
  • «Сохранить как…» - сохраняет настройку фильтра под новым именем.
  • «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. В свойстве «Заголовок ссылочного атрибута» должно быть указано имя атрибута являющегося заголовком для данного ссылочного атрибута.
  2. У атрибута, который является заголовком, должны быть проставлены свойства «Изменяемый атрибут» и «Ссылка на класс». Если вы хотите указать выборку с отображением, из которой пользователь должен выбирать значение для фильтрации, укажите свойства «Выборка» и «Отображение».

При компиляции класса все необходимые свойства будут проставлены.

Указание описанных выше свойств для ссылочного атрибута и его заголовка необходимо для того, чтобы:

  1. Фильтрация была доступна как для ссылочного атрибута, так и для его заголовка. Причем, если в фильтре будет участвовать заголовок, фильтрация будет происходить не по тексту заголовка, а по идентификатору объекта, которому принадлежит заголовок.
  2. Была известна выборка, которую необходимо открыть для выбора значения ссылочного атрибута.

По умолчанию, для фильтрации доступны все видимые атрибуты, если вам необходимо фильтровать по невидимому атрибуту явно укажите свойство «Доступен в универсальном фильтре»

1.4.4.2.2. О доступности сохранённых настроек фильтров в отображениях

С помощью свойства «Использовать ун-ный фильтр Default отображения» можно указать, что выборка должна использовать настройки фильтра, общие для всех отображений (настроенные для отображения Default). Если этот флаг не установлен, настройки, сохранённые в каком-либо отображении, не будут видны в другом отображении.

1.4.4.2.3. Read-Only фильтр разработчика

Есть возможность задать условие фильтрации, которое не будет доступно пользователю для редактирования. Для этого необходимо обратиться к полю UniFilterMacrosRO выборки:

Selection.UniFilterMacrosRO := 'AttrName > 100500';

Такое условие будет дополнять обычный фильтр, и будет выводиться в нижней части карточки универсального фильтра в виде текста. Оно недоступно для редактирования из карточки.

../../../_images/UniFilterMacrosRO.jpg

Значение указанное в 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.