Many a times we need to write sql queries to get data out of Oracle Fusion.
For this we have BI Publisher data model. Everytime we want to change the query we need to edit the data model.
Also it exports data in xml and only upto 200 records. If we want to export records more than 200 records then we need to create a report using this data model.
In this post we will see how we can create a simple VBCS app to run queries dynamically.
For this we will need below things:
1). A BI publisher data model to accept dynamic query as base64 encoded string
2). A BIP report.
3). An OIC integration to run report and provide output to VBCS app
4). A VBCS app to provide UI for running query and seeing results.
-> We will be importing and using fast-xml-parser library to convert data from xml to json.
Let us see each steps in detail.
1). A BI publisher data model to accept dynamic query as base64 encoded string
We need to create a BI Publisher data model with PLSQL block. Like below.
We need to create two parameters query1 - which will accept base64 encoded sql query.
Since it is string so the max character limit will be 32767. Here in example we have made 32000.
The second parameter will be xdo_cursor.
The data model query block is:
DECLARE
type refcursor is REF CURSOR;
xdo_cursor refcursor;
var varchar2(32000);
BEGIN
var := utl_raw.cast_to_varchar2(utl_encode.base64_decode(utl_raw.cast_to_raw(:query1)));
OPEN :xdo_cursor FOR var;
END;
Now lets run a query and save the sample data so that we can use the saved sample data to create report.
Lets write a simple query(There should not be any semicolon at the end):
select invoice_id, invoice_num from ap_invoices_all
Now we need to convert this to base64 because if we pass the query directly then it will give error.
We can use any text editor or use online tool to convert to base64.
The encoded string for above query is:
c2VsZWN0IGludm9pY2VfaWQsIGludm9pY2VfbnVtIGZyb20gYXBfaW52b2ljZXNfYWxs
Now lets pass this in our datamodel query1 parameter and click on view:
We will get the output like below:
Save this as sample data.
Now lets create a report.
2). A BIP report.
Select the data model for report:
No need to have a layout as it will give data XMl as output. We can create template and give output type as well.
Save the report and then view report.
We can export this report as Data xml.
3). An OIC integration to run report and provide output to VBCS app
We will create a simple OIC integration which will accept the base64 encoded query from VBCS ,runs the BIP report and returns base64 report bytes to VBCS.
Now call BIP report using a soap adapter:
Give attributeFormat as xml
Finally send the response back to VBCS:
4). A VBCS app to provide UI for running query and seeing results.
This is the start and end of the whole process.
In the sample app we have given a text area to enter the query ad then a run icon.
There is a progress bar, to display the progress of steps in query execution, a table to display the results and an export button to export the result in csv.
The UI looks like below:
Now lets run a query:
The Result will look like below:
We can export this output to csv.
Another query example with commenting the previous one:
We need to do below things in VBCS:
- From the text area whatever query we are having , we need to encode that to base64 through javascript:
Sample Function:
- Call rest endpoint(the OIC integration) by passing this base64 string
- The response from integration will be base64 report byte . We need to decode that using JS.
- This will return the xml, we need to parse this xml and convert to json.
- We will use fxp(fast-xml-parser) library.
- Place the library in our
resources/jsfolder.
Make an entry in index.html as follows : <script src="resources/js/fxp.min.js"></script>
The sample js function to convert xml to json will be:
ConvertXmlToJson(arg1) {
Similarly we need to do for data in table.
Note:- We can combine some funtions together which we saw above, to reduce total number of functions.
This is a simple app which explains flow of how we can query dynamically from VBCS , present the data in tabular form after parsing and also providing option to download data in csv( We need to seacrh and install export data component from components).
The mapping for export data will look like below:
We can Enhance this application to have features like
- Format Query
- Query history - Store the executed queries in ATP with env, query,user, unique id and status
- Rerunning the past queries - Fetch the query from ATP and allow to rerun
- Running queries for different Fusion Environments from the same page - Create OIC connection for diff ENV and have branches in the int for each env. Have LOV in VBCS page and accordingly pass to integration.
- Having links for fusion tables etc - This will help making easy to find the Fusion tables, We can give OER link for each module tables.
as shown in below screenshots.
Before Formatting:
After Formatting:
Get the past run queries, Which we stored in ATP
Select the Query which we want to rerun and click on highlighted rerun button
Run queries in Different Fusion Environments , from single page without needing to open BIP of each env.
Link for Oracle OER tables for Different Modules
No comments:
Post a Comment