Size: a a a

Camunda BPM Group

2022 January 30

DP

Dmitrii Pisarenko in Camunda BPM Group
Здравствуйте!

А какая задача стоит? Для чего именно нужны повторные запросы?
источник

EZ

Edward Zakharov in Camunda BPM Group
источник

ЕЕ

Евгений Ефимов... in Camunda BPM Group
Что бы, если моргнула сеть. И camunda повторна пошла делать запрос на изменение состояния сервиса (rest api) то сервис смог понять, что он уже это делал и ответить нормально, а не ошибкой допустим. В качестве такого ключа используется activity instance ID
источник

MS

Mark Sinakaev in Camunda BPM Group
Даже нажать на кнопку "Далее" в форме быстро несколько раз, вылезает ошибка
источник

EZ

Edward Zakharov in Camunda BPM Group
Лучше уж на processInstanceId заложиться
источник

EZ

Edward Zakharov in Camunda BPM Group
Активити иснанс новый на каждое выполнение элемента схемы
источник

DP

Dmitrii Pisarenko in Camunda BPM Group
Действительно лучше использовать process instance ID.

А если по-хорошему, то я бы сделал этот сервис идемпотентным, чтобы можно было использовать стандартный механизм повторных попыток Камунды ( https://docs.camunda.org/manual/7.15/user-guide/process-engine/the-job-executor/#retry-time-cycle-configuration ).
источник

А

Алексей in Camunda BPM Group
У нас не чистая задача визарда. Есть бизнес-процесс оформления продукта это основное. При этом процесс может начаться в одной системе, а доталкивать его будет другая. Обработкой процесса могут заниматься разные бизнес-роли. В него подмешиваются функции визарда (2 переменные процесса). И фронт становится не зависимым от процесса. Его остаётся научить реагировать на состояние процесса и всего. При этом процесс остаётся в своих рамках. В тех двух переменных указываются шаги процесса и id сообщений, а не названия страниц, скажем.
источник

А

Алексей in Camunda BPM Group
Если бы через API камунды можно было бы начитать возможные граничные события, то и эти переменные бы не понадобились. Просто начитываем состояние и учим фронт реагировать. Но это к сожалению сделать через API нельзя.
источник

А

Алексей in Camunda BPM Group
Возврат нужен в тч в процессе, когда Клиент на полпути понимает, что хочет другой продукт, который он выбрал на первых шагах.
источник

DP

Dmitrii Pisarenko in Camunda BPM Group
Возможно, я чего-то не понимаю, но я не вижу, зачем здесь Камунда.
источник

А

Алексей in Camunda BPM Group
Есть банковский продукт, который нужно оформить. Процесс оформления растянут по времени и в нем участвуют несколько бизнес-ролей сотрудников. Это не вотчина камунды?!
источник

DP

Dmitrii Pisarenko in Camunda BPM Group
Допустим, этот продукт -- кредит.

В обработке заявки участвуют разные бизнес-роли.

В BPMN-процессе не должно быть ничего, связанного с тонкостями отображения во фронтенде.

Для этого Вы можете создать отдельную базу данных (отдельную от Камундовской), в которую процесс на Камунде будет писать данные, важные для фронта.

А фронтенд уже сам будет решать, какие страницы и как показывать на основании данных из этой отдельной базы.

Такой подход может работать.

А вот делать что-то на фронтенде в зависимости от переменных процесса Камунды -- сомнительно.
источник

DP

Dmitrii Pisarenko in Camunda BPM Group
Альтернатива: Фронтенд может через REST engine Камунды запрашивать у Камунды те или иные данные по экземпляру процесса.
источник

А

Алексей in Camunda BPM Group
Ну я так и писал. Просто в одну переменную кладу код шага процесса, в другую массив возможных id сообщений, которыми можно протолкнуть процесс далее. Это всё артефакты процесса. Если бы это можно было начитать всё через API камунды, то конечно было бы проще. Код текущего шага вроде как можно, но я решил запихнуть в переменную, не будет проблем с переименованием в схеме. А вот возможные сообщения, которые ожидает процесс в данной точке начитать нельзя через API. Особенно если подключены граничные события message boundary.
источник

А

Алексей in Camunda BPM Group
И получается фронт сам решает что отобразить в зависимости от текущего состояния процесса
источник

А

Алексей in Camunda BPM Group
При этом получается универсальный механизм. Я могу создать в куче мест процесса граничный message с одним и тем же названием ProductSelect, скажем. А на фронте отображать кнопку возврат к выбору продукта, если в текущем состоянии в массиве вернулся ProductSelect. Не вернулся значит не отображаем кнопку. По нажати кнопки в процесс отправляется сообщение ProductSelect и процесс переходит к соответствующему шагу. Далее фронт начитывает в очередной раз состояние процесса и видит, что оно уже другое и рисует экран с выбором продукта. При этом на фронте нет карты переходов, есть простая зависимость отобрази экран, если текущий шаг процесса такой-то.
источник

А

Алексей in Camunda BPM Group
Выше, когда я пишу процесс, подразумеваю экземпляр процесса конечно же.
источник
2022 January 31

DP

Dmitrii Pisarenko in Camunda BPM Group
Описанное Вами решение по моему ощущению чревато проблемами. Я бы так не делал. Камунда не рассчитана на то, что Вы хотите сделать. BPMN не рассчитан на описание вещей, связанных с пользовательским интерфейсом.

По моему опыту, BPMN-диаграммы имеют тенденцию разрастаться даже если в них нет деталей пользовательского интерфейса (как в Вашем случае).

Кажется, что Ваше решение усилит связность между серверной частью (Камундой) и фронтендом (фронтенд должен знать о том, как работает процесс в Камунде). Это не очень хорошо.

Что, если через несколько лет надо будет сделать клиент, который работает по принципиально другой логике, нежели нынешнее мобильное приложение? Означает ли это, что в BPMN-диаграмму надо будет добавить элементов для 2 клиентов?

Выбор, конечно, Ваш, но я бы серьезно посмотрел альтернативные решения (см. выше в этом чате).
источник

EI

Eugene Istomin in Camunda BPM Group
Думаю, вам стоит пообщаться с #архитекторами
Проблема не сколько в том, что так можно или нельзя сделать - она в том, в какие ограничения вы себя поставите и будут ли они понятны вашим клиентам/руководителям.
источник