Лабораторная работа № 5. Редактирование отчетов
Цель работы – изучение технологии редактирования готового отчета.
Задачи:
Добавить на страницу Работники отчет (область), отображающий детали выбранного подразделения. При этом задать условие, по которому детали подразделения отображаются только, если выбрано какое-либо подразделение, если же выбрано -нет подразделения-, то область не должна отображаться.
Создать страницу с формой для создания/редактирования подразделения и соединить ее со страницей Подразделения, добавив в отчет Подразделения ссылку для перехода в режим редактирования (в столбце отчета), а также кнопку Создать для создания нового подразделения.
Редактирование отчета Работники
Некоторой недоработкой отчета Работники является недостаток информации по соответствующему подразделению, название которого в виде небольшого отчета выводится на этой странице. Зададим также вывод дополнительной информации, имеющейся в БД.
Откройте окно редактирования для страницы Работники. В разделе Page Rendering страницы в подразделе Regions щелкните по иконке Create.
В Identify the type of region выберите Report.
С помощью мастера создайте область, задав для нее следующие параметры (для остальных параметров оставьте значения по умолчанию):
Реализация отчета – Classic Report
Название области (Title) – О подразделении
Шаблон области (Region Template) – No Template
Очередность (Sequence) – 7 (это значит, что создаваемая область будет располагаться между областями со значениями sequence 5 и 10). Нажмите Next>.
На шаге Source выберите опцию SQL запрос (SQL Query) и вставьте данный запрос:
SELECT substr(e.last_name,1,1)||'. '|| e.first_name "Manager Name:",
c.country_name "Location:"
FROM departments d
left join employees e on d.manager_id = e.employee_id
left join locations l on d.location_id = l.location_id
left join countries c on l.country_id = c.country_id
left join employees e2 on d.department_id = e2.department_id
WHERE nvl(d.department_id,'-1') = nvl(:P2_DEPARTMENT_ID,'-1')
GROUP BY substr(e.last_name,1,1)||'. '||e.first_name,
c.country_name
В этом запросе:
производится соединение пяти таблиц, при этом используется внутреннее соединение (ключевые слова inner join); условие соединения указывается после ключевого слова on;
таблица EMPLOYEES используется 2 раза (для менеджера подразделения и для работников), поэтому указана дважды в предложении FROM, но с разными синонимами таблицы (e и e2);
substr(e.last_name,1,1)||'. '|| e.first_name – вырезается первый символ из имени работника (менеджера) и соединяется с точкой и пробелом, а затем с фамилией работника (менеджера);
условие, заданное в предложении WHERE, обеспечивает выборку только подразделения, имеющего заданный идентификатор (здесь - параметр:P2_DEPARTMENT_ID);
в предложении GROUP BY перечислены столбцы, к которым не применена групповая функция.
Нажмите Next>.
На шаге Report Attributes измените Шаблон отчета (Report Template) – default: vertical report. Нажмите Next>.
На шаге Conditional Display:
Тип условия (Condition Type) – Value of Item/Column in Expression 1!= Expression 2
Данный тип условия означает, что условие будет истинным, если значение первого выражения не будет равно значению второго выражения.
Expression 1 – введите P?_DEPARTMENT_ID
Expression 2 – введите -1
Заданное условие означает, что данный отчет будет отображаться только тогда, когда значение элемента P?_DEPARTMENT_ID не будет равно -1 (т.е., только если будет выбрано конкретное подразделение).
Нажмите Create Region.
Задайте для столбцов отчета русскоязычные названия:
Обратите внимание, что внизу только что созданного отчета О подразделении отображаются символы 1-1. Это означает, что для данного отчета включена разбивка на страницы. Однако в данном случае она бессмысленна, т.к. отображается всегда только одна запись (о выбранном подразделении).
Для отключения разбивки на страницы:
Откройте окно редактирования для страницы Работники.
Откройте окно редактирования атрибутов отчета О подразделении.
Во вкладке Report Attributes в секции Layout and Pagination в поле Pagination Scheme выберите -No Pagination Selected-.
Примените изменения и запустите страницу. Проверьте правильность работы отчета.
Редактирование отчета Подразделения
Создание формы для создания/редактирования подразделения
В созданном приложении нет возможности редактировать существующие записи о подразделениях и создавать новые. Для получения такой возможности создадим страницу с формой, подобную странице Создать/Редактировать Работника (должна быть создана только одна страница с формой, т.к. отчет уже существует):
На домашней странице своего приложения нажмите Create Page>.
Выберите опцию Form, затем на странице Create Page выберите опцию Form on a Table or View.
На шаге Table/View в поле Table/View Name выберите имя таблицы – Departments, нажмите Next>.
На шаге Page and Region:
В полях Page Name, Region Title введите Создать/Редактировать Подразделение.
В поле Breadcrump установите Breadcrump. Это установит на странице навигационную цепочку. Тогда в поле Entry Name введите название элемента навигационной цепочки – Создать/Редактировать Подразделение.
В секции Parent Entry выберите Подразделения. Нажмите Next>.
На шаге Tabs установите опцию Use an existing tab set and reuse an existing tab within that tab set. В окне Tab Set оставьте (Главная), в окне Use Tab выберите Главная. Нажмите Next>.
На шаге Primary Key в опции Primary Key Type выберите Select Primary Key и в окне Primary Key Column 1 выберите Department_id. Нажмите Next>.
На том же шаге установите опцию Existing sequence и в поле Sequence в качестве источника значений для столбца первичного ключа (DEPARTMENT_ID) укажите последовательность (sequence) DEPARTMENTS_SEQ. Нажмите Next>.
На шаге Columns выберите все поля для отображения в форме и нажмите Next>.
На шаге Buttons установите все стандартные кнопки, которые должны быть на странице. Ярлыки для кнопок должны быть русскоязычными (Отменить, Создать, Применить, Удалить). Нажмите Next>.
На шаге Branching установите переход на страницу Подразделения после отправки страницы (Branch here on Submit) или отмены изменений (Branch here on Cancel). Нажмите Next>.
На шаге Confirm нажмите Create.
Доработайте созданную страницу Создать/Редактировать Подразделение так, чтобы названия полей отображались по-русски.
Модифицируйте форму, чтобы поле для указания менеджера подразделения представлялось как выпадающий список выбора, причем он должен отображать пустые значения в виде -нет менеджера-:
В разделе Page Rendering найдите секцию Items, подчиненную пункту Создать/Редактировать Подразделение.
Чтобы отредактировать визуальный элемент, отображающий менеджера (P?_MANAGER_ID):
В секции Items щелкните по ссылке P?_MANAGER_ID. Отобразится страница редактирования элемента.
В секции Identification выберите Select List в поле Display As.
В секции Label измените значение в поле Label на Менеджер.
В секции List of Values:
В поле Named LOV выберите EMPLOYEES.
Display Null Value выберите значение Yes.
Null Display Value введите -нет менеджера-.
Null Return Value введите -1. Ввод значений, которые подставляются вместо неопределенного значения (Null Value), позволяет облегчить написание запросов (облегчает проверку на Null). В этом случае, когда пользователь выбирает в списке -нет менеджера-, в элементе устанавливается значение -1, и Вы можете использовать это значение в запросе.
Для решения аналогичной задачи для поля Расположение необходимо вначале создать список значений, а затем создать собственно список выбора (дополнительно: если расположение не указано, надо отобразить текст -не указано расположение-).
Создание списка LOCATIONS
Так как понятие «расположение» является сложным и включает в себя страну, город, адрес и т.д., то рассмотренная ранее технология создания списка не подходит.
Поскольку ключевым моментом при создании списка значений является определение SQL-запроса, возвращающего множество пар (отображаемое значение, возвращаемое значение), для решения задачи сначала необходимо подготовить соответствующий запрос. Воспользуемся для этого построителем запросов:
Откройте страницу построителя запросов (SQL Workshop> Utilities> Query Builder). Для удобства работы это можно сделать в отдельной вкладке или окне браузера.
В списке в левой части построителя отображаются таблицы, содержащиеся в Вашей схеме. Щелкните по таблицам LOCATIONS и COUNTRIES. Изображения таблиц появятся в центральной части построителя.
Из этих таблиц потребуются столбцы COUNTRY_NAME, CITY, STREET_ADDRESS и LOCATION_ID. Выберите их, установив флажки слева от названий столбцов.
Чтобы для каждого расположения выводилась соответствующая страна, эти таблицы необходимо соединить условием LOCATIONS.COUNTRY_ID = COUNTRIES.COUNTRY_ID. Соедините таблицы, щелкнув по незаполненным клеткам справа от соответствующих названий столбцов:
Обратите внимание на текст SQL-запроса, который автоматически сформировался во вкладке SQL в нижней части построителя. Возможности построителя запросов очень ограничены, однако его можно использовать для формирования черновых заготовок запросов.
Переключившись на вкладку Results (или нажав кнопку Run), Вы увидите результат выполненного запроса:
Полученный запрос еще не пригоден для использования при построении списка значений. Необходимо доработать его так, чтобы компоненты расположения (страна, город и адрес) выводились в одном столбце.
Сохраните полученный запрос под именем, например, lab5_pre_locations. Для этого нажмите кнопку Save в верхней части построителя. Переключившись затем на вкладку Saved SQL, Вы увидите сохраненный запрос.
Откройте страницу SQL Workshop>SQL Commands. Переключитесь на вкладку Saved SQL и щелкните по ссылке lab5_pre_locations. Откроется сохраненный Вами запрос, который теперь можно доработать и проверить.
Объедините в тексте запроса столбцы COUNTRIES.COUNTRY_NAME, LOCATIONS.CITY и LOCATIONS.STREET_ADDRESS строковыми операторами || (две вертикальные черты), удаляя автоматически сформированные в построителе запросов синонимы и добавляя между столбцами строковые константы ', ' (запятая и пробел в одинарных кавычках), как показано на рисунке ниже:
Выполните запрос, нажав на кнопку Run. Если запрос написан корректно, во вкладке Results отобразятся записи, организованные в 2 столбца:
Сохраните скорректированный запрос под именем, например, lab5_locations. Теперь Вы готовы создать список значений для расположений (LOCATIONS).
Скопируйте текст запроса в буфер обмена.
Создайте список значений с именем LOCATIONS, причем в поле с текстом запроса вставьте подготовленный запрос из буфера обмена:
Откройте свое приложение в Application Builder для редактирования.
Щелкните по иконке Shared Components.
На странице Shared Components в секции Other Components щелкните по ссылке Lists of Values.
На странице Lists of Values щелкните по кнопке Create>.
На шаге Source выберите From Scratch. Нажмите Next>.
На шаге Name and Type в поле Name введите LOCATIONS, а в Type выберите Dinamic. Нажмите Next>.
На шаге Query or Static Values замените текст запроса на тот, который был скопирован в буфер обмена:
select COUNTRIES.COUNTRY_NAME ||', '||
LOCATIONS.CITY ||', '||
LOCATIONS.STREET_ADDRESS location,
LOCATIONS.LOCATION_ID as LOCATION_ID
from LOCATIONS LOCATIONS,
COUNTRIES COUNTRIES
where COUNTRIES.COUNTRY_ID=LOCATIONS.COUNTRY_ID
Щелкните по кнопке Create List of Values. Созданный список значений отобразится на странице Lists of Values.
Доделайте выпадающий список выбора для поля Расположение (самостоятельно, по аналогии с рассмотренной выше задачей).
Запустите страницу Создать/Редактировать Подразделение и проверьте ее работу.
2.3. Соединение страниц Подразделения и Создать/Редактировать Подразделение
Добавьте в столбец с идентификатором подразделения на странице Подразделения ссылку на страницу Создать/Редактировать Подразделение аналогично тому, как это делалось для страницы Работники в лабораторной работе 2. При этом вместо идентификатора подразделения должна отображаться иконка; в названии столбца должно отображаться Изменить; при переходе по ссылке на странице Создать/Редактировать Подразделение должно отображаться редактируемое подразделение. Для этого:
На странице определения страницы Подразделения в секции Regions щелкните по ссылке Подразделения. Откроется новое окно, в котором выберите опцию Report Attributes.
В секции Column Attributes у атрибута Department_Id щелкните по иконке слева. Откроется страница редактирования атрибута-столбца.
В секции Column Link:
В поле Link Text установите текст, представляющий собой html-тэг для отображения необходимой иконки (щелкните по ссылке [Icon 5]);
В поле Page из выпадающего списка выберите страницу Создать/Редактировать Подразделение. Соответствующий номер страницы автоматически установится в поле;
В списке параметров ссылки для параметра Item 1 установите следующие значения: в поле Name – P?_DEPARTMENT_ID (напомним, что ? – конкретный номер страницы в приложении), в поле Value 1 - #DEPARTMENT ID#.
Щелкните по кнопке Apply Changes в верхней части страницы. Вы вернетесь на страницу Report Attributes.
Запустите приложение Подразделения и проверьте результаты:
Добавьте на странице Подразделения кнопку Создать для создания нового подразделения. Для этого:
Зайдите в режим редактирования страницы Подразделения.
В секции Page Rendering в опции Buttons щелкните по кнопке Create. Откроется страница создания кнопки Create Button.
На шаге Button Region выберите значение Подразделения. Нажмите Next>.
На шаге Button Position в окне Position выберите опцию Create a button in a region position. Нажмите Next>.
На шаге Button Attributes в поле Button Name введите – Create, а в поле Label – Создать. Нажмите Next>.
На шаге Display Properties в поле Position выберете значение Region Template Position #Create#. Нажмите Next>.
На шаге Action When Clicked в поле Action выберите значение Redirect to Page in this Application.
Затем в поле Page установите нужную страницу для перехода – Создать/Редактировать Подразделение, а в поле Clear Cache установите номер страницы Создать/Редактировать Подразделение в Вашем приложении. Этот позволит при переходе по ссылке на страницу Создать/Редактировать Подразделение отображать незаполненные поля и кнопки Отменить и Создать (при переходе все элементы этой страницы примут значения Null). Нажмите Next>.
и. В следующем окне ничего не меняйте и нажмите Create Button.
Теперь есть возможность создавать новые и редактировать существующие подразделения. Расположение подразделения можно выбирать из списка ранее определенных местоположений.
Задание к работе:
В своем приложении на странице, соответствующей подчиненной сущности (в примере - Работники), добавьте отчет (область), отображающую детали описания родительской сущности (в примере - Подразделения).
Создать страницу для создания/редактирования страницы с условно-постоянной информацией.
Добавить в страницу с условно-постоянной информацией ссылку для перехода в режим редактирования, а также кнопку Создать для создания нового экземпляра сущности.
Покажите результат преподавателю.
|