Здравствуйте. В первой части этой статьи мы рассматривали Unbounded Task Flow. В этой рассмотрим Bounded Task Flow(BTF).Как говорилось ранее:
Bounded Task Flow- task flow имеющая четкие границы, одну точку входа и ноль или несколько точек выхода, входные/выходные параметры, собственную область памяти и декларативное управление транзакциями.
Для демонстрации работы с Bounded Task Flow в созданном нами приложении TaskFlowDemo в первой части создадим 2 ADF Task Flow(MyFirstBoundedFlow.xml, MySecondBoundedFlow.xml) в которых будут находиться :
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 как показано на картинке и запускайте : )
ох, спасибо за труд конечно,
ОтветитьУдалитьно оооочень путанное объяснение!
мало того, что прыгаем туда сюда, так еще и не понятно что именно делаем, суть операций...
нельзя ли разжевать что и для чего такое
EmpViewCriteria
pageFlowScope (#{pageFlowScope.Deptno} )
Mark Activity->Default Activity
и вообще, как-то последовательно все сделать....
спасибо.