вторник, 5 февраля 2013 г.

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

Здравствуйте, в этой статье будет рассказываться о видах TaskFlow, их создании и работы  с ними. Приступим : )
Существует два вида Task Flow

  • Unbouned Task Flow - task flow не имеющая четких границ,  а имеющая множество активностей, правил их управления и managed beans при помощи которые позволяют пользователю выполнять требуемые задачи. В этом виде task flow может иметь множество входов и выходов.
  • Bounded Task Flow- task flow имеющая четкие границы,  одну точку входа и  ноль или несколько точек выхода,   входные/выходные параметры, собственную область памяти  и декларативное управление транзакциями.
Рассмотрим на примерах работу с Bounded и Unbounded Task flow;
Подготовительный этап:
 Создайте приложение (Fusion Web Application(ADF)) и назовите его TaskFlowDemo;


Unbounded Task flow

 Открыв adfc-config.xml,  вы увидите чистый лист.Это Unbounded Task Flow нашего приложения.  На него можно добавлять страницы(View), переходы между ними(Control Flow Case,  Wild Control Flow Rule), методы(Method Call), другие TaskFlow(Task Flow Call), будущий адрес приложения(URL View), сохранение данных(Save Point Restore), разветвление(Router)
На простом примере продемонстрируем как создаются страницы в task flow и осуществляется навигация между activity(страницы,методы,роутеры). Путем переноса на лист с "Component Palette"    создайте три view(page1,page2,page3), один Wild Card Control Flow Rule, и два  Control Flow Case(p1top2 - от page1 к page2,p3-  от Wild Card Control Flow Rule к page3)



Восклицательный знак  в желтом треугольнике означает к этому view еще не создана страница. Для того что бы создать страницу, нажмите два раза по view.Появится окно создания страницы в котором можно указать имя, путь,вид создаваемой страницы.Жмите "ОК". Так же поступите со всеми view на task flow.


Создав Control Flow Case и Wild Card Control Flow Rule мы указали возможности навигации между нашими страницами  : Control Flow Case p1top2 - позволяет переходить со страницы page1 на page2, а  Control Flow Case p3 - позволяет переходить всем страницам  на page 3(потому что Control Flow Case исходит от Wild Card Control Flow Rule).
Что бы осуществился переход со страницы  на страницу можно создать Button и в свойстве "Action" выбрать  наш  Control Flow Case.
Но часто возникает необходимость передачи каких либо данных между страницами в unbounded task flows.  Для демонстрации данной возможности  давайте на наших страницах создадим компоненты Button и OutputText как показано на рисунке ниже( на page1 две кнопки - для перехода на вторую и третью страницу, на page2 одну кнопку - для перехода на третью страницу и один Outputtext   для отображения информации откуда мы перешли, на page3 -один Outputtext   для отображения информации откуда мы перешли)
Итак, наше приложение будет по нажатию кнопки переходить на необходимую страницу, и в Output text выводить текст с какой страницы был произведен переход. Что бы реализовать это, нужно создать bean.Для этого на page1 два раза нажмите по созданной нам кнопке. Появится окно редактирования свойства "Action" в котором можно выбрать созданный bean,или создать  новый.  Создайте bean c именем PageFlowBean  и Scope: pageFlow, а метод назовите gotoPage2. 



В созданном PageFlowBean.java  для передачи данных между страницами создайте переменную  Ot (private String Ot) и get,set методы к ней .В JDeveloper  это делается очень легко нажатием кнопки Generate Accessors...



Теперь  в нашем бине есть три метода gotoPage2,getOt,SetOt. Метод gotoPage2 у нас должен вернуть название  Control Flow Case,   т.е. p1top2, а внутри метода присвоим строке значение "Произошел переход с page1 на page2" 
Метод должен выглядеть так:


    public String gotoPage2() {
        setOt("Произошел переход с page1 на page2");
        return "p1top2";
    }

Что бы создать методы для второй кнопки на page1 и одной кнопки на page2 нажмите по ним 2 раза,  в появившемся окне выберите наш managed bean( PageFlowBean) и назовите  методы : gotopage3from1,gotopage3from2  соответственно, а в методах переменной Ot присвойте текст откуда и куда мы переходим.
Методы должны выглядеть так:


    public String gotopage3from1() {
        setOt("Произошел переход с page1 на page3");
        return "p3";
    }

    public String gotopage3from2() {
        setOt("Произошел переход с page2 на page3");
        return "p3";
    }

Итак, наши методы сохраняют текст в переменную. Теперь нам надо вывести это текст в Outputtext. Для этого на странице выделите Outputtext1  ,  в свойстве "Value" удалите текущее значение и вызовите "Expression Builder". В окне находится большое количество всевозможных объектов.Необходимый нам(ot) находится в "JSF Managed Beans->pageFlowScope->PageFlowBean->ot".  Выберите его и нажмите "ОК". Так же поступите с  Outputtext1 на page3


Приложение готово, запустив page1 и нажав на "Переход на страницу 2" мы увидим такое окно: 

Пример элементарный, но при этом позволяет изучить основы работы с Unbounded Task Flow. Вторая часть статьи будет посвящена описанию работы с Bounded Task Flow