Задача получения

Этот раздел перенесён из документации Camunda 7 и в дальнейшем будет доработан с учётом особенностей OpenBPM Engine

Задача получения — это простая задача, которая ожидает поступления определенного сообщения. Когда выполнение процесса достигает Задачи получения, состояние процесса фиксируется в хранилище данных. Это означает, что процесс останется в этом состоянии ожидания до тех пор, пока движок не получит конкретное сообщение, которое активирует продолжение процесса после Задачи получения.

receive task

Задача получения со ссылкой на сообщение может быть активирована как обычное событие:

<definitions ...>
  <message id="newInvoice" name="newInvoiceMessage"/>
  <process ...>
    <receiveTask id="waitState" name="wait" messageRef="newInvoice">
  ...

Затем вы можете либо коррелировать сообщение:

// коррелировать сообщение
runtimeService.createMessageCorrelation(subscription.getEventName())
  .processInstanceBusinessKey("AB-123")
  .correlate();

Либо явно запросить подписку и активировать ее:

ProcessInstance pi = runtimeService.startProcessInstanceByKey("processWaitingInReceiveTask");

EventSubscription subscription = runtimeService.createEventSubscriptionQuery()
  .processInstanceId(pi.getId()).eventType("message").singleResult();

runtimeService.messageEventReceived(subscription.getEventName(), subscription.getExecutionId());

Корреляция параллельного многоуровневого экземпляра невозможна, потому что подписку нельзя однозначно идентифицировать.

Чтобы продолжить экземпляр процесса, который в настоящее время ожидает в Задаче получения без ссылки на сообщение, можно вызвать runtimeService.signal(executionId), используя идентификатор выполнения, который достиг Задачи получения.

<receiveTask id="waitState" name="wait" />

Следующий фрагмент кода показывает, как это работает на практике:

ProcessInstance pi = runtimeService.startProcessInstanceByKey("receiveTask");
Execution execution = runtimeService.createExecutionQuery()
  .processInstanceId(pi.getId()).activityId("waitState").singleResult();

runtimeService.signal(execution.getId());

Расширения Camunda

Атрибуты

Элементы расширений

Ограничения

Атрибут camunda:exclusive обрабатывается только если атрибут camunda:asyncBefore или camunda:asyncAfter установлен в true

Лицензия и атрибуция

Эта документация была создана на базе материала "Camunda 7 Docs" от Camunda, находится под лицензией Creative Commons Attribution-ShareAlike 3.0 Unported License .

Оригинал документации: https://docs.camunda.org