
- •Федеральное государственное бюджетное образовательное учреждение
- •Введение
- •Лабораторная работа №1. СтруктураApeXи начало работы
- •Лабораторная работа №2. Создание базы данных
- •Лабораторная работа №3. Создание исходного приложения
- •2. Связывание разных таблиц в одном отчете
- •4. Выполнение расчетов в отчете
- •4.1. Вычисление зарплаты работника
- •4.2. Добавление столбца с годовой зарплатой
- •4.3. Восстановление иконки редактирования
- •4.4. Русификация заголовков и форматирование полей
- •Лабораторная работа № 4. Создание связей между приложениями
- •Лабораторная работа № 5. Редактирование приложений
- •4. Соединение страниц Подразделения и Создать/Редактировать Подразделение
- •Лабораторная работа № 6. Доработка пользовательского интерфейса
- •Лабораторная работа № 7. Создание табличных форм, параметризованных отчетов и форм «Главная/Детальная»
- •Лабораторная работа № 8. Создание и использование кнопок-флажков (check box)
- •Лабораторная работа № 9. Самостоятельное создание приложения для выбранной предметной области
- •Приложение
Лабораторная работа № 8. Создание и использование кнопок-флажков (check box)
Задачи:
Создать приложение с формой и отчетом.
Создать кнопку-флажок в виде элемента на форме.
Создать многозначную кнопку-флажок и обеспечить возможность фильтрации записей.
Отобразить содержимое столбца с URL в виде HTML-ссылки.
Создание приложения
Создайте в Application Builder новое приложение с помощью мастера:
Название приложения – ЛБ_8<фамилия в транслитерации>
Способ создания – «с нуля» (From scratch)
Добавьте в создаваемое приложение классический (Implementation – Classic) отчет с формой (Report and Form), основанный на таблице PRODUCT_INFORMATION. Измените названия добавленных страниц отчета и формы на Отчет Product Information и Форма Product Information соответственно.
На шаге Shared Components не копируйте разделяемые компоненты из другого приложения (Copy Shared Components from Another Application: No)
На шаге Attributes:
выберите One Level of Tabs.
Схема аутентификации – Application Express.
Язык – Russian (ru)
Формат даты – DD.MON.YYYY
Тема – Theme 21.
Запустите созданное приложение постранично:
Скройте на странице Форма Product Information элемент Warranty Period, установив для него тип Hidden:
Создание кнопки-флажка в виде элемента на форме
В Oracle Application Express можно создавать кнопки-флажки (check boxes) или в виде отдельных элементов (items), или в столбцах отчета. Кнопки-флажки на форме работают подобно спискам значений. Когда Вы определяете элемент как кнопку-флажок, Вы должны указать значение в секции List of Values на странице редактирования элемента (Item Attributes). Внутри отчета кнопки-флажки создаются с помощью функции APEX_ITEM.CHECKBOX.
Необходимо создать на странице Форма Product Information кнопку-флажок, которая автоматически устанавливает значение минимальной цены для продукта как 75% от прейскурантной цены:
Для начала создайте на странице Форма Product Information элемент типа радиогруппа (radio group, позднее Вы измените его тип на check box):
Create – Page control on this page – Item – Radio Group
Название элемента – P2_SET_MIN_PRICE (предполагается, что работа идет со страницей 2)
Порядковый номер (Sequence) – 9.5 (этот номер соответствует позиции ниже элемента P2_MIN_PRICE, но выше элемента P2_CATALOG_URL)
Область – Форма Product Information
На шаге List of Values:
Щелкните по ссылке Create or edit static List of Values (создать или редактировать статический список значений)
На открывшейся странице введите следующие значения и нажмите Apply:
Обратите внимание на текст, который появился в поле List of Values Query:
В этом выражении:
Слово STATIC2 соответствует названию статического списка значений
Пары Да;Д и Нет;Н представляют собой пары <отображаемое значение>;<возвращаемое значение>
Пары значений отделяются друг от друга запятой.
Выберите опцию Display Null Value – No, чтобы не отображать неопределенные значения
На шаге Source:
Тип источника значений элемента (Source Type) – SQL Query (return single value)
В поле Item Source Value or expression введите следующий запрос:
SELECT 'Д'
FROM DUAL
WHERE :P2_LIST_PRICE * 0.75 = :P2_MIN_PRICE
Обратите внимание: DUAL – это системная таблица, состоящая из одного столбца DUMMY строкового типа размера 1 и одной записи, содержащей в этом столбце значение 'X'. Эта таблица используется для выполнения SQL команд, не связанных с выборкой данных из реальных таблиц. Такая таблица необходима, т.к. команда SELECT предполагает обязательное наличие предложения FROM.
Создайте на странице Форма Product Information процесс, который устанавливает минимальную цену с 25% скидкой от прейскурантной цены (Create – Page control on this page - Process):
Тип процесса (шаг Process Type) – PL/SQL
Название (Name) – Update Min Price
Точка выполнения (Point) – On Submit - After Computations and Validataions (при отправке – после вычислений и проверок)
В поле Enter PL/SQL Page Process введите следующий SQL запрос:
UPDATE product_information
SET MIN_PRICE=(:P2_LIST_PRICE*0.75)
WHERE PRODUCT_ID=:P2_PRODUCT_ID;
В поле Success Message (сообщение об успешном выполнении) впишите Запись о продукте успешно обновлена
В поле Error Message (сообщение об ошибке) впишите Невозможно обновить запись
На шаге Process Conditions:
В поле Condition Type выберите Value of Item/Column in Expression 1 = Expression 2 (значение элемента в выражении 1 = выражению 2)
В поле Expression 1 (выражение 1) введите: P2_SET_MIN_PRICE
В поле Expression 2 (выражение 2) введите: Д
Протестируйте работу приложения.
Измените элемент P2_SET_MIN_PRICE так, чтобы он отображался не в виде радиогруппы, а в виде кнопки-флажка:
Откройте страницу редактирования элемента P2_SET_MIN_PRICE
В поле Display As выберите Checkbox
В поле Default value (значение по умолчанию) введите Н (что соответствует значению Нет)
В секции List of Values:
В поле List of values definition введите следующее:
STATIC:Установить минимальную цену (25% скидка от прейскурантной цены);Д
Протестируйте работу кнопки-флажка на странице Форма Product Information.
Создайте динамический список значений возможных статусов продуктов:
Название – STATUSES
Таблица-источник – PRODUCT_INFORMATION
В качестве отображаемого и возвращаемого значений должны выбираться значения из столбца PRODUCT_STATUS (т.к. там хранятся не кодированные значения)
Каждый из статусов должен быть представлен в списке в единственном числе (в запросе необходимо использовать ключевое слово DISTINCT после SELECT).
Измените элемент P2_PRODUCT_STATUS на странице Форма Product Information так, чтобы он отображался в виде списка выбора:
Используйте список значений STATUSES
Запретите отображение неопределенных значений
Протестируйте форму:
Создание многозначной кнопки-флажка для обеспечения возможности фильтрации записей
Необходимо, чтобы в дополнение к полю поиска на странице Отчет Product Information отображались кнопки-флажки, позволяющие фильтровать записи о продуктах по их статусам (устаревший, заказ, запланированный, в стадии разработки):
Создайте на странице Отчет 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 соответствующее условие:
Добавьте в запрос отчета условие: (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), то необходимость в такой проверке отпадет.
Протестируйте работу фильтра на странице Отчет Product Information, комбинируя различные значения фильтра и используя кнопку Go для отправки страницы на сервер:
Обратите внимание, что, если снять выделение со всех кнопок-флажков, то не отображается ни одной записи, т.к. для всех записей указан определенный статус (это справедливо, если не было введено записей с неопределенным статусом). Если имеет место такая ситуация, то имеет смысл в этом случае выводить записи с любыми статусами (для этого можно, например, сделать пустую маску эквивалентной маске заказ:устаревший:запланированный:в стадии разработки8):
Установите для элемента P1_STATUS_FILTER значение по умолчанию, соответствующее значению фильтра, когда выбраны все статусы (заказ:устаревший:запланированный:в стадии разработки). Для этого используйте окно Default.
Проверьте работу фильтра. Снимите выделение со всех кнопок-флажков фильтра и нажмите Go. Должны отобразиться все записи (имеющие определенное значение статуса продукта), а кнопки-флажки должны автоматически выделиться.
Отображение кнопок-флажков в одну колонку не очень удачно с точки зрения использования пространства страницы. Кроме того, имеет смысл отображать подписи к кнопкам-флажкам в полужирном начертании. Измените элемент P1_STATUS_FILTER таким образом, чтобы кнопки-флажки выводились в 4 колонки, а подписи к ним были выделены полужирным начертанием:
Откройте страницу редактирования элемента P1_STATUS_FILTER
В секции Settings установите в поле Number of Checkbox Columns значение 4
В секции Element в поле Form Element Option Attributes введите class="fielddatabold". Это поле используется исключительно для кнопок-флажков и радио-кнопок и влияет на то, как APEX визуализирует индивидуальные опции элемента:
Отображение содержимого столбца в виде HTML ссылки
На странице Отчет Product Information столбец CATALOG_URL содержит URL адрес. Было бы логично отображать этот адрес как ссылку.
Добавьте в столбец CATALOG_URL ссылку на URL, указанный в этом столбце:
Откройте страницу редактирования столбца CATALOG_URL области отчета на странице Отчет Product Information
В секции Column Link:
В поле Link Text должно отображаться значение столбца
В качестве цели (Target) должно быть выбрано URL
В качестве URL также должно использоваться значение столбца (поле URL = #CATALOG_URL#)
Протестируйте работу ссылок в столбце CATALOG_URL:
Отредактируйте запись о каком-либо продукте, введя в поле CATALOG_URL реальный полный URL (например, http://www.mail.ru)
Проверьте ссылку.
Задание к работе:
Проделайте все описанные действия со своими данными. При этом все промежуточные результаты через кнопку PrintScreen сохранять в отдельном файле.
Покажите результат преподавателю.