Previous story:
We want to rewrite our complete application (internal use) and are currently exploring new possibilities, which ideally help us to be more flexible in regards to changes and requests but also increases separation of business logic/wishes and developer work. We came across BPMN and possible engines and discovered the flowable engine. FYI: I’m coming from the business side and I’m not a programmer, thus my question may seem simple for the members of the forum.
Our idea of an architecture:
We want to use micro services for different “activities” and the flowable engine should orchestrates the other micro services. The communication between the different services is based on events and publish & subscribe. A web portal (user frontend) provides the list of the tasks, processes, overviews, buttons… The user front end will be outside of flowable, only the engine will be used.
Example process: A user registers for an event
Process steps:
- Checking whether registered user is new or already registered and if registered UserID must be selected
- If new, the user incl. master data has to be created
- User will be registered for the event either with the new UserID or the existing UserID
Assuming we have 3 micro-services (user_check, user_create, user_enroll) for these tasks.
When a process instance gets started, the user form for “user_check” will be provided.
In an old school portal, this form would include a button for “create a new user” (user_create) as well as provide a list of possible users, with buttons like “please use this user for enrollment” but with a BPMN engine, the know how of the process flow is in the BPMN engine and should not be in the form itself, meaning the form for “user_check” can only provide a result (new-user or UserId) and the button “complete task and send result to flowable”. Based on the output the engine will decide which service/form to call next.
I have struggle to understand, how this should work in reality, when we are not using the flowable internal forms. At the time of rendering the client-side code for “user_check”, it is not clear, what the next step will be, so how can you refer him to the correct next step? Is the user payload provided to flowable and flowable responses with “go to micro service user_create” and the client then requests the form for user_create? This is the only way, how I can see it work, but this seems to be cumbersome, as I always have two requests per task. Are my thoughts correct or am I missing something basic?