BPM 11g Task Execution Data - Rejection Notification Pattern

I recently received a requirement from a customer who wanted to notify all previous participants in the process that the process had been rejected for whatever business reason. This was further complicated since the “business process” was split between a generic controlling process and many independent processes called as services. This led me to try and understand what data is recorded after each human task and how it is possible to get access to it.

This blog details the task execution data and outlines a design for a “Rejection Notification” pattern....

Task Execution Data

On completion of every Human Task in BPM 11g, the “execData” structure is populated and made available on the “output data association”.....

...on expanding this element it is clear that there is a lot of data in there....

...which led to me dumping this out so I could analyse the contents... what follows is the populated XSD structure after a simple human task allocated to a user (jausten) in the swim-lane (Process Owner) and was “approved”.....

...the parts I was interested in are highlighted.... now I know who updated the task, when they updated the task and what the outcome was.

Just looking at the sheer breadth of data available gives an insight in to what is possible, everything from the composite details to the ADF UI details. For a complete understanding of the format of this structure, the XSD can be found in SOA MDS..... WorkflowTask.xsd ....

Reject Notification Pattern

Now I knew where the data was I needed to understand how to collect it and what to do with it.

I’m a firm believer with BPM 11g of decomposing the process as much as is sensibly possible, especially in the case where we have re-usable components or the lifecycle of those components needs to be managed separately.

Step 1

Create an XSD to store the parts of the task execution details required.....

...notice I have defined both an element for an individual instance of the array and an element for the array itself... this will be important when we come to populating the array in the “data association” editor.

Step 2

Create business / data objects for the element representing the individual array instance and the element representing the array....

Step 3

In the output association of each human task store the relevant data from the task execution data. Because of the way that the data association editor handles arrays in the current release of the product (PS4 FP) it is necessary to “copy” the first element of the array and “insert after” the subsequent elements.....

First Element:

First copy the execData to the individual element, and then “Copy” the individual element to the array.

Looking closely at (2) above....

...it is possible to see the action is “Copy” and the square brackets “[]” have been removed from the array instance.

Subsequent Elements:

As above but the final “Copy” becomes an “Insert After”....

Step 4

Create a service that will loop through this data and send the notification. With “multi-instance sub-process” and the “Notification” activity this is very straight-forward....

...looking closely at the multi-instance sub-process....

...it loops through the number of rows in the array. Looking closely at the “Notification” activity...


....it uses the “Notification Type” of “User” meaning that the user’s preferred means of notification (set in the BPM Workspace) is used, and it simply populates the required fields with elements in the array.

Step 5

All that remains is to call this notification process as a service in the event of rejection....


Comments:

Hi Mark,

First of all an Excellent example. This is a very useful demonstration. I have just one simple suggestion here if you mind considering.

Is it okay to use a service call to invoke the notification process responsible for sending Emails or should it be done through Signals, so that the original process in unaffected. Considering the facts that if you use a service call and should there be an error, the process instance itself is error-ed out.

Your thoughts?

Posted by Arun Pareek on February 14, 2012 at 06:52 PM PST #

Hi Arun,

Thanks for the comment... glad you found it useful.

As for the invocation of the notification process... you make a good point, signals may be a better solution here, in fact there are several options from an async service call, JMS, EDN etc... and as always it depends on the use-case.

Regards

Posted by Mark Foster on March 13, 2012 at 04:43 AM PDT #

Mark

Thanks for the post.

I am a newbie to Oracle BPM 11g. I am not able to see the screen shot as shown in Step 3. I just have two options of Data Association and Transformation and there is no place where i see the Copy/Insert After options when i click on either of these options. Can you please tell me how to bring up the screen shown on Step 3. I am using 11.1.1.4. Thanks.

Regards
Venkat

Posted by Venkat on May 24, 2012 at 04:09 AM PDT #

Mark

Thanks for the post. I am a newbie to Oracle BPM 11g. I just have two options in the Human Task namely Data Association and Data Transformation and when I check it I don't see the same screenshot as you have shown in Step 3. Can you please tell me the steps to go the Step 3. I am using 11.1.1.4.

Regards
Venkat

Posted by Venkat on May 25, 2012 at 01:00 AM PDT #

Mark

I notice that the Step 3 is based on the Assign in the BPEL, how do we accomplish the same using BPMN. Your inputs would be appreciated.

Venkat

Posted by Venkat on May 29, 2012 at 05:01 AM PDT #

Hi Venkat,

It is BPM... just that the editor changed post-PS3... you should be able to use data associations and achieve the same thing, although it has been a while since I touched the Data Association editor in PS3.

Regards
Mark

Posted by guest on May 30, 2012 at 01:08 AM PDT #

Hi,

I want to know how to get the payload information, I tried to use copy-of with transformation but failed. Do you have any tips or example on how to get the payload object information?

Much appreciated!
Keven

Posted by guest on July 26, 2012 at 07:30 AM PDT #

Hi,

Let me clarify, I'm working on storing human workflow's action to database. Using HumanTaskEvent's OnSubTaskUpdated event, I'm able to route to bpel process, however I cannot retrieve the Human task's payload from subTaskUpdatedMessage.

Do you have any example on how to retrieve the payload from subTaskUpdatedMessage?

Thanks
keven

Posted by Keven on July 26, 2012 at 07:40 AM PDT #

Post a Comment:
  • HTML Syntax: NOT allowed
About


This is the blog for the Oracle FMW Architects team fondly known as the A-Team. The A-Team is the central, technical, outbound team as part of the FMW Development organization working with Oracle's largest and most important customers. We support Oracle Sales, Consulting and Support when deep technical and architectural help is needed from Oracle Development.
Primarily this blog is tailored for SOA issues (BPEL, OSB, BPM, Adapters, CEP, B2B, JCAP)that are encountered by our team. Expect real solutions to customer problems, encountered during customer engagements.
We will highlight best practices, workarounds, architectural discussions, and discuss topics that are relevant in the SOA technical space today.

Search

Archives
« April 2014
SunMonTueWedThuFriSat
  
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
   
       
Today