Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
is_lr_APEX.docx
Скачиваний:
84
Добавлен:
15.05.2015
Размер:
1.86 Mб
Скачать

Лабораторная работа № 8. Создание и использование кнопок-флажков (check box)

Задачи:

  1. Создать приложение с формой и отчетом.

  2. Создать кнопку-флажок в виде элемента на форме.

  3. Создать многозначную кнопку-флажок и обеспечить возможность фильтрации записей.

  4. Отобразить содержимое столбца с URL в виде HTML-ссылки.

  1. Создание приложения

  1. Создайте в Application Builder новое приложение с помощью мастера:

    1. Название приложения – ЛБ_8<фамилия в транслитерации>

    2. Способ создания – «с нуля» (From scratch)

    3. Добавьте в создаваемое приложение классический (Implementation – Classic) отчет с формой (Report and Form), основанный на таблице PRODUCT_INFORMATION. Измените названия добавленных страниц отчета и формы на Отчет Product Information и Форма Product Information соответственно.

    4. На шаге Shared Components не копируйте разделяемые компоненты из другого приложения (Copy Shared Components from Another Application: No)

    5. На шаге Attributes:

  • выберите One Level of Tabs.

  • Схема аутентификации – Application Express.

  • Язык – Russian (ru)

  • Формат даты – DD.MON.YYYY

    1. Тема – Theme 21.

  1. Запустите созданное приложение постранично:

  1. Скройте на странице Форма Product Information элемент Warranty Period, установив для него тип Hidden:

  1. Создание кнопки-флажка в виде элемента на форме

В Oracle Application Express можно создавать кнопки-флажки (check boxes) или в виде отдельных элементов (items), или в столбцах отчета. Кнопки-флажки на форме работают подобно спискам значений. Когда Вы определяете элемент как кнопку-флажок, Вы должны указать значение в секции List of Values на странице редактирования элемента (Item Attributes). Внутри отчета кнопки-флажки создаются с помощью функции APEX_ITEM.CHECKBOX.

Необходимо создать на странице Форма Product Information кнопку-флажок, которая автоматически устанавливает значение минимальной цены для продукта как 75% от прейскурантной цены:

  1. Для начала создайте на странице Форма Product Information элемент типа радиогруппа (radio group, позднее Вы измените его тип на check box):

    1. Create – Page control on this page – Item – Radio Group

    2. Название элемента – P2_SET_MIN_PRICE (предполагается, что работа идет со страницей 2)

    3. Порядковый номер (Sequence) – 9.5 (этот номер соответствует позиции ниже элемента P2_MIN_PRICE, но выше элемента P2_CATALOG_URL)

    4. Область – Форма Product Information

    5. На шаге 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.

    1. Создайте на странице Форма Product Information процесс, который устанавливает минимальную цену с 25% скидкой от прейскурантной цены (Create – Page control on this page - Process):

      1. Тип процесса (шаг Process Type) – PL/SQL

      2. Название (Name) – Update Min Price

      3. Точка выполнения (Point) – On Submit - After Computations and Validataions (при отправке – после вычислений и проверок)

      4. В поле Enter PL/SQL Page Process введите следующий SQL запрос:

    UPDATE product_information

    SET MIN_PRICE=(:P2_LIST_PRICE*0.75)

    WHERE PRODUCT_ID=:P2_PRODUCT_ID;

      1. В поле Success Message (сообщение об успешном выполнении) впишите Запись о продукте успешно обновлена

      2. В поле Error Message (сообщение об ошибке) впишите Невозможно обновить запись

      3. На шаге 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 так, чтобы он отображался не в виде радиогруппы, а в виде кнопки-флажка:

    1. Откройте страницу редактирования элемента P2_SET_MIN_PRICE

    2. В поле Display As выберите Checkbox

    3. В поле Default value (значение по умолчанию) введите Н (что соответствует значению Нет)

    4. В секции List of Values:

    • В поле List of values definition введите следующее:

    STATIC:Установить минимальную цену (25% скидка от прейскурантной цены);Д

    1. Протестируйте работу кнопки-флажка на странице Форма Product Information.

    2. Создайте динамический список значений возможных статусов продуктов:

      1. Название – STATUSES

      2. Таблица-источник – PRODUCT_INFORMATION

      3. В качестве отображаемого и возвращаемого значений должны выбираться значения из столбца PRODUCT_STATUS (т.к. там хранятся не кодированные значения)

      4. Каждый из статусов должен быть представлен в списке в единственном числе (в запросе необходимо использовать ключевое слово DISTINCT после SELECT).

    3. Измените элемент P2_PRODUCT_STATUS на странице Форма Product Information так, чтобы он отображался в виде списка выбора:

      1. Используйте список значений STATUSES

      2. Запретите отображение неопределенных значений

    4. Протестируйте форму:

    1. Создание многозначной кнопки-флажка для обеспечения возможности фильтрации записей

    Необходимо, чтобы в дополнение к полю поиска на странице Отчет Product Information отображались кнопки-флажки, позволяющие фильтровать записи о продуктах по их статусам (устаревший, заказ, запланированный, в стадии разработки):

    1. Создайте на странице Отчет Product Information элемент, отображающий для каждого статуса продукта отдельную кнопку-флажок (многозначную кнопку-флажок, которая позволяет возвращать более одного значения):

      1. Create – Page control on this page – Item

      2. Тип элемента – Checkbox

      3. Название элемента – P1_STATUS_FILTER (предполагается, что работа идет со страницей 1)

      4. Порядковый номер (Sequence)– 15 (для того, чтобы элемент отображался сразу под полем поиска)

      5. В качестве списка значений выберите созданный ранее список STATUSES.

      6. Display Null Option – No

      7. Ярлык – Статус продукта

      8. Источник значений – 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), то необходимость в такой проверке отпадет.

    1. Протестируйте работу фильтра на странице Отчет 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 визуализирует индивидуальные опции элемента:

    1. Отображение содержимого столбца в виде HTML ссылки

    На странице Отчет Product Information столбец CATALOG_URL содержит URL адрес. Было бы логично отображать этот адрес как ссылку.

    1. Добавьте в столбец CATALOG_URL ссылку на URL, указанный в этом столбце:

      1. Откройте страницу редактирования столбца CATALOG_URL области отчета на странице Отчет Product Information

      2. В секции Column Link:

    • В поле Link Text должно отображаться значение столбца

    • В качестве цели (Target) должно быть выбрано URL

    • В качестве URL также должно использоваться значение столбца (поле URL = #CATALOG_URL#)

  • Протестируйте работу ссылок в столбце CATALOG_URL:

    1. Отредактируйте запись о каком-либо продукте, введя в поле CATALOG_URL реальный полный URL (например, http://www.mail.ru)

    2. Проверьте ссылку.

    Задание к работе:

    1. Проделайте все описанные действия со своими данными. При этом все промежуточные результаты через кнопку PrintScreen сохранять в отдельном файле.

    2. Покажите результат преподавателю.

  • Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]