Invoking BI Publisher Web services from BPEL Process to run a report

BI Publisher exposes four public Web services which can be used to perform a variety of activities including running a report.

The screenshot below is of a simple SOA composite which calls the runReport() method on the ReportService Web service to run a report with parameters. While Oracle’s official documentation is sufficient enough to make this a trivial exercise but there are still a couple of points to remember which is why this blog post is here in the first place.

Click on the images for a larger view.

composite

Here is the entire synchronous BPEL process.

BPEL Process

The AssignValues activity assigns the values required for running the report. I am hard-coding most of the values except for the reportAbsolutePath which I am passing as an input to BPEL process request. The reportAbsolutePath, of course, is the report path in the Catalog Folders in BI Publisher.

AssignInput

In the TransformInput activity, I am again hard-coding the parameters required for the BI Publisher report and mapping them to the variable that will be passed to  the Web service. But more importantly, this activity is required for two reasons:

  • The call to the BI Publisher Web service should not contain any empty tags otherwise it will throw errors. So, I am mapping only the non-empty elements to the target variable which will be passed during the call to the Web service.
  • One of the parameters for the runReport() method is the ReportRequest.  The ReportRequest data type in turn contains the item data type which stores the name-value pair for a report parameter. If multiple parameters need to be passed to a report, the item node  must be duplicated.

Transform

Transform2

The AssignSuccessMessage concatenates the elements in the response returned by the call to the ReportService and assigns it to the response message of the BPEL process.

AssignOutput

That is about it. As I mentioned earlier it is a pretty simple process and the only thing that you need to take care of is that you are not passing any empty tags in the Web service call.