среда, 13 февраля 2013 г.

Bounded и Unbounded Task Flows. Виды Task Flow и работа с ними(Часть 2 - работа с Bouned Task Flow)

  Здравствуйте. В первой части этой статьи мы рассматривали Unbounded Task Flow. В  этой рассмотрим Bounded Task Flow(BTF).Как говорилось ранее:
  Bounded Task Flow- task flow имеющая четкие границы,  одну точку входа и  ноль или несколько точек выхода,   входные/выходные параметры, собственную область памяти  и декларативное управление транзакциями.
 Для демонстрации работы с Bounded Task Flow  в созданном нами приложении TaskFlowDemo в первой части   создадим  2 ADF Task Flow(MyFirstBoundedFlow.xml,     MySecondBoundedFlow.xml) в которых будут находиться :

  • В MyFirstBoundedFlow.xml: JSFF страница в котором будет поле ввода номера отдела и кнопка перехода на следующую страницу в  MySecondBoundedFlow.xml.
  • Во втором task flow будет входящий параметр Номер отдела(Deptno), при вводе которого на  странице выводится отдел, и информация по нему. А при нажатии кнопки "Показать сотрудников" переходим на страницу со списком сотрудников. 
Приступим.
1.Создайте Entity Object(Dept,Emp) и View Object(DeptView,EmpView) соответственно;
2. Для того, что бы  делать выборки из View Object  нам нужно создать параметр и критерий. Это делается во вкладке Query, как показано на следующих картинках(создайте для DeptView -Bind variable(Deptnop),View Criteria(DeptViewCriteria, где Deptno= :Deptnop),а для EmpView -Bind variable(DeptnoE),View Criteria(EmpViewCriteria, где Deptno= :DeptnoE);




3. Создайте Application Module, назовите его AppModule,добавьте в нем  DeptView,EmpView и убедитесь что с ними добавлены критерии.

4.Теперь нам нужно создать два Bounded Task Flow
Для этого этого зайдите в "File->New->JSF->ADF Task Flow"
Далее введите имя BTF  MyFirstBoundedFlow.xml и поставьте галочку "Create as Bounded task Flow", таким же образом создайте MySecondBoundedFlow.xml.
Мы  создали два   BTF. Теперь их нужно заполнить  объектами как показано на следующих картинках:
Создадим сначала объекты в  MySecondBoundedFlow:
  • Откройте MySecondBoundedFlow;
  • Перейдите во вкладку Parameters и создайте там Входящий параметр Deptno, со свойством value: #{pageFlowScope.Deptno} ;
  • Во входящем параметре Deptno будет храниться номер отдела  который мы будем вписывать в MyFirstBoundedFlow.  Теперь нам надо сделать выборку отдела со значением из входящего параметра, для этого нам надо перенести в DataControls  у DeptView1 операцию ExecuteWithParams(эта операция появилась когда мы создали ViewCriteria)  на область нашего task flow, и в появившемся окне в свойство value введите #{pageFlowScope.Deptno}
  • Теперь для вывода отобранного отдела  создадим страницу.Для этого  с Component Palette  перенесите View на task flow, назовите ее ViewDept  и нажмите два раза по ней.В появившемся нажмите "ОК". Мы создали ViewDept.jsff, теперь создадим там форму отображающую данные по отделу  перенеся c Datacontrols DeptView1 и выбрав ADF Form как показано на картинке и   кнопку перенеся компонент Button из Component Palette. 

Должна получиться  такая страничка :

  • Теперь  вернемся на наше taskflow и свяжем наши объекты с помощью Control Flow Case (сначала выберите его в Component Palette,  нажмите на объект ExecuteWithParams, а потом на DeptView )

  •  В  MySecondBoundedFlow  теперь надо выбрать сотрудников из выбранного отдела и вывести их. Для этого как ранее сделали с DeptView, поступите с EmpView1, то есть  перенесите в DataControls  у EmpView1 операцию ExecuteWithParams на область нашего task flow, и в появившемся окне в свойство value введите #{pageFlowScope.Deptno} и нажмите "ОК";
  • Свяжите ViewDept и ExecuteWithParams1 c помощью  Control Flow Case и назовите его "viewEmp"
  • Теперь для вывода выбранных сотрудников по выбранному  отдела  создадим страницу.Для этого  с Component Palette  перенесите View на task flow, назовите ее ViewEmp  и нажмите два раза по ней.В появившемся нажмите "ОК". Мы создали ViewEmp.jsff, теперь создадим там таблиц отображающую данные по отделу  перенеся c Datacontrols EmpView1 и выбрав ADF Read Only Table. В появившемся окне можно по своему назвать колонки,убрать ненужные, и добавить свойства фильтрации и сортировки. Выбрав фильтрацию, сортировку и изменив названия колонок должна получиться такая страница
  • Свяжите ExecuteWithParams1 и ViewEmp   c помощью  Control Flow Case ;
Мы связали все объекты, но не указали когда должна  выполняться связь viewEmp,  что бы это сделать вернитесь на страницу ViewDept.jsff, выберите созданную кнопку и в свойстве Action выберите  viewEmp. Один Task Flow готов, осталось указать точку входа в него. Для этого правой кнопкой нажмите по объекту  ExecuteWithParams и выберите Mark Activity->Default Activity.
Итак мы создали task flow  MySecondBoundedFlow   у которого есть входящий параметр, и что бы ввести этот параметр будем использовать  MyFirstBoundedFlow . 
В MyFirstBoundedFlow   :
  •  Создайте страницу для ввода параметра view1.jsff и добавьте в  нее компоненты Input Text и Button;
  • В свойстве value компонента input text введите #{pageFlowScope.Deptno};
  • Вернитесь в MyFirstBoundedFlow  и перенесите MySecondBoundedFlow как показано на следующем рисунке
  • Свяжите View1 и MySecondBoundedFlow  c помощью  Control Flow Case и назовите его "p2tf";
  • Нажмите правой кнопкой по view1 и выберите Mark Activity->Default Activity.
  • Вернитесь в view1.jsff, выберите  кнопку и в свойстве Action выберите  "p2tf"
Теперь нам осталось передать введенный номер отдела в  task flow  MySecondBoundedFlow. Для этого этого в MyFirstBoundedFlow   нажмите один раз по MySecondBoundedFlow.  В правом нижнем углу появятся свойства объекта.Найдите  там входящий параметр Deptno и введите в value #{pageFlowScope.Deptno};
Приложение готово. Что бы запустить его создайте jspx страницу,перенесите туда  MyFirstBoundedFlow  как показано на картинке и запускайте : )