КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Соединение отчетовСоединим отчеты так, чтобы можно было, выбирая нужное подразделение, получать отчет о соответствующих работниках. Для выполнения требуемого перехода создадим на отчете Работники область (Region), в которой будет располагаться поле с выпадающим списком подразделений. Область – это участок на странице, который играет роль контейнера для содержимого страницы. Каждая страница может иметь любое количество областей. Внешний вид области задается с помощью шаблона (region template). Области обычно используются для группировки элементов управления на странице – например, визуальные элементов (items) или кнопок (buttons). Для создания области: 1. Откройте окно редактирования для страницы Работники. 2. Щелкните по кнопке Create .Отобразится мастер создания области. Выберите опцию Region on this page. НажмитеNext>. 3. На шаге Region: а. Определите тип области – оставьте тип по умолчанию – HTML, – и щелкните Next >. б. Определите тип HTML контейнера – оставьте HTML и щелкните Next >. 4. На шаге Display Attributes: а. Title – введите Подразделение. б. Region Template – выберите No Template. Область будет добавлена без заголовка области. в. Sequence – измените на 5. Это необходимо, чтобы создаваемая область отображалась над областью Работники (которая имеет sequence = 10). г. Оставьте другие параметры без изменений и щелкните Next >. 5. Щелкните Create Region. Обратите внимание, что в секции Regions теперь отображается область Подразделение, имеющая тип HTML. Теперь необходимо создать в области Подразделение визуальный элемент (item), который представляет собой выпадающий список выбора, использующий список значений подразделений: 1. Щелкните по кнопке Create и выберите опцию Page control on this page. Нажмите Next>. Отобразится мастер создания визуальных элементов. 2. На шаге Create Page Component выберите опцию Item,нажмитеNext>; 3. На шагеItem Type выберите тип элемента – Select List – и щелкните Next >. 4. На шаге Display Position and Name: а. Item Name – замените на P?_DEPARTMENT_ID. б. Sequence – поставьте значение 10. в. Region – выберите Подразделение. Щелкните Next >. 5. На шаге Item Attributes замените значение Label на Подразделение и щелкните Next >. 6. На шаге Settings в поле Page Action When Value Changed установите Submit Page.НажмитеNext>. 7. На шаге List of Values: а. Named LOV – выберите DEPARTMENTS. Этот список создан как компонент, разделяемый на уровне приложения (Shared Component), в предыдущей работе. б. Display Null Value– оставьте значение Yes. в. Null Display Value– введите -нет подразделения-. г. Null Return Value– введите -1. Ввод значений, которые подставляются вместо неопределенного значения (Null Value), позволяет облегчить написание запросов (облегчает проверку на Null). В этом случае, когда пользователь выбирает в списке -нет подразделения-, в элементе устанавливается значение -1, и Вы можете использовать это значение в запросе. Щелкните Next >. 8. На шаге Source: а. В поле Default введите -1. б. Оставьте другие параметры без изменений и щелкните Create Item. Итак, создан элемент, который будет принимать значения идентификатора подразделения, но пока еще он не соединен с отчетом. Чтобы сделать это, необходимо отредактировать SQL-запрос в Region Source, добавив в него предложение WHERE: 1. Откройте окно редактирования (Region Definition) для области Работники. 2. В поле Region Source добавьте в запрос после предложения FROM следующий текст: WHERE (DEPARTMENT_ID = :P2_DEPARTMENT_ID or (DEPARTMENT_ID is null and nvl(:P2_DEPARTMENT_ID,'-1') = '-1')) Данное предложение WHERE позволит отображать только работников, принадлежащих выбранному подразделению. Обратите внимание, что подстановочная строка :P2_DEPARTMENT_ID соответствует созданному ранее элементу. 3. Примените изменения. Когда на странице выполняется команда Submit, то переходы (branches), указанные для страницы, определяют, какая страница должна отобразиться следующей. В данном случае необходимо, чтобы после команды Submit на странице Работники снова отобразилась та же самая страница с отчетом о работниках, поэтому необходимо создать переход на страницу Работники: 1. В окне редактирования (Page) страницы Работники в колонке Page Processing выберите опцию After Submit и щелкните по иконке Create . Отобразится мастер создания перехода. Выберите опцию Branch и щелкните Next>. 2. На шаге Branch Attributes в строке Name введите Работники, остальное оставьте как есть. Нажмите Next>. 3. На шаге Target: а. В качестве целевой страницы в окне Page выберите страницу Работники. б. Отметьте флажок reset pagination for this page. Когда установлена эта опция, приложение отображает первую порцию данных, удовлетворяющих запросу. Когда же эта опция не выбрана, то если пользователь просматривал, например, третью порцию данных и выбрал другое подразделение, то ему будет отображена третья порция нового запроса. в. Оставьте все остальные параметры без изменений и создайте переход (нажмите Create Branch на шаге Branch Conditions). 4. Запустите страницу. Выберите любое подразделение, например, «Вестер». Должны отобразиться только работники, относящиеся к этому подразделению: 5. Добавьте возможность сортировки в отчете Подразделения по всем столбцам и в отчете Работники по всем столбцам, кроме столбца Изменить. Это можно сделать, поставив флажки Sort в разделе Column Attributes в окне редактирования столбцов соответствующего отчета (Report Attributes). 6. Запустите приложение и добавьте несколько работников в одно из подразделений. При этом проверьте работу сортировки по столбцам. 7. Измените в отчете Подразделения запись об одном из подразделений, удалив в нем сведения о менеджере (это надо сделать через соответствующую таблицу), и запустите это приложение.
Обратите внимание, что в отчете Подразделения исчезла запись о соответствующем подразделении. Причина в SQL-запросе, который не возвращает запись о подразделении, если в нем нет работников или менеджера. Чтобы в отчете отображались все подразделения, необходимо модифицировать SQL-запрос: 1. Замените текст запроса в Region Source для области Подразделения на странице Подразделения на следующий: SELECT d.department_id "Department ID", d.department_name "Department Name", count(e2.employee_id) "Number of Employees", nvl2(e.employee_id, 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 instr(upper(d.department_name),upper(nvl(:P2_REPORT_SEARCH, d.department_name))) > 0 GROUP BY d.department_id, d.department_name, nvl2(e.employee_id, substr(e.last_name,1,1)||'. '|| e.first_name, ''), c.country_name Обратите внимание на следующие моменты: · Функция nvl2 принимает 3 параметра: первый параметр проверяется на значение null, если первый параметр is not null, то функция возвращает значение второго параметра (первую букву имени и фамилию), иначе – значение третьего параметра (пустую строку). · В предложении FROM используется левое внешнее соединение (left [outer] join), которое означает, что будут выбираться все записи из левой части выражения, даже если для них нет соответствующих записей в правой части. Столбцы, по которым производится соединение, указываются после ключевого слова on. 2. Примените изменения и запустите страницу:
Обратите внимание, что теперь отображаются все подразделения, даже те, у которых не указаны менеджеры (и в которых нет работников). Задание к работе: 1. Проделайте все описанные действия со своими данными. При этом все промежуточные результаты через кнопку PrintScreen сохраняйте в отдельном файле: · Результат решения задачи 1. · Результат решения задачи 2. · Результат решения задачи 3.1. · Результат решения задачи 3.2. 2. Покажите результат преподавателю.
|