Как получить текущее состояние процесса?

всем привет!

интересует, каким образом можно получить текущее состояние процесса? например, как используя 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() - они не возвращают исключение, если отсутствует событие-получатель сообщения.