вторник, 3 ноября 2015 г.

Пользовательские задачи Oracle BPM 12c: новая функциональность таймеров

После авторизации в Oracle BPM Workspace 12c выбрав экземпляр любой задачи вы обнаружите, что у задач появились два новых действия:
  • Начать работу (Start Task)
  • Закончить работу (Stop Task)
Функциональность данных действий работает следующим образом:
После выполнения "Начать работу" включается таймер, а после выполнения "Закончить работу" таймер выключается и сохраняется длительность включённого таймера с нарастающим итогом

Особенности

  • Функциональность "Начать работу" / "Закончить работу" не генерируют событий (EDN), поэтому значения можно узнать через API или в следующем (по времени) генерируемом событии.
  • Если задача назначена на группу/роль, то выполнение "Начать работу" приводит так же к выполнению "Взять в работу".
  • Если пользователь выполнил "Начать работу" и затем исполнил/завершил задачу (т.е. не была выполнена операция "Закончить работу"), то значение таймера длительности будет 0. 
  • Таймер никак не связан с пользователями выполняющими действия. Последовательный пример: 
    1. назначается задача на первого пользователя
    2. первый пользователь выполняет "Начать работу"
    3. первый пользователь переназначает на второго пользователя
    4. второй пользователь выполняет "Закончить работу" и исполняет/завершает задача
    В итоге: нет информации сколько времени с задачей работал первый пользователь, а сколько второй. Есть только информация сколько времени прошло с включения таймера (действия "Начать работу") до выключения таймера (действия "Закончить работу").

Недостатки

  • Данная функциональность не документирована (ни в пользовательской документации, ни в Oracle Fusion Middleware Workflow Services Java API Reference for Oracle SOA Suite).
  • Следствие первого пункта - доступна только из Oracle BPM Workspace 12c (как следствие, не доступна, если вы не используете его).
  • Следствие первого пункта - данная функциональность может быть изменена вендором (пока не будет внесена в публичную документацию). 

суббота, 31 октября 2015 г.

Пользовательские задачи Oracle BPM 12c: эскалация

Под эскалацией в Oracle BPM 12c (и в 11g) подразумевается автоматическое переназначение исполнителя задачи на другую роль, группу или пользователя (обычно более высокого по иерархии).

Эскалация может производиться:
  • автоматически по истечению указанного времени в конфигурации задачи
  • пользователем выполнившим действие «Эскалировать» (Escalate), которое может быть доступно:
    • Исполнителю задачи (Assignee)
    • Владельцу задачи (Owner)
    • Администратору (Admin)

Особенности:

  • В зависимости от того на ком находится задача на момент эскалации:
    • Если это группа или пользователь, то отрабатывает указанная custom escalation java function (если функция не указана, то задача завершится будет ошибкой)
    • Если это роль, то выполняется эскалация на указанный в роли Escalation Path (может быть роль, группа, пользователь).
       
    • Последующие эскалации:
      • Если в Escalation Path указана роль, то последующая эскалация будет выполнятся на Escalation Path данной роли
      • Если в Escalation Path указан пользователь или группа, то отрабатывает указанная custom escalation java function (если функция не указана, то задача завершится будет ошибкой).
  • Для каждой задачи можно задать глубину автоматической эскалации, т.е. кол-во раз которое будет выполнятся эскалация. По истечению указанного количества задача становится просроченной (expired).

четверг, 4 июня 2015 г.

Декодирование xsd:base64Binary в xsd:string

Цель:
При использовании JMS Adapter для получения текстового сообщения в формате XML, для которого XSD не известна, используется опция "Native format translation is not required (Schema is Opaque)". В этом случае входящее сообщение будет содержать элемент типа xsd:base64Binary, содержащий закодированное в base64 полученное сообщение.
Решение:
Т.к. в Oracle SOA Suite 11g отсутствует XSLT или XPATH-функции, позволяющая декодировать base64, поэтому можно использовать активность "Java Embedding" для решения данной задачи.
Итак, в BPEL-процессе есть две переменные:
 <!-- входная переменная из JMS Adapter -->
 <variable name="encoded_Input" messageType="ns1:Consume_Message_msg"/>  
 <!-- переменная в которую декодируем base64 -->
 <variable name="decoded_Input" type="xsd:string"/>
Добавляем в BPEL-процесс активность "Java Embedding" содержащую следующий код:
 try {      
     oracle.xml.parser.v2.XMLElement input = (oracle.xml.parser.v2.XMLElement) getVariableData("encoded_Input", "opaque");
     String input_str = input.getTextContent();   
     oracle.soa.common.util.Base64Decoder decoder = new oracle.soa.common.util.Base64Decoder();        
     String decoded = null;       
     decoded = decoder.decode(input_str);   
     setVariableData("decoded_Input", decoded);      
 } catch (Exception e) {  
     addAuditTrailEntry("EXCEPTION OCCURRED: " + e.toString());  
 }  

Альтернативный вариант - создание собственной XSLT или XPATH-функции для декодирования base64.

четверг, 16 апреля 2015 г.

Освоение Oracle BPM

Требуется:
Выполнить простейший tutorial с Oracle Technology NetworkДалее выполнить tutorial по одной из следующих книг:
  • Getting Started with Oracle BPM Suite 11gR1
  • Oracle BPM Suite 11g Developer's Cookbook
Изучить "продвинутые" аспекты по книге: 
  • Oracle BPM Suite 11g Advanced BPMN Topics
Полезные ссылки:

суббота, 4 октября 2014 г.

Пятая часть освоения SOA

Требуется изучить:

Выполнить задание:

  • Сенсоры и BAM:
    • По книге Getting Started With Oracle SOA Suite 11gR1 изучить и выполнить задания по главе 16 (посвящённой Oracle BAM);
    • Сделать композит (с BPEL-процессом), который будет вызывать внешний сервис (который нужно так же реализовать). Этот внешний сервис периодически возвращает ошибку (например такая логика: если минута в текущем времени четная, то вернуть ошибку). Нужно сделать отчёт средствами Oracle BAM содержащий информацию по общему кол-ву запущенных инстансов и сколько из них с ошибками
  • REST:
    • Сделать композит взаимодействующий с RESTful-сервисом (сам RESTful-сервис создайте его любым удобным средством).