всем привет!
интересует, каким образом можно получить текущее состояние процесса? например, как используя API камунды я могу понять, что в на приведенной модели процесса я нахожусь в подпроцессе, выделенным зеленым цветом?
Camunda 7.13 (встроенный в spring boot)
@Dmitry.Raz
https://docs.camunda.org/manual/7.15/reference/rest/process-instance/get-activity-instances/
Аналог есть в Java API.
Система вернет объект, содержащий текущие активности, в т.ч. с учетом дочерних/вложенных.
{
"id": "eca75c6b-f70c-11e9-8777-e4a7a094a9d6",
"parentActivityInstanceId": null,
"activityId": "invoice:2:e9d77375-f70c-11e9-8777-e4a7a094a9d6",
"activityType": "processDefinition",
"processInstanceId": "eca75c6b-f70c-11e9-8777-e4a7a094a9d6",
"processDefinitionId": "invoice:2:e9d77375-f70c-11e9-8777-e4a7a094a9d6",
"childActivityInstances": [
{
"id": "approveInvoice:eca89509-f70c-11e9-8777-e4a7a094a9d6",
"parentActivityInstanceId": "eca75c6b-f70c-11e9-8777-e4a7a094a9d6",
"activityId": "approveInvoice",
"activityType": "userTask",
"processInstanceId": "eca75c6b-f70c-11e9-8777-e4a7a094a9d6",
"processDefinitionId": "invoice:2:e9d77375-f70c-11e9-8777-e4a7a094a9d6",
"childActivityInstances": [],
"childTransitionInstances": [],
"executionIds": [
"eca75c6b-f70c-11e9-8777-e4a7a094a9d6"
],
"activityName": "Approve Invoice",
"incidentIds": [
"648d7e21-f71c-11e9-a725-e4a7a094a9d6"
],
"incidents": [
{
"id": "648d7e21-f71c-11e9-a725-e4a7a094a9d6",
"activityId": "AttachedTimerBoundaryEvent"
}
]
}
],
"childTransitionInstances": [],
"executionIds": [
"eca75c6b-f70c-11e9-8777-e4a7a094a9d6"
],
"activityName": "Invoice Receipt",
"incidentIds": null,
"incidents": null
}
Позвольте полюбопытствовать, для каких целей это нужно?
мстислав, я отправляю сообщение в камунду с помощью java api:
runtimeService.createMessageCorrelation().correlate();
если процесс находится вне границ подпроцесса, к которому подкручен получатель сообщения, то выдается эксепшен и транзакция откатывается.
хочу перед отправкой проверять, находится ли токен в подпроцессе
Зачем такие сложности? Используйте вместо correlate() вызов correlateAll() или correlateAllWithResultAndVariables() - они не возвращают исключение, если отсутствует событие-получатель сообщения.