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

Повторение учебного примера "Getting Started with Oracle BPM Suite11gR1". Часть 2

В этой части я расскажу о проблеме, которая возникла у меня при повторении учебного примера, приведенного в разделе 13  книги "Getting Started with Oracle BPM Suite11gR1".
В этом разделе предполагается, что читатель создаст два бизнес-индикатора и настроит информационную панель для их просмотра. 
Раздел называется "Tutorial: Using standard and custom dashboards for the Request Quote process".

Все прекрасно получалось и соответствовало учебному примеру до момента создания custom dashboard. Информационную панель, в соответствии с рекомендациями книги, я создал, но данные, которые я ожидал там увидеть, в ней не отображались.

ТУ проблему, на которую я натолкнулся, можно обойти несколькими способами, НО ... Ведь по документации должно работать и так... Из-за этого я настойчиво копал и разбирался с проблемой. Заключается эта проблема в следующем:

1. Для BPMпроцесса можно определить бизнес-индикаторы, которые измерения (dimension) и факты (Measure) 




Процедура создания бизнес-индикаторов подробно описана в учебном примере. 
Как я понял, смысл этих индикаторов - подготовка интересующих пользователя или аналитика данных, которые расчитываются на том или ином этапе процесса и сохранение этих данных в специальных таблицах базы данных. 
А поооотооом..., когда возникнет необходимость получить ту или иную количественную информацию о процессе или о результатах работы процесса, аналитик (не сам конечно, а с помощью средств анализа) обратиться уже к подготовленным данным, записанным в таблицы базы данных, вместо того, чтобы лазить по XMLданным, хранящимся в экземплярах выполненных или выполняющихся процессом. 
Вроде бы все просто.

2. Далее, после того, как мы определили индикаторы, нам необходимо выбрать место в процессе, где они будут заполняться.
Для этого создается шаг процесса, в котором производится заполнение измерений и фактов
Вот этот  шаг

А вот заполнение измерений и фактов.


3. Далее в учебном примере предлагают создать measurement mark
Из описания я для себя понял, что measurement mark - это "такая штука", нужная ВОТ для чего... 
Аналитические данные процесса (то, что пишется в базу данных) по умолчанию (умолчание конечно можно изменить) не захватываются после автоматических активностей. На рисунке ниже видно свойство активности, с помощью которого можно управлять генерацией аналитических данных после выполнения активности.


 В примере говориться, что если Вы хотите отслеживать данные сразу, как только они введены, то Вам необходимо на переход после автоматической активности установить  measurement mark. На рисунке ниже показано, как это сделано.


4. Прекрасно... Теперь (по моим ожиданиям) можно создать информационную панель (custom dashboards) и с наблюдать за изменением индикатора В ТОТ МОМЕНТ, когда выполниться операция заполнения индикатора.
Параметры созданной панели приведены ниже.


5. Панель я создал, но данных НИКАКИХ не увидел.
И только после того, как выполнил НЕАВТОМАТИЧЕСКУЮ активность после активности, в которой присваиваются значения бизнес-индикаторам, я увидел график в инфопанели.


Первой мыслью моей было -"блин, опять я где-то не тот флажек поставил или еще что-то пропустил"... Два дня я искал причину такого поведения, но так ничего найти и не смог ((((
Вроде бы все четко написано, "ЧТОБЫ ДАННЫЕ БЫЛИ ЗАХВАЧЕНЫ, НАДО УСТАНОВИТЬ measurement mark". Но данные не захватываются и не отображаются в дашбоарде, пока не выполняется следующая после measurement mark неавтоматическия активность. Обойти эту проблему можно так:
    - присвоить значения бизнес-индикаторам на выходе из активности "Enter Quote Details". Тогда они сразу появятся в инфо-панели (проверял, работает)
    - установить у автоматической активности признак генерации аналитических данных (проверял, работает).
Но, если эту проблему обходить, то ЗАЧЕМ ТОГДА НУЖНА measurement mark??? Непонятно...

Как я проверял, что правильно все сделал...:
- сначала я решил проверить процесс. Дошел ли он до нужной точки и выполнил ли он требуемые активности. Мало ли... Может какая-то ошибка возникла при выполнении активности "Assign Indiсators". Заглянул в EM... Посмотрел... Нет. Вроде все нормально


- потом я решил посмотреть, что записывается в базу данных при выполнении активностей. Что происходит при захвате значений бизнес-индикаторов? Для process analytics в схеме SOAINFRA существуют специальные таблицы с префиксом BPM_CUBE...
Интересующая меня информация записывается в таблицу BPM_CUBE_TASKPERFORMANCE.
Если посмотреть, что содержится в таблице по интересующему меня процессу, то можно можно увидеть примерно следующее:
 SELECT t2.processname, t1.activityname, t1.activitytype, t1.label, t0.FLEXSTRING01,
         t0.FLEXNUMBERRANGE01,
         t0.FLEXNUMBER02 
    FROM BPM_CUBE_TASKPERFORMANCE t0, BPM_CUBE_PROCESS t2, BPM_CUBE_ACTIVITY t1
   WHERE      t1.PROCESSID = t2.PROCESSID
          and t0.PROCESSID = t1.PROCESSID
          AND t0.ACTIVITYID = t1.ACTIVITYID
          and componentinstanceid=50007

Результаты получились следующие:


Видно, что данные в measurement mark захвачены. Нужная мне информация сохранена в трех последних колонках. 
Можно сделать вывод, что (скорее всего) данные для анализа подготовлены правильно.
Остается только попробовать разобраться с дашбоардом. Только как с ним разобраться, если он представляет собой закрытую систему?

- Разборки с дашбоардом. 
Я решил попробовать так... Если дашбоард отображает сведения из базы данных, то должен он это делать на основе результатов какого-то запроса. И запрос этот можно найти в V$SQLAREA

select sql_text, executions from v$sqlarea where parsing_schema_name = 'SOA_SOAINFRA' 
and sql_text like '%BPM_CUBE_TASKPERFORMANCE%' order by executions;

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

  SELECT t0.FLEXSTRING01,
         t0.FLEXNUMBERRANGE01,
         AVG (t0.FLEXNUMBER02),
         COUNT (t0.FLEXNUMBER02)
    FROM BPM_CUBE_TASKPERFORMANCE t0, BPM_CUBE_PROCESS t2, BPM_CUBE_ACTIVITY t1
   WHERE (    (    (    (    (t2.UNDEPLOYDATE IS NULL)
                         AND (t0.DISCRIMINATOR IS NULL))
                    AND (t1.ACTIVITYTYPE NOT IN (:1, :2, :3, :4, :5)))
               AND (    (    (    (    (t2.DOMAINNAME = :6)
                                   AND (t2.COMPOSITENAME = :7))
                              AND (t2.SCALABEL = :8))
                         AND (t2.REVISION = :9))
                    AND (t2.PROCESSNAME = :10)))
          AND (    (t1.PROCESSID = t2.PROCESSID)
               AND (    (t0.PROCESSID = t1.PROCESSID)
                    AND (t0.ACTIVITYID = t1.ACTIVITYID))))
GROUP BY t0.FLEXSTRING01, t0.FLEXNUMBERRANGE01
ORDER BY t0.FLEXSTRING01 ASC, t0.FLEXNUMBERRANGE01 ASC



Условие, которое меня заинтересовало, выделено в запросе жирным шрифтом. 

Значения bindпеременных были мной получены из представления V$SQL_BIND_CAPTURE
select * from V$SQL_BIND_CAPTURE where sql_id = '6nj6tuy59tv9f'


И выяснилось, что в качестве переменных 1, 2, 3, 4, 5 в запрос подставляются значения
'MEASUREMENT_START',
'MEASUREMENT_STOP',
'MEASUREMENT_START_STOP',
'MEASUREMENT_COUNTER',
'SUBPROCESS'


С такими параметрами, естественно, в результатах запроса будут отсутствовать данные, полученные в указанной мною measurement mark.
Более того, все данные, которые получаются в ЛЮБОЙ measurement mark, будут исключаться из результатов dashboard.

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


Комментариев нет: