BPM 11g – Case Management In Practice: “HelloWorld”

In the previous blog entries in this Case Management series we’ve looked at what case management is, how a case management project surfaces in BPM Studio, the lifecycle of a case management project at runtime, and a more in-depth look at case stakeholders & permissions, case activities and case rules.

Enough of the theory for the time being… in this entry we’ll build our first simple case management project… not “HelloWorld” exactly, but an uncomplicated first step into case management – a simplistic version of an insurance claim. We’ll use this project in further blog entries to demonstrate some of the more advanced features that Case Management provides for us in PS6 and beyond.

Project Overview

As mentioned, this will be an overly simplified insurance claim project. There will be two stakeholders, an investigator and an underwriter, the investigator is responsible for validating the claim and the underwriter is responsible for paying (or not) the claim. There will be two corresponding case activities, “investigate claim” and “underwrite claim”, the former will be automatically invoked on case start, the latter automatically invoked when the claim has been validated. Both of these activities will be composed of a simple BPM process. We’ll add two milestones as well, one for each of the activities.

That’s it… we’ll use some of the techniques described in previous blog entries to help with the build of the project, in particular the spreadsheet approach to case activities.

Design the Project in BPM Studio

Application, Project & Composite

Create a new “BPM Application” and name it “CMInsuranceClaim”….


….name the project “prjCMInsuranceClaim”…


…. and create as a “Composite with Case Management”…


… this will result in a composite with the case and its exposed service and the case rules….


Flesh out the Case

Open the Case artefact….


… and fill in the case title. Also create two milestones: “Investigated” and “Underwritten”….


… click on the “Stakeholders & Permissions” tab and create two stakeholders: “Investigator” & “Underwriter”….


… add user “jcooper” as “Investigator” and user “jausten” as “Underwriter” ….


Create the Case Activities

As previously mentioned both activities (investigate and underwrite) will be formed of BPM processes.

Case Data

We will use the following XSD to represent the case data: you can copy and paste the contents to an XSD file….

<?xml version="1.0" encoding="UTF-8" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  <xsd:complexType name="ClaimType">
      <xsd:element name="Claimant" type="xsd:string" maxOccurs="1"/>
      <xsd:element name="ClaimDetail" type="xsd:string" maxOccurs="1"/>
      <xsd:element name="ValueWhenNew" type="xsd:int" maxOccurs="1"/>
      <xsd:element name="AgeOfItem" type="xsd:int" maxOccurs="1"/>
  <xsd:complexType name="ClaimDecisionType">
      <xsd:element name="ClaimFindings" type="xsd:string" maxOccurs="1"/>
      <xsd:element name="ClaimRecompense" type="xsd:int" maxOccurs="1"/>
  <xsd:complexType name="InsuranceClaimType">
        <xsd:element name="Claim" type="insuranceClaim:ClaimType" maxOccurs="1"/>
        <xsd:element name="ClaimDecision" type="insuranceClaim:ClaimDecisionType" maxOccurs="1"/>
  <xsd:element name="insuranceClaim" type="insuranceClaim:InsuranceClaimType"/>
  <xsd:element name="claim" type="insuranceClaim:ClaimType"/>
  <xsd:element name="claimDecision" type="insuranceClaim:ClaimDecisionType"/>

BPM Process – Investigate Claim

Create a new BPM process….


… name it “bpmInvestigate”….


… create an input argument named “insuranceClaim”….


… based on a business object named “BoInsuranceClaim”….


… under a module called “Data”….


… browse to the XSD previously mentioned….




… and choose the “insuranceClaim” element….



… repeat for the output argument (same name, same element)….


Add a “User Activity” to the process….


… note that the previously created Stakeholders are available as swimlane roles, choose the “Investigator”….



Create a “process data object” “doInsuranceClaim” for the insurance claim….



Implement the Human Activity….


Do the data associations for the “Start” and “End” activities….



Auto-generate a task form from the human task….


… in project “UIInvestigateClaim”….


The process is now completed… let’s promote it to a case activity (called “actInvestigate”) and see what happens….



The first thing we notice is that the input & output data for the case activity has taken the name (& type) of the process input & output arguments….


If we go back to the Case itself we can see that the “insuranceClaim” has been automatically added to the case data….


BPM Process – Underwrite Claim

Before we go any further with the case itself, let’s create an almost identical process for underwriting the claim…. I won’t explicitly detail the steps again, they are more or less the same as above….

Process Name: bpmUnderwrite

Input & Output arguments: insuranceClaim (same as previously)

Swimlane role: Underwriter

Task form project: UIUnderwriteClaim

Case Activity Name: actUnderwrite

Note to make the human task parameter “insuranceClaim” editable this time….


Once we have created the underwrite process and case activity, we shouldn’t see any additions to the case data as we used the same name & type for both processes (activities)….


Design the Case Activities & Case Rules

If we cast our mind back to the spreadsheet approach for case design detailed in a previous blog post, we’ll use exactly that now to help us. As mentioned at the top of the post, the Investigate activity should trigger automatically when the case starts, when investigation is finished the appropriate milestone is reached and the Underwrite activity can then start, when this finishes its milestone is reached.

We can represent this in spreadsheet form thus….



Case Activities

With this we can now set the properties for the case activities.

actInvestigate” is automatic and required….


actUnderwrite” is automatic, required and conditional….


Case Rules

Open the case rules dictionary….


Milestone Rules

Let us begin with the “Milestone” rules, i.e. those rules which have milestone based conditions, looking at the spreadsheet above there is only one: when milestone “Investigated” is reached, activity “actUnderwrite” is activated.

Let’s create a new decision table….


… and call it “MilestoneRule”….


We need two conditions to represent the milestone “Investigated” being “REACHED”….


… and an associated action of “call” to “activateActivity” “actUnderwrite”….


Activity Rules

Create another decision table for the activity rules….


We need two conditions to represent the activities being “COMPLETED”….


…and two rules, one for each activity….


… and the associated actions to “reach” the appropriate milestones….


Deploy the Projects

Deploy the two UI projects….


… and the Case Management project….


Set the Human Task Participants 

If you remember we explicitly set the stakeholders when creating the case in BPM Studio (Investigator was “jcooper”, Underwriter was “jausten”) but we did not set the human task participants for the user activities in the associated bpm processes… there is a clear distinction here between knowledge workers (stakeholders) who work at the the level of the case, and routine workers (human task participants) who work at the level of human tasks.

Log into the BPM Workspace as “weblogic” (an administrator) and in the “Administration” tab set the human task participants, in this case as the same users as the stakeholders although as stated this is neither necessary or particularly relevant in a real-life use-case….


Run the Case Management Project

If we look at the composite to see what exactly we deployed….


… we can see that there is a “startCase” operation available on the case itself, which means we can start the case from the “Test” button inside Enterprise Manager….



Let’s change from “Tree View” to “XML View” and copy/paste the following XML into the input argument….

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <ns1:startCaseInputMessage xmlns:ns1="http://xmlns.oracle.com/CaseService/types"                                             
            <insuranceClaim xmlns="http://www.oracle.com/insuranceClaim">
    <Claimant>Joe Bloggs</Claimant>
    <ClaimDetail>Crashed Car</ClaimDetail>

The important (and differing) parts are circled in red below.

We need to provide a caseId…


… we also need to provide the case data… being constructed directly from the XSD provided earlier and pasted between the start and end data tags.


We can see after “testing the webservice” that it was successful… we can look at the flow trace to see what has happened….


So…  the starting of the case has automatically triggered the Investigate activity and therefore initiated its associated Investigate process which is waiting at the human task… this should be assigned to “jcooper”… let’s log in to the BPM Workspace to check….


… sure enough there it is… let us complete the investigation by clicking on the “Yes” action.

We can now go back and look at the flow trace again to see how our case has progressed….


… the investigate process (and activity) has completed, the case rules have been invoked and as a result the Underwrite activity (and process) has been invoked, it’s now waiting at the human task associated with underwriting which should have been assigned to “jausten”… let’s log in to the BPM workspace and check….


…and there it is, let’s complete it by clicking on “Yes”.

We can go back once more and look at the flow trace to see the current status of our case….


… both case activities have now been completed. Success !


In this blog post we have successfully created, deployed and tested our first Case Management project using lessons learned in some of the previous blog entries in this series.

But… and it’s a big but… this should have raised some questions….

  • why is the case still running when we’ve completed the activities
  • why have the case rules been invoked a seemingly inordinate number of time
  • what happens if we have manual activities instead of automatic activities
  • etc….

In future blog posts we’ll try and answer some of these questions, demonstrating using our first deployed project.


  1. Shatrusudan says:

    Hi Mark,

    Thanks for such a good article on simple case management example. I have followed step by step which you mention in this post, and i have deployed successfully also but 1 small issue for me is in my work space task is showing which is assign to jcooper user but task detail is not showing for that i am not able to complete task because yes button is not available and detail of task also. so please suggest me what i did wrong and please share this project code if possible or please suggest any good example based on case management. i need to develop simple case management example and i am using Oracle 12c now. i did google but still i didn’t found good example on this topic.

    Thanks in advance.

  2. Hi,

    I have created a bpmn process, in the start message instead of defining interface I am using “use interface” and define the interfaces using wsdl located in oramds. Now I am not able to promote this bpm as an activity in a case.

    Could you please help me out?


  3. Thx for your answer.
    Really don’t know how it became faulty/incorrect. Anyway, I managed to get it working somehow, cause this error didn’t appear in a other state of my virtual machine.

    But now I got another question. How can I design data forms/data panel in the case view?
    The link shown in http://docs.oracle.com/middleware/1213/bpm/bpm-user/bpmug_ws_case.htm#BPMUG87631
    doesn’t provide any information about it.

    Appreciate your help a lot.
    Best wishes,

  4. Hi Benjamin,

    What do you mean by “incorrect” or “faulty” ?

    You start the case, the “actInvestigate” activity starts, you complete the corresponding human task, the “actUnderwrite” activity starts and you complete the human task for that… this is what is supposed to happen.

    Generally when activities are not starting as you expect it is a problem with either the case rules or the actual properties of the activity itself you set in JDev.


  5. Finally managed to start a case via SoapUI, but my tasks or activities are always shown as incorrect or faulty in the case view of business process workspace.
    So when i start the process, the actInvestigate task is shown as incorrect and if I manually complete the ‘Investigated’ milestone, the actUnderwrite task is also displayed as incomplete.
    Got no clue what I did wrong. :/

  6. Hi Mark,

    thanks for your blog. It helped me with Oracle ACM which I am working on for my diploma thesis.
    But when I want to start a case instance in Oracle Enterprise Manager and insert XML into the input argument I always get an error, that the caseID, createdDate and some other parameters are not invalid.
    Would appreciate your help a lot.

    Everything works fine with but unfortunately this version doesn’t have the option of showing the case view in the Business Process Workspace.

    Best wishes,

Add Your Comment