вторник, 12 марта 2013 г.

3й - Практикум. Oracle ADF. Динамический регион (dynamic region), динамическое связывание (dynamic binding)

В этом практикуме показано применение динамического региона и динамическое связывание данных.


Динамический регион. 
Создадим запрос для получения всех менеджеров.
Текст запроса:
select employee_id, first_name, last_name, email, phone_number, hire_date, job_id, salary, commission_pct, manager_id, department_id
  from employees t
  where t.employee_id in (
       select e.manager_id from employees e
     )

Затем в качестве "Key Attribute" надо указать  "EmployeeId"

Разместим запрос в AppModule. Далее создадим аналогичный запрос который вернет только служащих "Employer".
Создадим страницу с фрагментами  "manager.jsff", в нее перетащим DataControl - "Manager1". И на его основе создадим Table см. рисунок.

Оставим  поля и настроим его, как на рисунке ниже

Далее создадим taskFlow c фрагментами для этой страницы.

Поместим в него страницу "manager.jsff"
 Далее сделаем еще одну страницу-фрагмент "employer.jsff", данные возьмем из "Employer1", страницу поместим в новый taskFlow - "task-flow-employer". Таким образом есть две страницы каждая в своем taskFlow.
Перетащим например taskFlow - "task-flow-manager" на форму main.jsff


Далее выберем bean - "mainBean", для свойства "DynamicTaskFlowId".
Для свойства "taskFlowId" создадим Accessors


На форме main.jsff переделаем внешний вид дерева. Удалим  OutputText, добавим commandImageLink и для него  оператор setActionListener, который настроим на свойство бина taskFlowId.


Таким образом по нажатию на link свойству бина "taskFlowId" будет присваиваться ИД задачи (taskFlowId), который считался из базы. В свою очередь при rendering  страницы из свойства "DynamicTaskFlowId"  будет считываться ИД ранее туда помещенный благодаря оператору (setActionListener). В  таблицу Menu БД необходимо внести изменения, записать taskFlowID

Скрипт для SqlPlus :
update menu t set taskflow = '/WEB-INF/task-flow-manager.xml#task-flow-manager' where name= 'Менеджеры';
update menu t set taskflow = '/WEB-INF/task-flow-employer.xml#task-flow-employer' where name= 'Специалисты';
commit;
 
В настройках security приложения дать права на новые задачи.

Некоторые изменение надо внести в прошлый проект, изменить scope mainBean на - session
 Иначе всегда будет показываться задача с "Менеджерами". Еще внести изменения в файле mainPageDef.xml, должно быть - <taskFlow id="dynamicRegion1" taskFlowId="${mainBean.dynamicTaskFlowId}"

Запускаем http://127.0.0.1:7101/myadf/faces/index, авторизуемся, и переключаемся между задачами из меню.
Динамическое переключение связей.

Сделаем форму просмотра (только чтение) "Менеджеров" и "Специалистов". По атрибутному составу они одинаковы, но взяты из разных источников данных (VO - Employer и Manager). Весь дизайн сделаем для "Employer", а затем в нужном месте вставим выражение (EL) которое будет вычислять нужный источник данных.
Разместим DataControl



Поместим эту форму в новый taskFlow

Сделаем возврат из задачи


В TaskFlow "task-flow-manager" сделать вызов задачи "task-flow-edit-emp", перетащив последнюю из структуры проекта.
 На форме "edit-emp", для кнопки, свойству Action сделать выбор - "goBack"

На форме "manager.jsff"  для таблицы добавить колонку, и в нее поместить кнопку с переходом на "goView"
Для taskFlow "task-flow-employer" и формы "employer.jsff" проделать подобные изменения.

После этого форму "edit-emp" можно настроить на вычисляемый источник данных. В бине "mainBean" добавим свойство "empDataSource"



Код в бине

На страничке "edit-emp" на вкладке Bindings для "Employer1Iterator", для свойства  "Binds" написать выражение "#{mainBean.empDataSource}"

Все готово. Теперь при выборе из меню будет работать динамический регион, а по нажатию кнопки View на форме (Менеджеры/Сотрудники) открываться форма просмотра (физически одна и та же) с динамическим переключением источника данных. 

Источник:

Dynamic Iterator Binding to Reuse View Link Relationship for Master-Detail
http://andrejusb.blogspot.ru/2010/04/dynamic-iterator-binding-to-reuse-view.html

Исходный код

Комментариев нет:

Отправить комментарий