I am trying to use Camunda Process Engine to run BPMN models created in modeler.
I execute the models from Java directly like this:
When that call returns it has either execute the whole flow or if there are user entry steps it has stopped in those.
I can get an activity ID for example from the runtime using the process instance ID.
But how can I get my hands on the form that was defined of the “User Task” so that I can check what fields I need to populate and how do I populate the task so that the process can continue? I would need to understand where to get the right objects to read the data from and where to store the human input.
I am not using web interface in this particular case but something completely different, so therefore using HTML forms/JS/etc. are not working unfortunately.
Thanks in advance!
you can use TaskService to find out which tasks are currently available for a specific process instance (https://docs.camunda.org/javadoc/camunda-bpm-platform/7.6/org/camunda/bpm/engine/TaskService.html)
When you found your specific Task, then you can find out more about it using the FormService (https://docs.camunda.org/javadoc/camunda-bpm-platform/7.6/org/camunda/bpm/engine/FormService.html)
Hope this helps.
Thanks a lot for your fast response!
I did now that and I was able to submit the form with
I see from my debug output that it continues the execution synchronously. When that returns however, the processInstance that I have is not updated with correct state. The process has finished as it should but the processInstance that I previously used to check still has still a state
isEnded() -> false.
How could I update the processInstance with the latest values or should I run some other method to make sure the process state gets updated?
You need to query again for the process instance via
RuntimeService#createProcessInstanceQuery. An object returned via API always represents a snapshot of that entity at the time the API call returns. In that sense, it is rather like a (web) service API than an object-oriented API.
Ok, that makes perfect sense.
One question about it: I would like to get the instance with variable but this
createProcessInstanceQuery is returning just of type ProcessInstance. Is there an alternative way to make the query or should I try to get the variables some other way?
ProcessInstanceWithVariables is only returned on process start and cannot be obtained in another way. Use
RuntimeService#getVariables or similar APIs to obtain variables at a later point.
The problem with this approach is that after the processing is done the
runtime.getVariables doesn’t return anything.
This doesn’t work either
processInstance = runtime.createProcessInstanceQuery.processInstanceId(processInstanceId).singleResult().
So how can I get hold of the processing results after the processing is done?
HistoryService. You can find a lot of these things by a) exploring what kind of services and methods
ProcessEngine offers or b) reading the user guide.
Yeah, sorry about the stupid questions. However I got it working thanks to your help