Camunda BPM Loan Assessment Process Lab v1.0
Camunda BPM Loan Assessment Process Lab v1.0
Camunda BPM Loan Assessment Process Lab v1.0
08725853
Allan Fernandez
8725853
Camunda BPM Platform
Loan Assessment Process Lab
Camunda BPM Platform 2014
1
Camunda BPM Platform - Loan Assessment Process lab
The lab is built using the Loan Assessment process as described in Chapter 9 of the textbook
Fundamentals of Business Process Management (Springer, 2013) authored by M. Dumas,
M. La Rosa, J. Mendling and H.A. Reijers. The complete process description can be
downloaded from http://fundamentals-of-bpm.org/wp-
content/uploads/LoanAssessmentProcessDescription.zip.
Camunda is an open source Java based BPM platform used primarily to automate Business
Process Model and Notation (BPMN) 2.0 processes. It is built around the process engine
component. The software is still in the development stage and some features are currentl
being implemented. There are certain limitations to the use of BPMN 2.0 elements in
Camunda. Some elements are dependent on specific modelling criteria, failing to satisfy
which doesnt produce the expected outputs. Keeping these hindrances in mind, the loan
assessment process has been redesigned as and when needed to overcome them.
Constraints observed have been listed with necessary references and inputs from Camunda
development team. Java and Groovy programming languages have been used to integrate
some tasks into the loan assessment process.
This lab uses Camunda BPM Platform V7.1.0-Final on Apache Tomcat 7 server. A java
development kit (JDK) version 6.0 or greater must be installed to run the software. Eclipse
IDE is also required for the process designer.
Camunda BPM Platform 2014
2
Table of Contents
1.0 Camunda BPM Introduction ............................................................................................................. 3
1.1 Process Engine and Infrastructure ................................................................................................. 4
1.2 Web Applications .......................................................................................................................... 4
1.3 Additional Tools ........................................................................................................................... 4
1.4 Eclipse Kepler ............................................................................................................................... 5
1.5 Overview of Camunda BPMN design tool in Eclipse Kepler:...................................................... 5
1.6 Overview of Camunda BPM Platform: ......................................................................................... 7
2.0 Set up requirements ........................................................................................................................... 8
2.1 Installing the applications ............................................................................................................. 8
2.2 Creating a Maven project ............................................................................................................ 12
Step 1: Create a new Maven Project in Eclipse ............................................................................ 12
Step 2: Add Camunda Maven Dependencies ................................................................................ 13
2.3 Model a Process .......................................................................................................................... 16
2.4 Deploy and run the Process Application ..................................................................................... 19
3.0 Implementation of Loan Approval Process .................................................................................... 24
4.0 Validation and Deployment ............................................................................................................ 58
5.0 User Designations ........................................................................................................................... 62
6.0 Execution ........................................................................................................................................ 63
6.1 Scenario 1: .................................................................................................................................. 63
6.2 Scenario 2: .................................................................................................................................. 82
6.3 Scenario 3: .................................................................................................................................. 86
6.4 Scenario 4: .................................................................................................................................. 93
6.5 Scenario 5: .................................................................................................................................. 98
6.6 Scenario 6: ................................................................................................................................ 100
6.7 Scenario 7: ................................................................................................................................ 101
6.8 Scenario 8: ................................................................................................................................ 102
7.0 Further Readings ........................................................................................................................... 103
Appendix A: Constraints observed in Camunda BPM Platform ........................................................ 104
Constraint 1: .................................................................................................................................... 104
Constraint 2: .................................................................................................................................... 107
Constraint 3: .................................................................................................................................... 111
Constraint 4: .................................................................................................................................... 113
Constraint 5: .................................................................................................................................... 116
Camunda BPM Platform 2014
3
Appendix B: Loan Asssessment Process without Email Task ............................................................ 121
Appendix C: Loan Assessment Process with Email Task (Execution failure in Camunda BPM
Platform) ............................................................................................................................................. 122
1.0 Camunda BPM Introduction
Camunda BPM is a lightweight, open source platform for Business Process Management. It is
dedicated to Java developers and their typical software development infrastructure, while
providing Business IT-Alignment during process design and runtime using the BPMN 2.0
standard.
Camunda BPM Platform 2014
4
Camundas core is a native BPMN 2.0 process engine that runs inside the Java Virtual Machine.
It integrates with Java EE 6 and is a perfect match for the Spring Framework. On top of the
process engine, one can also choose from a stack of tools for human workflow management,
operations and monitoring.
The tutorial uses Camunda version V7.1.0-Final.
1.1 Process Engine and Infrastructure
Process Engine: The process engine is a java library responsible for executing BPMN
2.0 processes and workflows. It has a lightweight POJO core and uses a relational
database for persistence. ORM mapping is provided by the mybatis mapping
framework.
Spring Framework Integration
CDI/Java EE Integration
Runtime Container Integration (Integration with application server infrastructure)
1.2 Web Applications
REST API: The REST API allows using the process engine from a remote application
or a Java Script application.
Camunda Tasklist: A web application for human workflow management and user tasks.
The task list allows process participants to inspect their workflow tasks and navigate to
task forms in order to work on the tasks and provide data input.
Camunda Cockpit: A web application for process monitoring and operations. Camunda
Cockpit allows searching for process instanced, inspecting their state and repairing
broken instances.
Camunda Cycle: A web application for synchronizing BPMN 2.0 process models
between different modelling tools and modellers
1.3 Additional Tools
Camunda Modeller: Eclipse plug-in for process modelling.
Camunda-bpmn.js: JavaScript framework for parsing, rendering and executing BPMN
2.0 from XML source.
Camunda BPM Platform 2014
5
1.4 Eclipse Kepler
Eclipse is an integrated development environment (IDE). It acts as a platform to develop
applications for different programming languages such as: Ada, ABAP, C, C++, COBOL,
JavaScript, Java, Python etc. A unique feature of Eclipse is that it provides an extensible
plug-in system for customizing the workspace as per the work environment needs.
Camunda provides a plugin called Camunda Modeller which is integrated into Eclipse
(Indigo/Juno/Kepler) to design the BPMN model and deploy it on Camunda Process Engine as
a war file. Camunda Modeller has been integrated into Eclipse Kepler as part of designing and
building the lab.
1.5 Overview of Camunda BPMN design tool in Eclipse Kepler:
BPMN 2.0 elements
Camunda BPM Platform 2014
6
The two main features of Camunda Modeller plug-in is it provides a range of BPMN 2.0
elements to build the BPMN models which can be further specialized as per the
requirements by entering the relevant details in Properties Applet.
Features supported by Properties Applet:
Define expressions, java delegates and classes to automate the BPMN process
models
Create user forms
Properties applet
Camunda BPM Platform 2014
7
1.6 Overview of Camunda BPM Platform:
Camunda Cockpit: With camunda BPM Cockpit you can monitor and administrate your
running process instances. The Cockpit architecture allows you to use plugins to extend the
functionality, so you can individually adapt the tool to your personal requirements.
Camunda Tasklist: The Tasklist is a demo web application to provide you with the possibility
to work on User Tasks. The Tasklist is part of camunda BPM distribution and ready to use by
opening http://localhost:8080/camunda/app/tasklist.
Camunda Cycle: With Cycle you can synchronize the BPMN diagrams in your business
analyst's BPMN tool with the technically executable BPMN 2.0 XML files your developers
edit with their modeler (example in Eclipse). Depending on your tool we can realize forward-
and a reverse engineering, while you can store your BPMN 2.0 XML files in different
repositories (example SVN, file system or FTP servers).
Camunda BPM Platform 2014
8
2.0 Set up requirements
2.1 Installing the applications
Step 1: Install Camunda BPM platform
First, download a distribution of camunda BPM platform. You can chose from different
application servers. In this tutorial, we will use the Apache Tomcat 7 based distribution. After
having downloaded the distribution, unpack it inside a directory of your choice.
After you have successfully unpacked your distribution of camunda BPM platform, execute
the script named start-camunda.bat (Windows users)
This script will start the application server and open a welcome screen in your Web
browser. If the page does not open, go to http://localhost:8080/camunda-
welcome/index.html.
Camunda BPM Platform 2014
9
Step 2: Install Camunda Modeller
Use the following links to install the plugins:
Kepler
http://camunda.org/release/camunda-modeler/update-
sites/kepler/latest/site/
Indigo and Juno
http://camunda.org/release/camunda-modeler/update-sites/latest/site/
Add the update site URL (see above) as an Eclipse Repository
Camunda BPM Platform 2014
10
The item camunda Modeler appears. Select it and click Next
Wait for the installation details. Click Next
Before you can download the plugin you will be prompted to accept the User Agreement. Click
Next
Camunda BPM Platform 2014
11
The installation progress window appears. Wait.
You will get a security warning message during the installation. Click OK.
After the installation has finished you will be prompted to restart your Eclipse. Click Restart
Now. After the restart the camunda modeller is ready to use.
Camunda BPM Platform 2014
12
2.2 Creating a Maven project
Step 1: Create a new Maven Project in Eclipse
In eclipse, go to File / New / Other .... This opens the New Project Wizard. In the New
Project Wizard select Maven / Maven Project. Click Next.
On the first page of the New Maven Project Wizard select "Create a simple project (skip
archetype selection)". Click Next.
On the second page (see screenshot), configure the Maven coordinates for the project.
Since we are setting up a WAR Project, make sure to select Packaging: war.
When you are done, click Finish. Eclipse sets up a new Maven project. The project appears in
the Project Explorer View.
Camunda BPM Platform 2014
13
Step 2: Add Camunda Maven Dependencies
The next step consists in setting up the Maven dependencies for your new process application.
Add the following dependencies to the pom.xml file of your project:
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.camunda.bpm.getstarted</groupId>
<artifactId>loan-approval</artifactId>
<version>0.1.0-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>org.camunda.bpm</groupId>
<artifactId>camunda-engine</artifactId>
<version>7.1.0-Final</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
</dependencies>
Camunda BPM Platform 2014
14
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.3</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
</plugins>
</build>
</project>
Now you can perform the first build. Select the pom.xml in the Package Explorer,
perform a Right Click and select Run AS / Maven Install
Step 3: Add a Process Application Class
Next, you need to create a package, e.g. org.camunda.bpm.getstarted.loanapproval and
add a Process Application class to it. The Process Application class constitutes the
interface between your application and the process engine.
package org.camunda.bpm.getstarted.loanapproval;
import org.camunda.bpm.application.ProcessApplication;
import org.camunda.bpm.application.impl.ServletProcessApplication;
@ProcessApplication("Loan Approval App")
Camunda BPM Platform 2014
15
public class LoanApprovalApplication extends
ServletProcessApplication {
// empty implementation
}
Step 4: Add a META-INF/processes.xml deployment descriptor
The last step for setting up the process application is adding the META-
INF/processes.xml deployment descriptor file. This file allows us to provide a declarative
configuration of the deployment(s) this process application makes to the process engine.
This file needs to be added to the src/main/resources/META-INF folder of the Maven
project.
<?xml version="1.0" encoding="UTF-8" ?>
<process-application
xmlns="http://www.camunda.org/schema/1.0/ProcessApplication"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<process-archive name="loan-approval">
<process-engine>default</process-engine>
<properties>
<property name="isDeleteUponUndeploy">false</property>
<property name="isScanForProcessDefinitions">true</property>
</properties>
</process-archive>
</process-application>
Camunda BPM Platform 2014
16
2.3 Model a Process
Step 1: Create a new BPMN 2.0 diagram
In the eclipse Package Explorer select the src/main/resources folder. Right-click and select
New > Other .... Go to the folder Other and select BPMN 2.0 Diagram. Click Next.
On the second page, you must specify the file name of the process. Put in loan-
approval.bpmn. Click Finish
Step 2: Start with a Simple Process
Start by modeling a simple process. From the Palette on the right hand side to the canvas,
drag a Start Event
Double Click on the Label of the Start Event. A text box opens. Type "Loan Request
Received".
When editing Labels, you can add line breaks by typing Shift + Enter.
Add a User Task to the process. Name it "Approve Loan". Add an End Event named "Loan
Request Approved"
Camunda BPM Platform 2014
17
Step 3: Configure a User Task
Next, Open the properties view. If the properties view is not visible, select it from the menu:
Window / Show View / Other ... This opens a dialog. From the dialog select Properties.
Select the User Task on the canvas. This updates the selection in the Properties View. Scroll
to the Property named Assignee. Type "john".
After you are done, save your changes.
Camunda BPM Platform 2014
18
Step 4: Configure an executable Process
Since we model an executable process, we should give it an ID and set the isExecutable
property to true. Open the properties view and click on a free spot of the modeling canvas.
This displays the properties of the process itself.
1. First, configure an ID for the process. Type "approve-loan" in the property field
Process Id. The ID property is used by the process engine as identifier for the
executable process and it is best practice to set it to a human-readable name.
2. Second, configure the Name of the process. Type "Loan Approval" in the property
field Name.
3. Finally, check the box of the Is Executable property. If you do not check this box, the
process definition is ignored by the process engine.
After you are done, save your changes.
Camunda BPM Platform 2014
19
2.4 Deploy and run the Process Application
Step 1: Select the war file
A Process Application is an ordinary Java Web Application and is deployed in exactly the
same way.
Select the pom.xml in the Package Explorer, perform a Right Click and select Run AS /
Maven Install. This will generate a WAR file named loan-approval-0.0.1-SNAPSHOT.war In
the target/ folder of your Maven project.
Camunda BPM Platform 2014
20
Step 2: Deploy to Apache Tomcat
In order to deploy the process application, copy-paste the loan-approval-0.0.1-
SNAPSHOT.war from your Maven project to the $CAMUNDA_HOME/server/apache-
tomcat/webapps folder.
Check the log file of the Apache Tomcat server. If you see the following log message, the
deployment was successful:
Camunda BPM Platform 2014
21
Step 3: Check with camunda Cockpit and Tasklist
Now use cockpit to check whether the process is successfully deployed. Go to
http://localhost:8080/camunda/app/cockpit. Your process is visible on the start screen.
Next, go to camunda Tasklist (http://localhost:8080/camunda/app/tasklist). Log in with demo
/ demo. After you have logged in, click on the button to start a process instance. Select
Loan Approval from the list. This opens a page which explains that no form has been defined
for starting the process. Click on Start process using generic form.
The generic form can be used whenever you have not added a dedicated form for a User Task
or a Start Event. Click on the button to get a new row. Fill in the form as shown in the
screenshot. When you are done, click .
If you now go back to camunda Cockpit, you see the newly created process instance that is
waiting in the User Task.
Log out of the Tasklist and log back in with the user credentials "john / john". Now you see
the Approve Loan task in your inbox. Click on the button. This displays the process
diagram highlighting the User Task that is waiting for you to work on it.
Camunda BPM Platform 2014
22
To work on the task, click the button. Again, there is no task form associated with the
process. Click on Work on task using generic form. This displays the variables you have put
in in the first step.
Camunda BPM Platform 2014
23
Camunda BPM Platform 2014
24
3.0 Implementation of Loan Approval Process
Step 1
Create a pool: Loan Provider
Create lanes: Loan Applicant, Loan Officer, Finance Officer, Property Appraiser and
Insurance Sales representative
Camunda BPM Platform 2014
25
*Please Note: There is a bug with respect to using two or more pools and has been noted
under constraints 1 of the Appendix in report
Step 2
Create a Start event in Loan Applicant lane and name it Loan application completed.
Create a form under start event with the following field name and types:
Loan Application
Field Name Field Type Required(R)/Optional(O)
Applicant_Name String R
Applicant_Surname String R
Email String R
Home_Phone Long R
Mobile_Phone Long R
Current_Address String R
Previous_Address String O
Current_Employer String R
Monthly_Net_Revenue Long R
Bank_Name String R
Account_Type String R
Account_Number String R
Account_Balance Long R
Property_Type String R
Property_Address String R
Camunda BPM Platform 2014
26
Purchasing_Price Long R
Loan_Type String R
Loan_Provider String R
Loan_Amount Long R
Loan_Duration String R
Loan_Start_Date Date R
Loan_End_Date Date R
Interest_Type Enum (Variable/Fixed) R
Interest_Rate Long R
Insurance_Quote_Required Boolean R
Administration Information
Application_Identifier String O
Application_Submission_Date String O
Application_Revision_Date String O
Application_Status Enum (Complete/
Incomplete/ Assessed/
Rejected/ Cancelled/
Approved)
O
Comment_on_Status String O
Camunda BPM Platform 2014
27
*Please Note: There is a bug with respect to default and initial user assignment validation
and has been noted in the constraints 2 and 4 of the Appendix.
Field names defined under
Form fields view.
Id and Label denotes the field
name
Type denoted the field type
Validation=> name= required
and config= true for required
field name
Field names defined under
Form fields view.
Id and Label denotes the field
name
Type denoted the field type
Properties=> id= default and
value= for optional field
name
Camunda BPM Platform 2014
28
Step 3
Create a User Task: Update Loan Application and assign user Mary
(General>>Assignee) as Loan Applicant
Create a timer for the user task so that the loan application is cancelled after a time
interval of 5 days
Field names defined under
Form fields view.
Id and Label denotes the field
name
Type denoted the field type
Value=> id and name
denotes the dropdown options
for the field name
Create a form for Loan Application
as described in step 2
Camunda BPM Platform 2014
29
Create a boundary
event
Assign a timer definition
to the boundary event
Camunda BPM Platform 2014
30
Create an intermediate
end event
Camunda BPM Platform 2014
31
Step 4
Create an Event-Based join gateway to join the two tasks
In Properties applet>>Event>>Duration=
P5DT0H0M0S in ISO 8601 format (D->days,
T->Time, H->Hours, M->Minutes, S->Seconds
Camunda BPM Platform 2014
32
Step 5
Create a script task to check if Email, Home_Phone and Mobile_Phone fields are in the
right format and add Application_Identifier, Application_Submission_Date and
Application_Revision_Date to the loan application form along with the appropriate
comments in Comments_on_Status field (if format is wrong). Furthermore if the
application is in right format, the flow should proceed to Credit History task else it
should revert to Update Loan Application task
Camunda BPM Platform 2014
33
Script Language: Groovy
Script:
if(Email ==~ /[a-z_][a-z0-9_]+@[a-z0-9_.?]+.[a-z]{1,3}/) {
Application_Status= 'complete';
} else {
Application_Status = 'incomplete';
execution.setVariable ("Email", "Wrong Format");
execution.setVariable ("Comment_on_Status", "Revision Needed");
}
if(Home_Phone ==~ /\d{10}$/) {
Application_Status = 'complete';
} else {
Application_Status = 'incomplete';
execution.setVariable ("Home_Phone", "Wrong Format");
execution.setVariable ("Comment_on_Status", "Revision Needed");
}
if(Mobile_Phone ==~ /\d{10}$/) {
Application_Status = 'complete';
} else {
Application_Status = 'incomplete';
execution.setVariable ("Mobile_Phone", "Wrong Format");
Camunda BPM Platform 2014
34
execution.setVariable ("Comment_on_Status", "Revision Needed");
}
Application_Identifier = execution.getVariable ("ProcessInstanceId");
execution.setVariable ("Application_Identifier",
Application_Identifier);
execution.setVariable ("Application_Submission_Date", (new Date
()).format("dd/MM/yyyy"));
execution.setVariable ("Application_Revision_Date", (new Date
()).format("dd/MM/yyyy"));
Step 6
Add an Exor split gateway with the following Listener expression:
${Application_Status=='complete'} or ${Application_Status=='incomplete'} (for routing
appropriately).
For Update Loan Application user task sequence flow; assign the flow condition:
${Application_Status=='complete'}
For Check Credit History user task sequence flow; assign the flow condition:
${Application_Status=='incomplete'}
Camunda BPM Platform 2014
35
Step 7
Add a parallel split gateway to execute user tasks Check Credit History and Appraise
Property simultaneously.
Step 8
Create a User Task: Check Credit History and assign user Peter (General>>Assignee) as
Finance Officer. Create a Credit History Report form as per Step 2. The loan application
form should be visible to the Finance Officer, but in read-only format.
Credit History Report
Field Name Field Type Required(R)/Optional(O)/Not
Applicable (N/A)
Finance Officer
Identifier
String N/A
Court Judgement
Information
String O
Bankruptcy Information String O
Credit Assessment Enum
(B/BB/BBB/A/AA/AAA)
N/A
Loan Application
History: Amount
Long N/A
Loan Application
History: Duration
String N/A
Camunda BPM Platform 2014
36
Loan Application
History: Start Date
Date N/A
Loan Application
History: End Date
Date N/A
Loan Application
History: Interest
Long N/A
Overdue Credit
Accounts: Amount
Long N/A
Overdue Credit
Accounts: Duration
String N/A
Overdue Credit
Accounts: Start Date
Date N/A
Overdue Credit
Accounts: End Date
Date N/A
Overdue Credit
Accounts: Interest
Long N/A
Current Credit Card
Provider: Amount
Long N/A
Current Credit Card
Provider: Duration
String N/A
Current Credit Card
Provider: Start Date
Date N/A
Current Credit Card
Provider: End Date
Date N/A
Current Credit Card
Provider: Interest
Long N/A
Camunda BPM Platform 2014
37
Step 9
Create a User Task: Appraise Property and assign user Mary (General>>Assignee) as
Property Appraiser. Create a Property Appraisal Report form as per Step 2.
Property Appraisal Report
Field Name Field Type Required(R)/Optional(O)/Not
Applicable (N/A)/ Read Only
(RO)
Application_Identifier String RO
Property Appraiser
Identifier
String N/A
Surrounding Properties1:
Name
String N/A
Surrounding Properties1:
Value
Long N/A
Surrounding Properties2:
Name
String N/A
Surrounding Properties2:
Value
Long N/A
Surrounding Properties3:
Name
String N/A
Surrounding Properties3:
Value
Long N/A
Estimate Value Long N/A
Comments_on_property String N/A
Validation: readonly=True to make
the loan application form fields as
non-editable
Camunda BPM Platform 2014
38
Step 10
Create a Service Task: Assess Loan Risk to automatically assign Risk Weights as per
Credit Assessment selected. Create a Java class to execute this task.
Credit Assessment Risk Weight
B 0
BB 20
BBB 40
A 60
AA 80
AAA 100
Camunda BPM Platform 2014
39
Java class is assigned to the Service
Task
Java code to execute the service task
Camunda BPM Platform 2014
40
Java code to execute the Service Task:
package org.camunda.bpm.getstarted.riskassessment;
import org.camunda.bpm.engine.delegate.DelegateExecution;
import org.camunda.bpm.engine.delegate.JavaDelegate;
public class risk_assessment implements JavaDelegate {
protected long Risk_Wt;
protected String Credit_Asst="";
public void execute(DelegateExecution execution) throws
Exception {
Credit_Asst= (String)
execution.getVariable("Credit_Assessment");
System.out.println((String)
execution.getVariable("Credit_Assessment"));
if (("B").equals(Credit_Asst)) {
Risk_Wt=0;
}
else if (("BB").equals(Credit_Asst)){
Risk_Wt=20;
}
else if (("BBB").equals(Credit_Asst)) {
Risk_Wt=40;
}
else if (("A").equals(Credit_Asst)) {
Risk_Wt=60;
}
else if (("AA").equals(Credit_Asst)) {
Risk_Wt=80;
}
else if (("AAA").equals(Credit_Asst)) {
Risk_Wt=100;
}
execution.setVariable("Risk_Weight", Risk_Wt);
System.out.println("Risk Weight" + Risk_Wt);
System.out.println("Credit_Assessment = " + Credit_Asst);
}
}
Camunda BPM Platform 2014
41
Step 11
Add a parallel join gateway to execute the outputs of Assess Loan Risk and Appraise
Property tasks simultaneously.
Step 12
Create a User Task: Assess eligibility and assign user John (General>>Assignee) as
Loan Officer. Loan Application form, Credit History report and Property Appraisal report
must be visible to the Loan Officer but in read-only format. Create the following fields in
the user form as per step2
Field Name Field Type Required(R)/Optional(O)/Not
Applicable (N/A)/ Read Only
(RO)
Loan Officer Identifier String N/A
Eligibility_Status Enum
(eligible/ineligible)
N/A
Comments_on_eligibility String N/A
Camunda BPM Platform 2014
42
Step 13
Create a script task-Update form status to check for eligibility status of loan application. If
eligibility status=eligible, change Application_Status=assessed and assign sequence flow
to Prepare and Acceptance Task. If eligibility status=ineligible,
Application_Status=rejected change assign sequence flow to View Rejected Application
task.
Camunda BPM Platform 2014
43
Script Language: Groovy
Script:
if ((Eligibility_Status=='ineligible')) {
Application_Status='rejected';
}
else {
Application_Status='assessed';
}
out:println "Application_Status" + Application_Status;
out:println "Applicant_Name" + Applicant_Name;
out:println "Applicant_SurName" + Applicant_SurName;
out:println "Email" + Email;
out:println "Home_Phone" + Home_Phone;
out:println "Mobile_Phone" + Mobile_Phone;
out:println "Current_Address" + Current_Address;
out:println "Previous_Address" + Previous_Address;
out:println "Current_Employer" + Current_Employer;
out:println "Monthly_Net_Revenue" + Monthly_Net_Revenue;
out:println "Bank_Name" + Bank_Name;
out:println "Account_Type" + Account_Type;
out:println "Account_Number" + Account_Number;
out:println "Account_Balance" + Account_Balance;
out:println "Property_Type" + Property_Type;
out:println "Property_Address" + Property_Address;
out:println "Purchasing_Price" + Purchasing_Price;
out:println "Loan_Type" + Loan_Type;
out:println "Loan_Provider" + Loan_Provider;
out:println "Loan_Amount" + Loan_Amount;
out:println "Loan_Duration" + Loan_Duration;
out:println "Loan_Start_Date" + Loan_Start_Date;
out:println "Loan_End_Date" + Loan_End_Date;
Camunda BPM Platform 2014
44
out:println "Interest_Rate" + Interest_Rate;
out:println "Interest_Type" + Interest_Type;
out:println "Application_Submission_Date" + Application_Submission_Date;
out:println "Application_Revision_Date" + Application_Revision_Date;
out:println "Comment_on_Status" + Comment_on_Status;
Step 14
Add an Exor split gateway with the following Listener expression:
${Application_Status=='assessed'} or ${Application_Status=='rejected'} (for routing
appropriately).
For View rejected Application user task sequence flow; assign the flow condition:
${Application_Status=='rejected'}
For Prepare and Send Acceptance Pack user task sequence flow; assign the flow
condition: ${Application_Status=='assessed'}
Step 15
Camunda BPM Platform 2014
45
Create a User Task: View Rejected Application and assign user Mary (General>>Assignee)
as Loan Applicant. Create an intermediate end event Decision Accepted as per step3. The
user must be able to view the loan application in read-only format.
Step 16
Create a User Task: Prepare and Send Acceptance Pack and assign user John
(General>>Assignee) as Loan Officer. Loan Application form, Credit History report,
Property Appraisal report and fields added in Assess Eligibility user task must be viewed in
read-only format. The following fields must be added.
Repayment Agreement
Field Name Field Type Required(R)/Optional(O)/Not
Applicable (N/A)/ Read Only
(RO)
Application_Identifier String RO
Repayment Schedule:
Monthly Repayment
Amount
Long N/A
Repayment Schedule:
Number of repayments
Long N/A
Insurance_Quote_Required Enum
(complete/incomplete)
N/A
Camunda BPM Platform 2014
46
Step 17
Add an Xor split gateway with the following Listener expression:
${Insurance_Quote_Required=='complete'} or
${Insurance_Quote_Required=='incomplete'} (for routing appropriately).
For Prepare and send home insurance quote user task sequence flow; assign the flow
condition: ${ Insurance_Quote_Required=='incomplete'}
For the Exor join gateway sequence flow; assign the flow condition:
${Insurance_Quote_Required=='complete'}
Camunda BPM Platform 2014
47
Step 18
Create a User Task: Prepare and Send Acceptance Pack and assign user Mary
(General>>Assignee) as Insurance Sales Representative. The following fields must be added:
Home Insurance Quote
Field Name Field Type Required(R)/Optional(O)/Not
Applicable (N/A)/ Read Only
(RO)
Application_Identifier String RO
Home Insurance Total
Cost
Long N/A
Additional Cost on
monthly loan repayment
Long N/A
Insurance Terms and
Conditions
Boolean N/A
Insurance Sales
Representative Identifier
String N/A
Camunda BPM Platform 2014
48
Step 19
An Exor-join gateway is used to alternatively route the outputs of Prepare and send home
insurance quote user task and quote not requested sequence flow
Camunda BPM Platform 2014
49
Step 20
Create a User Task: Verify repayment agreement and assign user John
(General>>Assignee) as the Loan Officer. Loan Application form, Credit History report,
Property Appraisal report, Repayment agreement and home insurance quote must be viewed
in read-only format. A timer event with a wait period of 2 weeks (14 days) is added as per
step 3, at the end of which the loan application is cancelled. The following fields are added
under agreement summary.
Agreement Summary
Field Name Field Type Required(R)/Optional(O)/Not
Applicable (N/A)/ Read Only
(RO)
Application_Identifier String RO
Conditions agreed Boolean N/A
Repayment agreed Boolean N/A
Camunda BPM Platform 2014
50
Step 21
Create a User Task: Take final decision and assign user Peter (General>>Assignee) as the
Loan Officer. Loan Application form, Credit History report, Property Appraisal report,
Repayment agreement, home insurance quote and Agreement Summary must be viewed in
read-only format. The following fields are added.
In Properties applet>>Event>>Duration=
P14DT0H0M0S in ISO 8601 format (D->days,
T->Time, H->Hours, M->Minutes, S->Seconds
Camunda BPM Platform 2014
51
Field Name Field Type Required(R)/Optional(O)/Not
Applicable (N/A)/ Read Only
(RO)
Final_decision Enum (approve/reject) N/A
Step 22
Create a script task-Update final decision status to notify the final decision to the loan
applicant. Depending on the Final_decision field output from Take final decision user task,
Application_Status is changed either to approved or rejected.
Camunda BPM Platform 2014
52
Script Language: Groovy
Script:
if (Final_decision=='approve') {
Application_Status='approved';
}
else if (Final_decision=='reject') {
Application_Status='rejected';
}
else {
Application_Status='unknown';
}
out:println "Application_Status" + Application_Status;
out:println "Applicant_Name" + Applicant_Name;
out:println "Applicant_SurName" + Applicant_SurName;
out:println "Email" + Email;
out:println "Home_Phone" + Home_Phone;
out:println "Mobile_Phone" + Mobile_Phone;
out:println "Current_Address" + Current_Address;
out:println "Previous_Address" + Previous_Address;
out:println "Current_Employer" + Current_Employer;
out:println "Monthly_Net_Revenue" + Monthly_Net_Revenue;
out:println "Bank_Name" + Bank_Name;
out:println "Account_Type" + Account_Type;
out:println "Account_Number" + Account_Number;
out:println "Account_Balance" + Account_Balance;
Camunda BPM Platform 2014
53
out:println "Property_Type" + Property_Type;
out:println "Property_Address" + Property_Address;
out:println "Purchasing_Price" + Purchasing_Price;
out:println "Loan_Type" + Loan_Type;
out:println "Loan_Provider" + Loan_Provider;
out:println "Loan_Amount" + Loan_Amount;
out:println "Loan_Duration" + Loan_Duration;
out:println "Loan_Start_Date" + Loan_Start_Date;
out:println "Loan_End_Date" + Loan_End_Date;
out:println "Interest_Rate" + Interest_Rate;
out:println "Interest_Type" + Interest_Type;
out:println "Application_Submission_Date" + Application_Submission_Date;
out:println "Application_Revision_Date" + Application_Revision_Date;
out:println "Comment_on_Status" + Comment_on_Status;
Step 23
Create a User Task: View final decision and assign user Mary (General>>Assignee) as
Loan Applicant. Create an end event Accept Final decision to complete the process. The
user must be able to view the loan application in read-only format.
Camunda BPM Platform 2014
54
Step 24
Download the bullzip pdf printer from the following link:
http://www.bullzip.com/products/pdf/download.php
Camunda BPM Platform 2014
55
Install Bullzip printer
Camunda BPM Platform 2014
56
Camunda BPM Platform 2014
57
Camunda BPM Platform 2014
58
4.0 Validation and Deployment
Step1: Right click on pom.xml>>Run as>>Maven Install
The following results must be displayed after compilation
Camunda BPM Platform 2014
59
Step2: Navigate to target>>mortgage-Approval-0.0.1-SNAPSHOT.war and copy the .war
file
Step3: Launch start-camunda.bat
Camunda BPM Platform 2014
60
Camunda BPM Platform is displayed
Step4: Navigate to webapps folder in the downloaded Camunda BPM platform (The path
used in the tutorial is: camunda_use>>server>>apache-tomcat-7.0.50>>webapps) and paste
the .war file
Camunda BPM Platform 2014
61
If deployment is successful, the following message is displayed:
Camunda BPM Platform 2014
62
5.0 User Designations
User Name Authority Level Specific task in Loan Process
Demo Loan Applicant Loan application completed start event
(Reason for separate login for specific task
is to overcome constraint 4 mentioned in
Appendix)
Mary Loan Applicant All tasks in loan applicant lane
John Loan Officer All tasks in loan officer lane
Peter Finance Officer All tasks in finance officer lane
Mary Property Appraiser All tasks in property appraiser lane
Mary Insurance Sales Representative All tasks in insurance sales representative
lane
Peter Second Loan Officer Take final decision task
Camunda BPM Platform 2014
63
6.0 Execution
6.1 Scenario 1:
Loan application information is accurate and insurance quote is not required
Click on Camunda Tasklist and login with the user credentials demo/demo (for loan
applicant)
Choose the running instance as Process_Loan
Fill in all the fields of the loan application form except for Previous-Address
Camunda BPM Platform 2014
64
Camunda BPM Platform 2014
65
Login as peter/peter (Finance Officer) to check Credit History Report
Camunda BPM Platform 2014
66
Camunda BPM Platform 2014
67
Login as mary/mary (Property Appraiser) to check property appraisal
Camunda BPM Platform 2014
68
Camunda BPM Platform 2014
69
Login as john/john (Loan Officer) to check eligibility
Camunda BPM Platform 2014
70
Camunda BPM Platform 2014
71
Login as john/john (Loan Officer) to prepare and send acceptance pack
Camunda BPM Platform 2014
72
Camunda BPM Platform 2014
73
Camunda BPM Platform 2014
74
Login as john/john (Loan Officer) to verify repayment agreement
Camunda BPM Platform 2014
75
Camunda BPM Platform 2014
76
Camunda BPM Platform 2014
77
Camunda BPM Platform 2014
78
Login as peter/peter (Loan Officer) to take final decision
Camunda BPM Platform 2014
79
Camunda BPM Platform 2014
80
Login as mary/mary (Loan Applicant) to view the final decision
Camunda BPM Platform 2014
81
Camunda BPM Platform 2014
82
6.2 Scenario 2:
Loan application information is inaccurate and update is required
Login with the user credentials demo/demo (for loan applicant)
Camunda BPM Platform 2014
83
Camunda BPM Platform 2014
84
Login as mary/mary (Loan Applicant) to update the loan application
Camunda BPM Platform 2014
85
Camunda BPM Platform 2014
86
6.3 Scenario 3:
Loan application information is accurate and insurance quote is required
Login as john/john (Loan Officer) to prepare and send acceptance pack
Camunda BPM Platform 2014
87
Camunda BPM Platform 2014
88
Camunda BPM Platform 2014
89
Login as mary/mary (Insurance Sales Representative) to prepare and send home insurance
quote
Login as john/john (Loan Officer) to verify repayment agreement
Camunda BPM Platform 2014
90
Camunda BPM Platform 2014
91
Camunda BPM Platform 2014
92
Camunda BPM Platform 2014
93
6.4 Scenario 4:
Loan application is rejected during eligibility check
Login as john/john (Loan Officer) to check eligibility
Camunda BPM Platform 2014
94
Camunda BPM Platform 2014
95
Camunda BPM Platform 2014
96
Login as mary/mary (Loan Applicant) to view rejected loan application
Camunda BPM Platform 2014
97
Camunda BPM Platform 2014
98
6.5 Scenario 5:
Loan application is cancelled after the 5 day wait period for update loan application
Login as demo/demo into Camunda Cockpit and choose instance Process_Loan
Click on Job Definitions to check the timer-transition events
Camunda BPM Platform 2014
99
Change the timer-transition time from 5 days to 20 seconds
Update loan application is in 20 second wait state
After 20 second wait state
Duration changed from 5 days to 20 seconds
Camunda BPM Platform 2014
100
6.6 Scenario 6:
Loan application is cancelled after the 14 day wait period for verify repayment agreement
Verify repayment agreement user task is in 10 second wait state
After 10 second wait state
Duration changed from 14 days to 10 seconds
Camunda BPM Platform 2014
101
6.7 Scenario 7:
Date fields format check in Loan Application form
Invalid date format entered
Server error message displayed
Camunda BPM Platform 2014
102
6.8 Scenario 8:
Long fields format check in Loan Application form
Invalid number format entered
Server error message displayed
Camunda BPM Platform 2014
103
7.0 Further Readings
Programming resources:
Groovy
http://www.javabeat.net/introduction-to-groovy-scripting-language/
Groovy Beginner Tutorial
http://groovy.codehaus.org/Beginners+Tutorial
Introduction to Java
http://www.vogella.com/tutorials/JavaIntroduction/article.html
Java Tutorial
http://www.tutorialspoint.com/java/
Online Java Simulator
http://www.learnjavaonline.org/en/Variables_and_Types
Technical resources:
Camunda User Guide
http://docs.camunda.org/latest/guides/user-guide/
Camunda BPMN 2.0 Implementation Reference
http://docs.camunda.org/latest/api-references/bpmn20/
Camunda Rest API
http://docs.camunda.org/latest/api-references/rest/
Camunda Java doc
http://docs.camunda.org/latest/api-references/javadoc/
Camunda Deployment Descriptors
http://docs.camunda.org/latest/api-references/deployment-descriptors/
Camunda examples on GitHub
https://github.com/camunda/camunda-bpm-examples
Camunda Tutorial
http://docs.camunda.org/latest/real-life/how-to/
Camunda BPM Platform 2014
104
Appendix A: Constraints observed in Camunda BPM Platform
Constraint1:
Problem of outgoing message transfer between two different pools
The interaction between the Loan Provider and Loan Applicant pools for task
Application returned to applicant and catching message event prior to Update Loan
Application task is not possible, even though the documented methods on Camunda user
guide of assigning events and task notations have been followed.
Documentation Link: Camunda User BPM Forum Google Group (A forum for interaction
between Camunda users and developers)
https://groups.google.com/forum/#!topic/camunda-bpm-users/EY4hZPg56WM
Camunda BPM Platform 2014
105
Attempted Method 1:
Camunda BPM Platform 2014
106
Attempted Method 2:
Camunda BPM Platform 2014
107
Constraint 2:
Non-mandatory fields in Camunda
Even if a field is set as non-mandatory by entering the condition default in the properties
applet of form field. Camunda Process Engine does not consider it. It works only if one field
is marked as default , but if two fields are marked with the same statement, it fails to
execute.
Camunda BPM Platform 2014
108
Camunda BPM Platform 2014
109
Response from Camunda User BPM Forum Google Group (A forum for interaction
between Camunda users and developers):
Question posted:
Camunda BPM Platform 2014
110
Response:
Camunda BPM Platform 2014
111
Constraint 3:
If the loan application form is not included in the Start event and instead added under user
task: Complete Loan Application, the field names are not displayed while running the .war
file in Camunda Process Engine
No field values are entered under Loan
Application picked start event
Camunda BPM Platform 2014
112
Field values are entered under Complete
loan application user task
Form is not displayed after login in as the
Complete loan application user
Camunda BPM Platform 2014
113
Constraint 4:
Unable to automatically assign unique ids for Application Identifiers through Camunda
Process Id field. In order to assign Application Identifiers, the Camunda developers were
contacted through Camunda user BPM forum google group. Their suggestions were
implemented, however the issue is unresolved.
Camunda BPM Platform 2014
114
Response from Camunda User BPM Forum Google Group (A forum for interaction
between Camunda users and developers):
Question posted:
Response:
Camunda BPM Platform 2014
115
Another similar issue raised in the forum
Documentation Link: Camunda User BPM Forum Google Group (A forum for interaction
between Camunda users and developers)
https://groups.google.com/forum/#!topic/camunda-bpm-users/W0JgTJ3SWHY
Question posted:
Response:
Modified the code as per the above sample, same issue exists.
Camunda BPM Platform 2014
116
Constraint 5:
Unable to send email by selecting the variable entered from Email field in the loan
application form. Contacted Camunda developers through Camunda user BPM forum google
group. Attempted the suggestions posted, but issue exists. The same code executes perfectly
in eclipse.
Question posted:
Camunda BPM Platform 2014
117
Response:
Attempted Method 1:
Created a separate User email task and class
to retrieve the email id from Email field
and execute. Though the process is
executed, email is not sent to loan applicant
Camunda BPM Platform 2014
118
However, when the same Java code is executed in Eclipse, the email is being delivered to the
loan applicants inbox
Successful execution
Email not recieved
Camunda BPM Platform 2014
119
Java Code:
package org.camunda.bpm.getstarted.Email1;
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import org.camunda.bpm.engine.delegate.DelegateTask;
import org.camunda.bpm.engine.delegate.TaskListener;
public class SendEmail implements TaskListener {
static String host1 = "smtp.gmail.com";
static String user = "camunda01@gmail.com";
static String pass = "Camunda1234";
public void notify(DelegateTask delegateTask) {
String email= getVariable ("Email");
// Recipient's email ID needs to be mentioned.
String to = email;
// Sender's email ID needs to be mentioned
String from = "Camunda01@gmail.com";
// Get system properties
Properties properties = System.getProperties();
// Setup mail server
properties.put("mail.smtp.socketFactory.port", "465");
properties.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
properties.put("mail.smtp.starttls.enable", "true");
properties.put("mail.smtp.host", host1);
properties.put("mail.smtp.user", user);
properties.put("mail.smtp.password", pass);
properties.put("mail.smtp.port", "465");
properties.put("mail.smtp.auth", "true");
Camunda BPM Platform 2014
120
Session session = Session.getDefaultInstance(properties,
new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(user,pass);
}
});
try {
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.setRecipients(Message.RecipientType.TO,
InternetAddress.parse(to));
message.setSubject("Testing Subject");
message.setText("Dear Mail Crawler," +
"\n\n No spam to my email, please!");
Transport.send(message);
System.out.println("Done");
} catch (MessagingException e) {
throw new RuntimeException(e);
}
}
private static String getVariable(String string) {
// TODO Auto-generated method stub
return null;
}
}
Camunda BPM Platform 2014
121
Appendix B: Loan Assessment Process without Email Task
Camunda BPM Platform 2014
122
Appendix C: Loan Assessment Process with Email Task (Execution failure in Camunda BPM Platform)
Camunda BPM Platform 2014
123