КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Создание многозначной кнопки-флажка для обеспечения возможности фильтрации записейНеобходимо, чтобы в дополнение к полю поиска на странице Отчет Product Information отображались кнопки-флажки, позволяющие фильтровать записи о продуктах по их статусам (устаревший, заказ, запланированный, в стадии разработки): 1. Создайте на странице Отчет Product Information элемент, отображающий для каждого статуса продукта отдельную кнопку-флажок (многозначную кнопку-флажок, которая позволяет возвращать более одного значения): а. Create – Page control on this page – Item б. Тип элемента – Checkbox в. Название элемента – P1_STATUS_FILTER (предполагается, что работа идет со страницей 1) г. Порядковый номер (Sequence)– 15 (для того, чтобы элемент отображался сразу под полем поиска) д. В качестве списка значений выберите созданный ранее список STATUSES. е. Display Null Option – No ж. Ярлык – Статус продукта з. Источник значений – Static Assignment (value equals source attribute) Особенность многозначной кнопки-флажка в том, что с одной стороны это один элемент, а с другой стороны – визуально он представляется множеством независимых кнопок-флажков. Как же в одном элементе сохраняется множество значений? Ответ – значения объединены в одну строку, но отделяются друг от друга двоеточием (“:”). Например, представленный ниже выбор пользователя сохраняется в элементе в виде значения устаревший:заказ:запланированный
Теперь для того, чтобы отображаемые кнопки-флажки можно было использовать для фильтрации записей, необходимо модифицировать запрос отчета, добавив в предложение WHERE соответствующее условие: 1. Добавьте в запрос отчета условие: (instr(:P1_STATUS_FILTER,product_status)>0 OR :P1_STATUS_FILTER IS NULL AND PRODUCT_STATUS IS NULL), объединив его с имеющимся условием оператором AND: where ( ( instr(upper("PRODUCT_NAME"),upper(nvl(:P1_REPORT_SEARCH,"PRODUCT_NAME"))) > 0 or instr(upper("PRODUCT_DESCRIPTION"),upper(nvl(:P1_REPORT_SEARCH,"PRODUCT_DESCRIPTION"))) > 0 or instr(upper("WARRANTY_PERIOD"),upper(nvl(:P1_REPORT_SEARCH,"WARRANTY_PERIOD"))) > 0 or instr(upper("PRODUCT_STATUS"),upper(nvl(:P1_REPORT_SEARCH,"PRODUCT_STATUS"))) > 0 ) and (instr(:P1_STATUS_FILTER,PRODUCT_STATUS)>0 OR :P1_STATUS_FILTER IS NULL AND PRODUCT_STATUS IS NULL) ) Обратите внимание: * Функция instr(строка, подстрока, начальная позиция, № вхождения) ищет №-ое вхождение указанной подстроки в строке начиная с начальной позиции и возвращает позицию первого символа найденного вхождения. По умолчанию начальная позиция = 1 и № вхождения = 1. Если подстрока не входит в строку, возвращается 0. * В данном случае условие проверяет, содержится ли статус продукта в маске фильтра (позиция вхождения статуса в маске фильтра > 0), или, если маска фильтра пуста, статус продукта также не определен. Если условие не выполняется, запись отбрасывается. * Вторая часть условия OR :P1_STATUS_FILTER IS NULL AND PRODUCT_STATUS IS NULL необходима для того, чтобы отображать записи о продуктах, имеющих неопределенный статус (Null). Если же столбец PRODUCT_STATUS сделать обязательным (Not Null), то необходимость в такой проверке отпадет. 2. Протестируйте работу фильтра на странице Отчет Product Information, комбинируя различные значения фильтра и используя кнопку Go для отправки страницы на сервер:
Обратите внимание, что, если снять выделение со всех кнопок-флажков, то не отображается ни одной записи, т.к. для всех записей указан определенный статус (это справедливо, если не было введено записей с неопределенным статусом). Если имеет место такая ситуация, то имеет смысл в этом случае выводить записи с любыми статусами (для этого можно, например, сделать пустую маску эквивалентной маске заказ:устаревший:запланированный:в стадии разработки[8]): 1. Установите для элемента P1_STATUS_FILTER значение по умолчанию, соответствующее значению фильтра, когда выбраны все статусы (заказ:устаревший:запланированный:в стадии разработки). Для этого используйте окно Default. 2. Проверьте работу фильтра. Снимите выделение со всех кнопок-флажков фильтра и нажмите Go. Должны отобразиться все записи (имеющие определенное значение статуса продукта), а кнопки-флажки должны автоматически выделиться. Отображение кнопок-флажков в одну колонку не очень удачно с точки зрения использования пространства страницы. Кроме того, имеет смысл отображать подписи к кнопкам-флажкам в полужирном начертании. Измените элемент P1_STATUS_FILTER таким образом, чтобы кнопки-флажки выводились в 4 колонки, а подписи к ним были выделены полужирным начертанием: 1. Откройте страницу редактирования элемента P1_STATUS_FILTER 2. В секции Settingsустановите в поле Number of Checkbox Columns значение 4 3. В секции Element в поле Form Element Option Attributes введите class="fielddatabold". Это поле используется исключительно для кнопок-флажков и радио-кнопок и влияет на то, как APEX визуализирует индивидуальные опции элемента:
|