Задача получения
|
Этот раздел перенесён из документации Camunda 7 и в дальнейшем будет доработан с учётом особенностей OpenBPM Engine |
Задача получения — это простая задача, которая ожидает поступления определенного сообщения. Когда выполнение процесса достигает Задачи получения, состояние процесса фиксируется в хранилище данных. Это означает, что процесс останется в этом состоянии ожидания до тех пор, пока движок не получит конкретное сообщение, которое активирует продолжение процесса после Задачи получения.
Задача получения со ссылкой на сообщение может быть активирована как обычное событие:
<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