понедельник, 24 марта 2014 г.

Создание простого BPM процесса в Jdeveloper 11.1.x.0

ADF разработчик должен уметь не только разрабатывать ADF  приложения, но и полноценные BPM решения.
В этой статье, мы разработаем BPM процесс, с помощью  Oracle SOA Suite.  Если он у вас не установлен, то сначала изучите эту статью :  Установка и настройка Oracle SOA Suite

Итак, BPM - это подход к моделированию, автоматизации, управлению и оптимизации бизнес-процессов в рамках организационных подразделений, систем и приложений.

Создадим простой процесс  по принятия студента в университет.

Что бы его создать, нам нужно пройти следующие этапы:
  1. Моделирование бизнес-процесса.
  2. Создание Ролей и пользователей
  3. Создание процесса.
  4. Создание бизнес объектов(Data object и Bussines object)
  5. Создание Human Task 
  6. Создание форм
  7. Разработка процесса
  8. Deploy процесса.
  9. Тестирование процесса





Моделирование бизнес-процесса.

Для создания процесса "обрисуем" наше решение:
В нашем  процессе будут участвовать всегда три человека:секретарь деканата вводящий студента, декан и ректор( с них будет  требоваться одобрение).

Процесс  получается такой :

  1. Секретарь вводит данные абитуриента и его средний бал за экзамены
  2. Если средний был больше 20, то данные передаются на одобрение в деканат( иначе абитуриент не принят)
  3. Если Декан  согласовывает принятие абитуриента, то данные передаются на одобрение в ректорат(иначе абитуриент не принят)
  4. Если  Ректор  согласовывает принятие абитуриента, то абитуриент принят и данные записываются в БД( иначе абитуриент не принят)



Создание Ролей и пользователей

Для начала создадим BPM приложение. 







При моделировании мы определили кто будет участвовать в процессе(Секретарь, Декан, Ректор). Теперь нам нужно создать пользователей и роли для них в JDeveloper.
Управление ролям  происходит в компоненте Organization  во вкладке Roles
Создайте три роли:
  • Sekretariat
  • Dekanat
  • Rektorat

Теперь нам нужно создать пользователей. Это делается в http://localhost:7001/console  в разделе Security Realms( как это делается показано на рисунках ниже).
Создайте три пользователя

  • Sekretar
  • Dekan
  • Rektor





После создания  пользователей, нам необходимо их связать с ролям. Для  этого нужно вернуться в компонент Organization. Выбрать роль , нажать на лупу в разделе Members и выбрать созданного пользователя.
Соответствие ролей к пользователям должно быть следующее:
  • Sekretariat-Sekretar
  • Dekanat-Dekan
  • Rektor-Rektor


Создание процесса.

Создав роли и пользователей, можно приступить к созданию процесса .Сначала нужно отобразить эти роли в следующем порядке(Sekretariat-Dekanat-Rektorat).
Роль по умолчанию(Role) меняется двойным нажатием по ней.


Что бы добавить новую роль, нужно  нажать правой кнопкой в свободной области процесса
После добавления ролей, создадим непосредственной сам процесс.
Нам понадобятся 5 компонентов(они находятся в панели Component Palette) :
  • Initiator -  компонент типа Human Task для инициирования  процесса и создания формы. Он будет использоваться  в роли Sekretariat для инициирования процесса и формы Ввода данных.
  • User  Task -  компонент типа Human Task для создания форм.Они будут использоваться в ролях  Dekanat и Rektorat для форм согласования.
  • Service - компонент  для добавления сервисов в процесс. Этот компонент будет использоваться в роли Rektorat для добавления студента в БД.
  • Exclusive - компонент для создания условий.Этот компонент будет использоваться во всех ролях для реагирования системы  на вводимые данные пользователями.
  • Sequence Flow - компонент для связывания компонент.

При помощи этих компонент создайте процесс нарисованный на рисунке снизу:


Создание бизнес объектов(Data object и Bussines object)

Создав процесс, нам нужно создать бизнес объекты которые участвуют в нем. 
Нам необходимо создать:
  • Surname (String) -фамилия абитуриента
  • Name (String) - имя абитуриента
  • Patronomyc (String) - отчество абитуриента
  • DateBirth(DateTime)- день рождения абитуриента
  • Exam(Real) - средний балл за экзамены
  • ApproveD(Boolean)- переменная типа Boolean для  согласования поступления абитуриента с Деканом
  • ApproveR(Boolean)- переменная типа Boolean для  согласования поступления абитуриента с Ректором
Эти объекты для процесса создаются в панели Structure (нижний левый угол). Нужно нажать правой кнопкой мыши по Process Data Objects->New.


Создание Human Task

В Oracle BPM для того что бы создать формы для взаимодействия с пользователем необходимо  сначала у User Task создать Human Task, а потом на его основе сгенерировать   форму .   Нам нужно создать три  Human Task для нашего процесса (для каждого User Task) со следующими параметрами 

User Task  для роли Sekretariat:
Имя Human Task: HumanTaskSekretar
Outcome: Submit
Параметры  Human Task (переменные используемые в  форме):
  • Surname (Editable)
  • Name (Editable)
  • Patronomyc (Editable)
  • DateBirth(Editable)
  • Exam(Editable)

User Task  для роли Dekanat:
Имя Human Task: HumanTaskDekanat
Outcome: OK
Параметры  Human Task :
  • Surname
  • Name
  • Patronomyc 
  • DateBirth
  • Exam
  • ApproveD(Editable)

User Task  для роли Rektorat:
Имя  Human Task: HumanTaskRektorat
Outcome: OK
Параметры  Human Task :
  • Surname
  • Name 
  • Patronomyc 
  • DateBirth
  • Exam
  • ApproveD
  • ApproveR(Editable)
    Как создать Human Task показано на рисунках ниже:



    Создание форм

    После создания Human Task-ов мы можем приступить к созданию форм. 
    Для этого нужно нажать по User Task правой кнопкой и выбрать Open Human Task                


    В открывшемся Human Task отображаются все параметры. На их основе можно создать форму. Это делается нажатием на Create Form в левом верхнем углу и выбором либо AutoGenerate Task Form(необходимо дать название проекта, остальное сформируется автоматически), либо Launch Task Fom Wizard( форма формируется по указанным вами параметрам). Выберем автоматическое формирование.






    В созданной форме нам нужен только блок Contents и кнопки(остальные можно удалить).

    Сформируйте три формы.


    Разработка процесса

    Мы создали процесс и формы. Теперь нам необходимо создать условия для   Exclusive и создать сервис для компонента Service, который будет добавлять студента в БД.

    Условия создаются не в самой   Exclusive, а в  Sequence Flow отходящих от него. Нажмите два раза по Sequence Flow  который отходит от  Exclusive "Проверка проходил ли по баллам" к User Task "Согласование Декана". В появившемся окне перейдите во вкладку "Properties".   Поменяйте тип на "Condition", выберите Expression: XPath Exp, нажмите на Expression Builder и наберите там  bpmn:getDataObject('Exam')>20 . Теперь если переменная  Exam больше 20, то процесс пойдет по этому  Sequence Flow.   Таким же способом установите condition для Sequence Flow после Exclusive  согласования декана   с  Expression: Simple Exp и значением ApproveD = = true(если декан согласовал то продолжить работу), и для Sequence Flow после Exclusive  согласования ректора   с  Expression: Simple Exp и значением ApproveR == true(если ректор согласовал то продолжить работу) .
                               

    Теперь нам необходимо создать сервис для добавления студента в базу.Для этого сначала создадим таблицу в базе:

    CREATE TABLE STUDENTS 
    (
      SURNAME VARCHAR2(100) 
    , NAME VARCHAR2(100) 
    , PATRONOMYC VARCHAR2(100) 
    , DATEBIRTH DATE 
    );

     Теперь откройте composite.xml нашего основного проекта. Там отображается  наш бизнес процесс и компоненты которые с ним связаны. Найдите в Component Palette компонент  Database Adapter и перенесите его в композит.


    В появившемся окне введите имя будущего сервиса.Например InsesrtStudent


    Далее в появившемся окне выберите Connection в котором находится ваша таблица(если отсутствует создайте ее). в JNDI name укажите  имя вашей базы данных


    В окне выбора типа операции выберите Insert Only


    В следующем окне нажмите Import Tables и добавьте необходимую таблицу





    Дальше можно нажать Finish. Сервис создан. Теперь этот  сервис прикрепим к процессу. Для этого вернемся в него и откроем свойства компонента Service. В ней откройте вкладку Implementation.Выберите Type:Service Call, и выберите созданный нами сервис



     После этого нужно передать в сервис данные о студенте. Для этого нажмите на Data Association, и  сопоставьте  созданные бизнес объекты с элементами сервиса как указано на рисунке ниже: 



    Теперь нам нужно создать прописанный нами ранее JNDI eis/DB/localhost. Для этого сначала создайте Data Source в  http://localhost:7001/console для соединения с вашей базой .






    Далее нам нужно создать Connnection pool в DB Adapter c именем который мы указывали в JNDI name при создании сервиса (eis/DB/localhost) 
                             



    В созданном соединении  в свойстве xADatasourceName пропишите JNDI name созданного вами Data Sorce для подключения  к базе (jdbc/local) и нажмите Ввод(иначе не сохраняется).


    Готово.  Напоследок  можно немного улучшить формы декана и ректора. Автоматически сформированные  поля для согласования переконвертировать в  SelectBooleanCheckBox




    Deploy процесса

    Для деплоя, нажмите правой кнопкой по проекту где находится процесс и выберите пункт Deploy

    В появившемся окне выберите Application Server



    В следующем окне определяется версия проекта и метод деплоя( перезаписывать ли предыдущий проект)

     В следующем окне указывается деплоить ли проекты привязанные к основному. У нас это наши формы, так что их нужно выбрать.



    Далее выберите  необходимый сервер для развертывания, а в нем доступный SOA сервер и жмите Finish





    Тестирование процесса
    Процесс установлен и задеплоен. Теперь проверим его работу. Процессы, после развертывания отображаются по адресу http://localhost:7001/bpm/workspace . Это рабочее пространство бизнес процессов. Первый участник процесса Sekretar. Заходим : )


    Появилось рабочее пространство.Для нас важны две вкладки:

    • Представления - активные задачи текущего пользователя
    • Заявки - Приложения доступные для данного пользователя

    Найдите на вкладе Заявки наш процесс и нажмите по нему. Если процесс был разработан правильно, то появится первая наша форма. Введите данные по абитуриенту и нажмите "Отправить"

    Если вы ввели средний бал за экзамен больше 20, то  следующий участник процесса Dekan.Войдите в рабочее пространство под ним. На вкладке  Представления должно появиться  задача для согласования деканом абитуриента. Если по ней нажать  появится сама форма


    Если Декан согласовал, то  следующий участник процесса Rektor .Войдите в рабочее пространство под ним. На вкладке  Представления должно появиться  задача для согласования ректором абитуриента. Если по ней нажать  появится сама форма


    Если Ректор согласовал, то  в базу добавляется абитуриент и становится студентом : )



    Проверить работу  каждого процесса можно  по адресу http://localhost:7001/em. Найдите там наш проект и нажмите по нему. В открывшемся окне находится список экземпляров процесса.Если по ним нажать, то открывается окно с трэйсингом процесса.



    Зеленым светом отображается путь, по которому двигался процесс.