Search code examples
business-process-managementbpmnbusiness-process

How to model cancellation of process by user in BPMN2?


I am modeling the process of handling applications. In real life the process is like this:

  • Data Entry person takes email (submittal) from mailbox and see if this valid application form or spam / junk email
    • If that is valid form, she will create application object in a system and start entering data from form
    • As she works through form (it is large) she may save "application" and return to it later
    • When all data is entered she will submit application
    • After application is submitted few more actions needs to be performed - some files need to be collected and attached to application
    • At the end it is send to QA for checking, etc.

The thing is that at any time Data Entry person may click on "Withdraw" in existing system and application will be withdrawn (cancelled).

How this should be modeled using BPMN2?


Solution

    • Bundle all tasks that you need to withdraw within a subproces.
    • Place a boundery event on the tasks that have a withdraw action and route this to a cancel exit event within the subproces.
    • Place a boundery cancel event on the subproces in which you handle all cancelation activities.

    This is know as modeling an ACID transaction in BPMN2, which is short for:

    • Atomic, as in: all or nothing.
    • Consistent, as in: prevent that the system state will be inconsistent.
    • Isolated, as in: each instantiation of the process is handled without any influence of an other instantiation.
    • Durable, as in: the state of the process is persisted in the database, so it can be restored when the system crashes.