This is a frequent requirement in OIC , sometime you need to call BIP SOAP service in OIC to do integrations.
The reasons can be
- The Rest service of the business object is not available
- You have a custom Requirement based on a custom data set
So here are the steps to call a BI publisher SOAP service.
Table of Contents
Test the BIP SOAP service in SOAP UI
- Generate your ExternalReportWSSService url for your oracle fusion instance
- Test your generated wsdl url in browser and make usre you see the wsdl data
- launch SOAP UI and create a SOAP project
- Add the generated wsdl to the soap project
- configure authorization
- Test the bip soap service
- you wll get a result in binary form which is not readable like in image below
Sample SOAP Payload to call BIP report
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:pub="http://xmlns.oracle.com/oxp/service/PublicReportService">
<soap:Header/>
<soap:Body>
<pub:runReport>
<pub:reportRequest>
<pub:XDOPropertyList>
<!--Zero or more repetitions:-->
<pub:metaDataList>
<!--Optional:-->
<pub:name>?</pub:name>
<!--Optional:-->
<pub:value>?</pub:value>
</pub:metaDataList>
</pub:XDOPropertyList>
<pub:attributeCalendar>?</pub:attributeCalendar>
<pub:attributeFormat>xml</pub:attributeFormat>
<pub:attributeLocale>?</pub:attributeLocale>
<pub:attributeTemplate>?</pub:attributeTemplate>
<pub:attributeTimezone>?</pub:attributeTimezone>
<pub:attributeUILocale>?</pub:attributeUILocale>
<pub:byPassCache>?</pub:byPassCache>
<pub:dynamicDataSource>
<pub:JDBCDataSource>
<pub:JDBCDriverClass>?</pub:JDBCDriverClass>
<pub:JDBCDriverType>?</pub:JDBCDriverType>
<pub:JDBCPassword>?</pub:JDBCPassword>
<pub:JDBCURL>?</pub:JDBCURL>
<pub:JDBCUserName>?</pub:JDBCUserName>
<pub:dataSourceName>?</pub:dataSourceName>
</pub:JDBCDataSource>
<pub:fileDataSource>
<pub:dynamicDataSourcePath>?</pub:dynamicDataSourcePath>
<pub:temporaryDataSource>?</pub:temporaryDataSource>
</pub:fileDataSource>
</pub:dynamicDataSource>
<pub:flattenXML>?</pub:flattenXML>
<pub:parameterNameValues>
<!--Zero or more repetitions:-->
<pub:item>
<pub:UIType>?</pub:UIType>
<pub:dataType>?</pub:dataType>
<pub:dateFormatString>?</pub:dateFormatString>
<pub:dateFrom>?</pub:dateFrom>
<pub:dateTo>?</pub:dateTo>
<pub:defaultValue>?</pub:defaultValue>
<pub:fieldSize>?</pub:fieldSize>
<pub:label>?</pub:label>
<pub:lovLabels>
<!--Zero or more repetitions:-->
<pub:item>?</pub:item>
</pub:lovLabels>
<pub:multiValuesAllowed>?</pub:multiValuesAllowed>
<pub:name>?</pub:name>
<pub:refreshParamOnChange>?</pub:refreshParamOnChange>
<pub:selectAll>?</pub:selectAll>
<pub:templateParam>?</pub:templateParam>
<pub:useNullForAll>?</pub:useNullForAll>
<pub:values>
<!--Zero or more repetitions:-->
<pub:item>?</pub:item>
</pub:values>
</pub:item>
</pub:parameterNameValues>
<pub:reportAbsolutePath>Custom/PRJReport.xdo</pub:reportAbsolutePath>
<pub:reportData>cid:1571104333176</pub:reportData>
<pub:reportOutputPath></pub:reportOutputPath>
<pub:reportRawData>?</pub:reportRawData>
<pub:sizeOfDataChunkDownload>-1</pub:sizeOfDataChunkDownload>
</pub:reportRequest>
<pub:appParams>?</pub:appParams>
</pub:runReport>
</soap:Body>
</soap:Envelope>
In OIC
- Create a SOAP connection in OIC using the BIP wsdl url
- Configure security authentication
- Test and save the connection
- Create a App driven on Scheduled orchestation based on your requirement
- drag the SOAP connection into OIC process
- Do the mapping as per the Soap payload above.

basically you need to map 3 fields

<pub:attributeFormat>xml</pub:attributeFormat>
Set this value as xml
<pub:reportAbsolutePath>Custom/PRJReport.xdo</pub:reportAbsolutePath>
Set absolute path as per the folder structure including the xdo file name
<pub:sizeOfDataChunkDownload>-1</pub:sizeOfDataChunkDownload>
Set this as -1
Reading Report Bytes
After doing the configuration to call bip soap service you will get a response in report bytes which is not readable.
You need to decode using the bas64 decode function.

IF the response ofreport bytes is like multi row and you want to read the file, the approach is to write the response in a stage file using opaque schema and then read the stage file with the selected schema of the format required.
Map reportbytes to Opaque element in stage file write activity

Then create another activity to Read Stage file and add the schema XSD file

If you have xml output you can conver to XSD schema by online tools

You May Like
FAQs:
How to read report bytes data?
use decode base 64 function in OIC.