AnsweredAssumed Answered

How to model restarting at a specific task (partial rewind)

Question asked by jeanhelou on May 16, 2012
Latest reply on Aug 6, 2013 by erny18031
We are currently facing a modelisation problem, and hopefully someone with more expertise can come up with a good solution.

Given the following workflow :
[attachment=1]main_workflow_restart_task1.png[/attachment]

All the workflow steps represent an action on a complex product. After each task, a new set of information on the product is guaranteed to be coherent. However, there can be mistakes and all the sets are editable even after a set of information has been  validated.

When information in the set related to task 1 is modified, the process needs to be restarted. This one is fairly easy, we put the whole process in a subprocess, add a receive task which triggers an error end event and an errorboundary event which restarts the subprocess.

But are asked to be able to "restart" any task from any task afterwards and we haven't found a proper way to do taht. Idealy we would only restart the branch which needs to be restarted and only from the task which needs to be revalidated.

Like if we are pending at Task 4 and an information in the set related to task 3.2 is modified, we want the workflow to have the state :
- Task 2.3 completed,waiting on the join.
- Task 3.2 pending.
- Task 3.3 and Task 4 are "cancelled" because they are "after" in the graph

Currently we are condidering storing the state of every task in the current process from the application, cancelling the current workflow and use the api to recursively complete all the tasks we can reach in the new workflow which were completed in the previous one except for the task which needs reopening.

Alternatively, we are considering using an exclusive gateway from the receive Task, passing the task_id we want to reopen and use it as a condition to reach the correct task and restart it something like (but even worse as we need to add a bypass for both branches):
[attachment=0]main_workflow_restart_any.png[/attachment]


Can you tell us what we are doing wrong ?

Thanks

Outcomes