How to allow a user to put a Camunda BPMN process on hold at any time and resume it later?

Hi everyone,

I have a main BPMN process in Camunda that needs a “Hold” mechanism, allowing a user to pause the process at any point in the flow (from start to end) and then resume it later. I want:

  1. The ability to place the process on hold without cluttering the main process with extra gateways.
  2. The process to remain paused indefinitely until the user manually releases it.
  3. A simple, maintainable design pattern in BPMN (preferably not suspending the process instance via Cockpit).

I’ve heard that Non-Interrupting Event Sub-Processes with a boolean “onHold” variable—plus marking my main tasks as “Asynchronous Before”—is a common approach. The idea is that:

  • One event sub-process sets onHold = true when triggered (e.g., via a message or signal), pausing the main flow.
  • Another event sub-process sets onHold = false to resume.
  • The main flow only proceeds past each asynchronous boundary if onHold == false.

Could anyone share a best-practice BPMN example or advice on how to implement this cleanly? Specifically:

  1. How to configure the non-interrupting event sub-processes for “Hold” and “Release.”
  2. How to handle message/signal correlation for triggering these sub-processes.
  3. Any pitfalls or recommended settings for “Asynchronous Before” tasks.

Any guidance or references to existing docs/examples would be greatly appreciated!

What are you hoping that this “Hold” will do?
Any process that is waiting for a User to do something with it would arguably be on hold.

Remember that BPMN is intended to be “Technology Independent” … so work through this as if it were a set of paper-based forms… how would it work in that scenario?

We are a company based in the Middle East with a strict employment renewal process that occurs every six months. This process, involving at least fifteen tasks, requires a minimum of three weeks to complete and incurs associated costs. During this period, Project Managers may need to place the renewal of specific employees on hold due to project delays, cancellations, or other unforeseen circumstances. If a Project Manager initiates a hold, the renewal process for that employee should be halted at the current task and prevented from progressing further. Upon the Project Manager releasing the hold, the renewal process should resume from the exact task where it was previously suspended. This ensures that the process restarts seamlessly without requiring repetition of completed steps.

Thanks.

So PM sends a message to HR saying “Hold this renewal” and HR waits for the “Resume” message.
Then when they get the “Resume” message, they look over the renewal to figure out where they had got to, and start after that?

So that could look like this:

1 Like