Using Parametric Roles in Oracle BPM 11g

Folks having first hand experience in creating Business processes with our good old ALBPM would have certainly used parametric or dynamic role assignments in their processes.

Recently one of my colleague had asked me as how to do the same in Oracle BPM Suite 11g. I instantly remembered someone else also asking the same question in Oracle forums. Here are two such posts that discusses about the same

https://forums.oracle.com/forums/thread.jspa?threadID=1082890

https://forums.oracle.com/forums/thread.jspa?messageID=9351365

This article will demonstrate a very simple composite application with a BPM process that leverages the use of dynamic/parametric roles.

Creating the Process Skeleton

Create a SOA composite application in JDeveloper. Add BPM extension to it. Name the application as DynamicApprovalManagement. Drag a BPMN Process in the Components pane of the composite. Base it on a Manual Process Pattern.

Change the Start event from simple to a Message Start Event. Create a interface for the message start event based on the below schema.

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.soatechnologies.blog/card"
targetNamespace="http://www.soatechnologies.blog/card" elementFormDefault="qualified"></pre>
<xsd:element name="CreditInformation">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="cardNumber" type="xsd:string"/>
<xsd:element name="holderSsn" type="xsd:string"/>
<xsd:element name="holderFirstName" type="xsd:string"/>
<xsd:element name="holderLastName" type="xsd:string"/>
<xsd:element name="brand" type="xsd:string"/>
<xsd:element name="creditLimitRequested" type="xsd:double"/>
<xsd:element name="creditLimitGranted" type="xsd:double"/>
<xsd:element name="latePaymentCount" type="xsd:int"/>
<xsd:element name="creditScoringResult" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>

image

Create two Process Data Objects as creditInputRequest(based on the above XSD) and approvalOutcome of string type.

image

Next rename the UserTask with an appropriate name. Also double click on the user task and click on the Implementation tab. Implement the user task activity with a Human Task.

image

Implementing Dynamic/Rule based Participants in Human Task

Open the Business Process Navigator and browse the ApproveApplication.task that we just created inside DynamicApprovalManagement->Business Catalog->Human Tasks. Double click on the task to open the task editing wizard.

Click on the Assignment tab on the left. This will open the approval flow showing the task participants associated with it. Double click on the participant to choose a participant to execute this task.

Under Participant List choose Rule-based from the “Build a list of participant using :” option box.

Give any appropriate name in the List Ruleset field and click OK.

image

It would be interesting to see that this creates a Decision Service component based on Oracle Rules Engine with the name of the Ruleset that we just provided. There are some others as well but we can ignore them for the time being.

Click on the GetApprovers Ruleset (the name of the Ruleset that i choose. Depending upon what name you choose it can vary) and create an if then else type rule. Here as part of this demonstration I create a simple two rule Ruleset that evaluates credit limit requested for credit card application. If the credit limit is below 10k let a card approval clerk handle the approval/rejection. If it is more than 10k the approval is to be handled by a manager.

image

The dynamic participant or approval group is selected by calling the CreateResourceList function. The arguments used in this function are explained below

  • users – The name of any authenticated user in the server security realm.
  • groups – Instead of users we can also select a group in the server realm. The task will be assigned to all the users part of this group.
  • approles – This in important because while designing business process flows we dont care about users or groups but with application roles instead. They are equivalent to swimlane roles.
  • responseType – If the response type is REQUIRED, the assignee has to act on the task; otherwise, the assignment would be converted to an FYI assignment.
  • ruleName – Rule name is used to create an assignment reason. Rule set name + “_” + rule name is used as a key to look up the resource bundle for a translatable reason for assignment. This resource is looked up first in the project resource bundle, then in the custom resource bundle, and last in the system resource bundle
  • lists – This is an object that is a holder for all the lists that are built. Clicking this option shows a pre-asserted fact ‘Lists’ object to be used as the parameter.

For making this demonstration simpler i have chosen to select dynamic participants based on user names. Hence the reason why groups and approles are set to null values.

Go and create these two users in the Weblogic domain security realm.

image

Auto Generate a UI for the Human Task and compile the application.

If you now make or compile the application you will see that the build fails with the below exception

Error: BPM-71504: Unexpected error parsing ‘oramds:///soa/shared/workflow/TaskEvidenceService.xsd’.  Cause: oracle.mds.exception.MDSException: MDS-00054: The file to be loaded oramds:/soa/shared/workflow/TaskEvidenceService.xsd does not exist..  Action: Verify that file is valid and accessible

image

This is a known issue and took me sometime to find a workaround. Below is a note that i got in some Oracle document highlight the issue and its workaround. The below document explains this

http://www.art2dec.com/documentation/docs/fmw11g1114documentation/doc.1111/e15731.pdf

You Must Manually Remove Additional Slashes from the XSD file When Defining Human Tasks Assignments Based on Business Rules In BPM Suite if you define a human task assignments based on Business Rules, then
you must edit the XSD of the decision service to remove the additional slashes from the import statements.
For example, you must replace the following statement:

schemaLocation=”oramds:///soa/shared/workflow/TaskEvidenceService.xsd” with the following import statement: schemaLocation=”oramds:/soa/shared/workflow/TaskEvidenceService.xsd“.

For the example used in this article i had to open the xsd/DSApproveApplicationWorkflowTask.xsd and manually change the location.

image

Now build and deploy both the composite application and the UI project to a running SOA server.

Finally to see the composite project in action open the EM console and open the Test page for the application. Since we have created a BPM process with a Message Start Event it can be invoked as a webservice as well.

Test 1 : CreditLimtRequested < 10000

In this case ClerkApproval rule will fire and the task will land up in the inbox of clerk.

image

image

Test 2 : CreditLimtRequested > 10000

Similarly in this case ManagerApproval rule will fire and the task will land up in the inbox of manager.

image

image

Well needless to mention that this scenario is extremely useful in cases where the assignees have to be determined based on some business rules or even in cases where the information about workflow management is to be determined from the input payload itself.

The composite application and the UI Project can be downloaded from here. After downloading rename it to .zip and extract the JDeveloper application.

10 thoughts on “Using Parametric Roles in Oracle BPM 11g

  1. In CreateResourceList function, what happens approle (application role) is specified instead of null and what happens, if responsetype is converted into FYI assignment,

    Like

    • There is an Oracle limitation that approle and users cannot be put together. So in case you have to use a value for approle the value for users have to be null.
      Secondly if responseType is not set to REQUIRED then the user doesnt have to act on it. It stays in the user inbox as an information but doesnt require the user to act on it.

      Like

  2. Hi Arun
    I want to know BPM 11.1.1.3 sample workflow can integrate with P6R8.1.I tried to integrate ,but i am getting error while creating projects.Because In P6R8 “http://xmlns.oracle.com/Primavera/P6/WS/Project/V1”, url used. InP6R8.1 “http://xmlns.oracle.com/Primavera/P6/WS/Project/V2” is used.Is there any solution for that?

    Like

  3. Hi,

    Thanks for the post.

    My requirement is get the users from ldap not based on group names but on a property of a user .

    Example : I have created two users :
    1.Sachin
    2.Sehwag

    Both have a property named organization id associated with it.

    Based on the organization id that i pass i want to retrieve the user or users.

    Please help me on this.

    Like

    • I am not aware of this. To me it looks like the only parameters that you can use are the userName, groups or applicationRoles. As a workaround you may need to create applicationRoles based on the organization Id.

      Like

  4. Hi Arun,

    Thanks for the blog post. I’m now using the CreateResourceList to assign user to a task dynamically.

    As an administrator, may I know if a task is assigned to a specific user with CreateResourceList, can I reassigned the task to another person by any means?

    There are some situations that an urgent task needs to be completed, but the assignee is not available.

    Thanks a lot

    Like

  5. Hi arun,
    As I wanted to use the CreateResourceList in my ruleSet it does not recognizes the function as valid…? I have a variable (Integer) which defines the amount of participants I want to add.

    How can I make the function visible and usable?
    thanks a lot arun.

    Like

If you have any comments, suggestions or feedback about the post, please feel free to type it here and I will do my best to address them asap

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s