First Things First
Invoice Receipt Processing
As alluded to earlier, the model itself is supported by an XML definition that means that each object in a BPMN diagram can be defined using XML. Any model that is captured using a BPMN-compliant modelling tool will contain this. Visio is not a BPMN-compliant tool but there are many free online (for the above diagram has been captured using BPMN.io).
For the model above I’ve pasted a snippet of the code behind the diagram. You get the source code from GitHub here and you can see the name of the role “Team assistant” and the names of the sequence flows in this role’s swimlane.
The rest of the code is there in the GitHub link if you want to investigate further.
Deployment onto BPM
The logic that this diagram represents can now be deployed onto an BPM engine and it creates a workflow which ensures that each time the process is called it creates the tasks as and when they are required. Each time an (expense claim is submitted) then an instance of this process is created and the engine then controls the workflow creating tasks for the right actor in their task-list when the flow of the process diagram moves to a task in their swim-lane.
In this way, each time the process is launched then there is a record created, furthermore, for each instance then there is a record of where the process has reached, so no job is able to fall through the cracks. If a task is not completed it stays in the actor’s task list until it is completed. Let’s look at an example.
The link below connects to an EC2 instance on AWS where I’ve installed the open source version of Camunda‘s BPM platform. This is the engine that interprets the BPMN diagrams. Onto this app server I’ve deployed a WAR file which contains the BPMN diagram and also some UI screens that will be displayed for any particular tasks.
It’s worth mentioning that what is generated on the engine is the business logic not front end screens. Most engines will have some simple interface for the front-end but 95% of the time a front end is developed in some framework like Angular. In this case the screens are simple HTML-based forms.