Сервисная задача
|
Этот раздел перенесён из документации Camunda 7 и в дальнейшем будет доработан с учётом особенностей OpenBPM Engine |
Сервисная задача используется для вызова служб. В OpenBPM Engine это делается путем вызова Java-кода, предоставления рабочего элемента для асинхронного выполнения внешним исполнителем (worker) или вызова логики, реализованной в виде веб-сервисов.
Вызов Java-кода
Существует четыре способа объявления вызова Java-логики:
-
Указание класса, реализующего JavaDelegate или ActivityBehavior
-
Вычисление выражения, которое разрешается в объект-делегат (delegation object)
-
Вызов выражения-метода (method expression)
-
Вычисление выражения-значения (value expression)
Чтобы указать класс, вызываемый во время выполнения процесса, необходимо указать полное имя класса с помощью атрибута camunda:class.
<serviceTask id="javaService"
name="My Java Service Task"
camunda:class="io.openbpm.bpm.MyJavaDelegate" />
Подробности о том, как реализовать Java Delegate, смотрите в разделе Java Delegate Руководства пользователя.
Также можно использовать выражение, которое разрешается в объект. Этот объект должен соответствовать тем же правилам, что и объекты, создаваемые при использовании атрибута camunda:class.
<serviceTask id="beanService"
name="My Bean Service Task"
camunda:delegateExpression="${myDelegateBean}" />
Или выражение, которое вызывает метод или разрешается в значение.
<serviceTask id="expressionService"
name="My Expression Service Task"
camunda:expression="${myBean.doWork()}" />
Более подробную информацию о языке выражений в качестве кода делегата смотрите в соответствующем разделе Руководства пользователя.
Также можно вызывать логику, реализованную в виде веб-сервисов. camunda:connector — это расширение, позволяющее вызывать REST/SOAP API напрямую из рабочего процесса. Подробнее об использовании коннекторов смотрите в соответствующем разделе Руководства пользователя.
Универсальные Java-делегаты и внедрение полей (Field Injection)
Вы можете легко писать универсальные классы Java Delegate, которые можно позже сконфигурировать через BPMN 2.0 XML в Сервисной задаче. Подробности смотрите в разделе Field Injection Руководства пользователя.
Результаты Сервисной задачи
Возвращаемое значение выполнения сервиса (исключительно для Сервисной задачи, использующей выражения) может быть присвоено уже существующей или новой переменной процесса путем указания имени переменной процесса как литерального значения для атрибута camunda:resultVariable в определении Сервисной задачи. Любое существующее значение для конкретной переменной процесса будет перезаписано результатом выполнения сервиса. Если имя переменной результата не указано, значение результата выполнения сервиса игнорируется.
<serviceTask id="aMethodExpressionServiceTask"
camunda:expression="#{myService.doSomething()}"
camunda:resultVariable="myVar" />
В примере выше результат выполнения сервиса (возвращаемое значение вызова метода doSomething() у объекта myService) устанавливается в переменную процесса с именем myVar после завершения выполнения сервиса.
ПЕРЕМЕННЫЕ РЕЗУЛЬТАТА И МНОГОУРОВНЕВЫЕ ЭКЗЕМПЛЯРЫ (MULTI-INSTANCE):
Обратите внимание, что при использовании camunda:resultVariable в многоуровневой конструкции, например, в многоуровневом подпроцессе, переменная результата перезаписывается каждый раз при завершении задачи, что может выглядеть как случайное поведение. Подробности см. в camunda:resultVariable.
Внешние задачи (External Tasks)
В отличие от вызова Java-кода, где процессный движок синхронно вызывает Java-логику, можно реализовать Сервисную задачу за пределами границ движка в виде внешней задачи. Когда Сервисная задача объявлена внешней, процессный движок предлагает рабочий элемент исполнителям (workers), которые независимо опрашивают движок на наличие работы. Это отделяет реализацию задач от процессного движка и позволяет пересекать границы систем и технологий. Подробнее о концепции и соответствующем API смотрите в руководстве пользователя по внешним задачам.
Чтобы объявить Сервисную задачу как обрабатываемую внешне, атрибуту camunda:type можно присвоить значение external, а атрибут camunda:topic указывает тему внешней задачи. Например, следующий фрагмент XML определяет внешнюю Сервисную задачу с темой ShipmentProcessing:
<serviceTask id="anExternalServiceTask"
camunda:type="external"
camunda:topic="ShipmentProcessing" />
Расширения OpenBPM Engine
Атрибуты |
|
Элементы расширений |
|
Ограничения |
Обязателен один из атрибутов: |
Атрибут |
|
Атрибут |
|
Атрибут |
|
Атрибут |
|
Элемент |
Дополнительные ресурсы
-
Задачи в разделе BPMN Modeling Reference
-
Как вызвать веб-сервис из BPMN. Обратите внимание, что эта статья устарела. Однако она все еще актуальна в отношении того, как вызвать веб-сервис с помощью процессного движка.
Лицензия и атрибуция
Эта документация была создана на базе материала "Camunda 7 Docs" от Camunda, находится под лицензией Creative Commons Attribution-ShareAlike 3.0 Unported License .
Оригинал документации: https://docs.camunda.org