пятница, 20 сентября 2013 г.

Обработка ошибок К2 процессов вручную

Прежде всего, хочется сказать, что идеальных систем не бывает. Ровно так же как и разработчиков, ведь как ни банально это звучит, но не ошибается лишь тот, кто ничего не делает :). Итак, сегодняшняя тема посвящена ошибкам, а точнее возможностям K2 blackpearl эти ошибки исправлять.



Честно говоря, меня немного удивил рассказ одного знакомого про то, как в их BPM-системе исправляются возникающие ошибки - они никак не исправляются, процесс просто переписывается и все контракты, заявки или что бы там ни было приходится перезапускать заново.

А что же К2, которая, как многие знают, является не просто самостоятельной BPM-системой, но и, одновременно, интеграционной платформой, в процессах которой информация может передаваться и обрабатываться сразу между несколькими системами (SharePoint, SAP, Oracle, CRM, и т.д.)? Давайте разберемся.



Может быть это и не совсем корректно, но я для себя выделяю два типа ошибок:

  • ошибки логики (неверные типы данных, пустые значения, недопустимые значения, отсутствие ожидаемых данных и параметров, ошибки вычислений и преобразований, неверные запросы к данным и т.п.)
  • ошибки коммуникаций (недоступность внешних систем, как правило временная - не работает почта, упал SharePoint, не доступны вебсервисы, ошибки конфигурации и так далее).
Думаю, что обе эти группы покрывают процентов 95 всех возможных ошибок, которые могут вам встретиться. Сразу хочу сказать, что рассматривать ошибки коммуникаций мы здесь не будем - любая ошибка в К2 логируется и попадает в так называемых Error Log, доступный из веб-приложения K2 Workspace, в разделе Management Console - и эти типы ошибок довольно легко устраняются без необходимости внесения каких-либо изменений в сами К2 процессы. Достаточно поднять упавший сервис, запустить службу, изменить настройки конфигурации и нажать кнопку Retry в K2 Management Console и процесс повторит блок, вызвавший ошибку, и пойдет себе спокойно дальше. 
А что делать, если ошибку нельзя устранить таким способом? Ведь если в вычислениях, например, появляется деление на ноль, или логикой процесса определяется пустое значение обязательного параметра, то такую ошибку нажатием кнопки Retry устранить не получится.

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

Рассмотрим пример такой ошибки и ее исправление. На рисунке вверху мы увидим, что один из процессов вывалился в ошибку, потому что запрос на извлечение данных вернул пустой адрес электронной почты и система не смогла по этой причине отправить email уведомление.

Там где не помогает кнопка Retry всегда поможет Visual Studio :).  Запускаем ее, и выбираем в меню View опцию K2 Process Management (отметим, что на клиентской машине предварительно должна быть произведена установка K2 Client Tools).


Далее, если мы развернем в появившейся консоли группу Error и выберем соответствующий Error Log (на рисунке внизу он один - All), то мы увидим список процессов в состоянии ошибки уже в Visual Studio. Выделим нужную ошибку и нажмем кнопку "Open".


Перед нами откроется кусок процесса, который вызвал ошибку в виде схемы WWF (не путать с Фондом защиты диких животных). 


Нажмем F7, чтобы просмотреть код этого блока в C#.


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


После исправления кода, нажмем кнопку "Save" для сохранения изменений. И закроем теперь уже ставшие ненужными окна с кодом и WWF-диаграммой. Мы увидим окно Error-лога со списком ошибок и доступной кнопкой Redeploy для нашей ошибки.


Нажмем ее и, после завершения редеплоя, нажмем кнопку Retry - можно прямо здесь же, либо в K2 Workspace.


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

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

Отправить комментарий