Как контролировать пользовательский интерфейс (например, Vaadin) через "камунду" или "текучие" BPM?
Здравствуйте!
У меня проблема с камундами или текучими BPMS. Мне нужно изменить свой интерфейс в зависимости от бизнес-процесса.
Например:
- У меня есть процесс A (пользовательская задача), и camunda (текучий) должен генерировать форму в Vaadin. Затем он должен дождаться активности пользователя и продолжить... (или камунде нужно просто вызвать форму vaadin, дождаться окончания обработки в бэкэнде и получить ответ)
- Если у меня есть другой процесс, Camunda должен создать другую форму и т. Д.
Имеет ли этот подход смысл? Или было бы более целесообразно использовать BPM, такие как Camunda для использования только для бизнес-процессов (не для пользовательского интерфейса)?
Заранее спасибо!
1 ответ
Механизмы процессов работают по принципу, согласно которому важна только текущая задача, и механизм знает (через модель bpmn), что делать дальше. Вы отказываетесь от полного контроля над потоком и тем самым получаете упрощенные обновления и модификации. Движок работает асинхронно, и пользователь, выполняющий задачу, не знает (и не должен), какие следующие действия будут предприняты.
Тем не менее, процессоры обычно не очень хорошо подходят для "волшебников", таких как потоки пользовательского интерфейса. Движок обрабатывает "TaskA" как одну задачу, сохраняет ее, а затем создает в списке задач неподписанную "TaskB", которая затем может быть снова востребована и обработана пользователем (необязательно тем же пользователем).
Однако, если вы хотите придерживаться своего подхода, взгляните на шаблон посредника UI, который является поведенческим шаблоном, который скрывает основное асинхронное продолжение от пользователя-мастера.
Есть старое, но все же полезное сообщение в блоге, в котором описывается, как адаптировать шаблон к движку процесса камунды. По сути, вы блокируете и ждете, когда пользователь завершит задачу, и если последующая задача снова предназначена для выполнения пользователем, вы перенаправляете ее.
Я нашел какое-то решение. Просто используйте FormKey на стороне Камунды. И в приложении Vaadin создайте FormFactory (шаблон фабричного метода), который возвращает необходимую форму по идентификатору.
public CustomForm getForm(Task task) {
String formKey = task.getFormKey();
if(formKey.equalsIgnoreCase("formId1") {
return new Form1(...);
}
etc
Такой подход позволит вам использовать дополнительные кнопки, пользовательские формы и так далее.