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

4.  На шаге Report Attributes измените Шаблон отчета (Report Template) –
default: vertical report. Нажмите Next>.

НЕ нашли? Не то? Что вы ищете?

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

6.  Задайте для столбцов отчета русскоязычные названия:

Безымянный.bmp

Обратите внимание, что внизу только что созданного отчета О подразделении отображаются символы 1-1. Это означает, что для данного отчета включена разбивка на страницы. Однако в данном случае она бессмысленна, т. к. отображается всегда только одна запись (о выбранном подразделении).

Для отключения разбивки на страницы:

1.  Откройте окно редактирования для страницы Работники.

2.  Откройте окно редактирования атрибутов отчета О подразделении.

3.  Во вкладке Report Attributes в секции Layout and Pagination в поле Pagination Scheme выберите - No Pagination Selected-.

4.  Примените изменения и запустите страницу. Проверьте правильность работы отчета.

2.  Редактирование отчета Подразделения

2.1.  Создание формы для создания/редактирования подразделения

В созданном приложении нет возможности редактировать существующие записи о подразделениях и создавать новые. Для получения такой возможности создадим страницу с формой, подобную странице Создать/Редактировать Работника (должна быть создана только одна страница с формой, т. к. отчет уже существует):

1.  На домашней странице своего приложения нажмите Create Page>.

2.  Выберите опцию Form, затем на странице Create Page выберите опцию Form on a Table or View.

3.  На шаге Table/View в поле Table/View Name выберите имя таблицы – Departments, нажмите Next>.

4.  На шаге Page and Region:

·  В полях Page Name, Region Title введите Создать/Редактировать Подразделение.

·  В поле Breadcrump установите Breadcrump. Это установит на странице навигационную цепочку. Тогда в поле Entry Name введите название элемента навигационной цепочки – Создать/Редактировать Подразделение.

·  В секции Parent Entry выберите Подразделения. Нажмите Next>.

5.  На шаге Tabs установите опцию Use an existing tab set and reuse an existing tab within that tab set. В окне Tab Set оставьте (Главная), в окне Use Tab выберите Главная. Нажмите Next>.

6.  На шаге Primary Key в опции Primary Key Type выберите Select Primary Key и в окне Primary Key Column 1 выберите Department_id. Нажмите Next>.

7.  На том же шаге установите опцию Existing sequence и в поле Sequence в качестве источника значений для столбца первичного ключа (DEPARTMENT_ID) укажите последовательность (sequence) DEPARTMENTS_SEQ. Нажмите Next>.

8.  На шаге Columns выберите все поля для отображения в форме и нажмите Next>.

9.  На шаге Buttons установите все стандартные кнопки, которые должны быть на странице. Ярлыки для кнопок должны быть русскоязычными (Отменить, Создать, Применить, Удалить). Нажмите Next>.

10.  На шаге Branching установите переход на страницу Подразделения после отправки страницы (Branch here on Submit) или отмены изменений (Branch here on Cancel). Нажмите Next>.

11.  На шаге Confirm нажмите Create.

12.  Доработайте созданную страницу Создать/Редактировать Подразделение так, чтобы названия полей отображались по-русски.

13.  Модифицируйте форму, чтобы поле для указания менеджера подразделения представлялось как выпадающий список выбора, причем он должен отображать пустые значения в виде - нет менеджера-:

а.  В разделе Page Rendering найдите секцию Items, подчиненную пункту Создать/Редактировать Подразделение.

б.  Чтобы отредактировать визуальный элемент, отображающий менеджера (P?_MANAGER_ID):

·  В секции Items щелкните по ссылке P?_MANAGER_ID. Отобразится страница редактирования элемента.

·  В секции Identification выберите Select List в поле Display As.

·  В секции Label измените значение в поле Label на Менеджер.

·  В секции List of Values:

o  В поле Named LOV выберите EMPLOYEES.

Display Null Value выберите значение Yes.

Null Display Value введите - нет менеджера-.

Null Return Value введите -1. Ввод значений, которые подставляются вместо неопределенного значения (Null Value), позволяет облегчить написание запросов (облегчает проверку на Null). В этом случае, когда пользователь выбирает в списке - нет менеджера-, в элементе устанавливается значение -1, и Вы можете использовать это значение в запросе.

·  Примените изменения.

Для решения аналогичной задачи для поля Расположение необходимо вначале создать список значений, а затем создать собственно список выбора (дополнительно: если расположение не указано, надо отобразить текст - не указано расположение-).

2.2.  Создание списка LOCATIONS

Так как понятие «расположение» является сложным и включает в себя страну, город, адрес и т. д., то рассмотренная ранее технология создания списка не подходит.

Поскольку ключевым моментом при создании списка значений является определение SQL-запроса, возвращающего множество пар (отображаемое значение, возвращаемое значение), для решения задачи сначала необходимо подготовить соответствующий запрос. Воспользуемся для этого построителем запросов:

1.  Откройте страницу построителя запросов (SQL Workshop> Utilities> Query Builder). Для удобства работы это можно сделать в отдельной вкладке или окне браузера.

2.  В списке в левой части построителя отображаются таблицы, содержащиеся в Вашей схеме. Щелкните по таблицам LOCATIONS и COUNTRIES. Изображения таблиц появятся в центральной части построителя.

3.  Из этих таблиц потребуются столбцы COUNTRY_NAME, CITY, STREET_ADDRESS и LOCATION_ID. Выберите их, установив флажки слева от названий столбцов.

4.  Чтобы для каждого расположения выводилась соответствующая страна, эти таблицы необходимо соединить условием LOCATIONS. COUNTRY_ID = COUNTRIES. COUNTRY_ID. Соедините таблицы, щелкнув по незаполненным клеткам справа от соответствующих названий столбцов:

Обратите внимание на текст SQL-запроса, который автоматически сформировался во вкладке SQL в нижней части построителя. Возможности построителя запросов очень ограничены, однако его можно использовать для формирования черновых заготовок запросов.

Переключившись на вкладку Results (или нажав кнопку Run), Вы увидите результат выполненного запроса:

Полученный запрос еще не пригоден для использования при построении списка значений. Необходимо доработать его так, чтобы компоненты расположения (страна, город и адрес) выводились в одном столбце.

5.  Сохраните полученный запрос под именем, например, lab5_pre_locations. Для этого нажмите кнопку Save в верхней части построителя. Переключившись затем на вкладку Saved SQL, Вы увидите сохраненный запрос.

6.  Откройте страницу SQL Workshop>SQL Commands. Переключитесь на вкладку Saved SQL и щелкните по ссылке lab5_pre_locations. Откроется сохраненный Вами запрос, который теперь можно доработать и проверить.

7.  Объедините в тексте запроса столбцы COUNTRIES. COUNTRY_NAME, LOCATIONS. CITY и LOCATIONS. STREET_ADDRESS строковыми операторами || (две вертикальные черты), удаляя автоматически сформированные в построителе запросов синонимы и добавляя между столбцами строковые константы ', ' (запятая и пробел в одинарных кавычках), как показано на рисунке ниже:

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11