Overview: Oracle XML Publisher is a template-based publishing
solution delivered with the Oracle E-Business Suite. It provides a new approach
to report design and publishing by integrating familiar desktop word processing
tools with existing E-Business Suite data reporting. At runtime, XML Publisher
merges the custom templates with the concurrent request data extracts to
generate output in PDF, HTML, RTF, EXCEL (HTML), or even TEXT for use with EFT
and EDI transmissions
Basic Need for XML: Consider the
following scenarios
We have a RDF report with tabular
layout which prints in English
New Requirements:
- User1 wants the same Report needs to be printed in Spanish
- User2 wants the Same Report needs to be printed in chart format
- User3 wants the Same Report output in Excel
- User4 wants the Same Report output to be published on intranet or internet
- User5 wants the Same Report output eliminating few columns and adding few other
A new RDF needs to be created for
each requirement stated above or an existing RDF needs to be modified with huge
amount of effort but whereas with XML Publisher it can be done very easily.
XML Publisher separates a reports
data, layout and translation components into three manageable pieces at design
time; at runtime all the three pieces are brought back together by XML
Publisher to generate the final formatted, translated outputs like PDF, HTML,
XLS and RTF. In future, if any there is any change in layout we just need to
add/modify the Layout file
Data Logic: Data extracted from database and converted into an XML
string.
Layout: The layout templates to be used for the final output are
stored and managed in the Template Manager.
Translation: The translation handler will manage the translation that is
required at runtime
In brief the steps are as follows:-
a. Create a procedure and register it as Concurrent Program so that we write XML tags into output file.
b. Build a Data Definition & XML Template using XML Publisher.
c. Create a relation between XML Template & Concurrent Program and run the concurrent program
a. Create a procedure and register it as Concurrent Program so that we write XML tags into output file.
b. Build a Data Definition & XML Template using XML Publisher.
c. Create a relation between XML Template & Concurrent Program and run the concurrent program
Requirements for XML Data Object
Reports
- Oracle XML Publisher Release 5.5 patch 4206181
- Template Builder 5.5
Template builder is used to create
template/layout for your report. Usually Template builder 5.5 is available in
Oracle XML Publisher patch itself but you can also download it from http://edelivery.oracle.com. First select Oracle Application Server Products then
select your platform and then locate the Oracle XML Publisher Release 5.6.2
Media Pack v1 for Microsoft Windows, as below:
Download the Desktop edition from
the below:
When you download the XML Publisher
Desktop edition you get a Zip file containing setup for XML Publisher
Desktop Install Shield, this installs some components into Microsoft Word.
After installing, the Word Add-Ins
is attached to the menu bar for the word document. This menu lets you attach an
XML data source document, add the XML data to your template, set preferences
and preview the output.
In detail along with screenshots:-
A concurrent program is written that
spit out an XML file as output such concurrent program can be of type SQL or
PL/SQL or Oracle Report or any other supportable type, provided it can produce
a XML output.
1. Here I have a very simple PL/SQL
procedure, which fetch the records from AR tables and write the output in xml
tags.
CREATE
OR REPLACE PROCEDURE APPS.Demo_XML_Publisher (errbuf VARCHAR2,retcode
NUMBER,v_customer_id VARCHAR2)
AS
/*Cursor
to fetch Customer Records*/
CURSOR
xml_parent
IS
SELECT
customer_name , customer_id
FROM
ra_customers
WHERE
customer_id = to_number(v_customer_id);
/*Cursor
to fetch customer invoice records*/
CURSOR
xml_detail(p_customer_id1 NUMBER)
IS
SELECT
ra.customer_trx_id customer_trx_id, ra.ship_to_customer_id ship_to_customer_id,
ra.trx_number trx_number,aps.amount_due_original ams
FROM
ra_customer_trx_all ra, ar_payment_schedules_all aps
WHERE
ra.ship_to_customer_id = p_customer_id1
AND
aps.customer_trx_id = ra.customer_trx_id
AND
ROWNUM<4;
BEGIN
/*First
line of XML data should be <?xml version="1.0"?>*/
FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'<?xml
version="1.0"?>');
FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'<CUSTOMERINFO>');
FOR
v_customer IN xml_parent
LOOP
/*For
each record create a group tag <P_CUSTOMER> at the start*/
FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'<P_CUSTOMER>');
/*Embed
data between XML tags for ex:-
<CUSTOMER_NAME>ABCD</CUSTOMER_NAME>*/
FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'<CUSTOMER_NAME>'
|| v_customer.customer_name
||
'</CUSTOMER_NAME>');
FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'<CUSTOMER_ID>'
|| v_customer.customer_id ||
'</CUSTOMER_ID>');
FOR
v_details IN xml_detail(v_customer.customer_id)
LOOP
/*For
customer invoices create a group tag <P_INVOICES> at the start*/
FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'<P_INVOICES>');
FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'<CUSTOMER_TRX_ID>'
||
v_details.customer_trx_id
|| '</CUSTOMER_TRX_ID>');
FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'<CUSTOMER_ID>'
||
v_details.ship_to_customer_id
|| '</CUSTOMER_ID>');
FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'<INVOICE_NUMBER>'||
v_details.trx_number||'</INVOICE_NUMBER>');
FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'<AMOUNT_DUE_ORIGINAL>'||
v_details.trx_number||'</AMOUNT_DUE_ORIGINAL>');
/*Close
the group tag </P_INVOICES> at the end of customer invoices*/
FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'</P_INVOICES>');
END
LOOP;
/*Close
the group tag </P_CUSTOMER> at the end of customer record*/
FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'</P_CUSTOMER>');
END
LOOP;
/*Finally
Close the starting Report tag*/
FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'</CUSTOMERINFO>');
exception
when others then
FND_FILE.PUT_LINE(FND_FILE.log,'Entered
into exception');
END
Demo_XML_Publisher;
/
2. Create an executable
SampleXmlReport for the above procedure Demo_XMML_Publisher.
Go to Application Developer
Responsibility->Concurrent->Executable
3. Create a new concurrent program
SampleXmlReport that will call the SampleXmlReport executable declared above.
Make sure that output format is placed as XML.
Go to Application Developer
Responsibility -> Concurrent ->Program
4. Make sure we declare the
parameters for the procedure.
5. Add this new concurrent
program with Receivables request group. Either using the following code or
through below application screen.
DECLARE
BEGIN
FND_PROGRAM.add_to_group
(
PROGRAM_SHORT_NAME
=>'CUST_XML_SAMPLE'
,PROGRAM_APPLICATION
=>'AR'
,REQUEST_GROUP
=> 'Receivables All'
,GROUP_APPLICATION
=>'AR'
)
;
commit;
exception
when
others then
dbms_output.put_line('Object
already exists');
END
;
/
Go to System Administrator
Responsibility ->Security ->Responsibility->Request
6. From the receivables
responsibility (depends on which responsibility we added our concurrent program
here it is receivables)
From the menu
View->Requests->Submit A New Request->Single Request
Note: The layout field is blank as
we haven’t attached any Template or layout to this concurrent program yet.
By submitting the above request we
get the output in xml (depending on procedure) as follows:
<?xml version=”1.0″ ?>
- <CUSTOMERINFO>
- <P_CUSTOMER>
<CUSTOMER_NAME>UNIV OF CHICAGO
HOSP</CUSTOMER_NAME>
<CUSTOMER_ID>1119</CUSTOMER_ID>
- <P_INVOICES>
<CUSTOMER_TRX_ID>929476</CUSTOMER_TRX_ID>
<CUSTOMER_ID>1119</CUSTOMER_ID>
<INVOICE_NUMBER>2484403</INVOICE_NUMBER>
<AMOUNT_DUE_ORIGINAL>8000</AMOUNT_DUE_ORIGINAL>
</P_INVOICES>
- <P_INVOICES
<CUSTOMER_TRX_ID>929374</CUSTOMER_TRX_ID>
<CUSTOMER_ID>1119</CUSTOMER_ID>
<INVOICE_NUMBER>2484267</INVOICE_NUMBER>
<AMOUNT_DUE_ORIGINAL>380.68</AMOUNT_DUE_ORIGINAL>
</P_INVOICES>
- <P_INVOICES>
<CUSTOMER_TRX_ID>806644</CUSTOMER_TRX_ID>
<CUSTOMER_ID>1119</CUSTOMER_ID>
<INVOICE_NUMBER>2421373</INVOICE_NUMBER>
<AMOUNT_DUE_ORIGINAL>615.96</AMOUNT_DUE_ORIGINAL>
</P_INVOICES>
</P_CUSTOMER>
</CUSTOMERINFO>
7. Save the above code as
SampleXmlReport.xml
Note: Before saving the XML string
in notepad remove the dashes –
8. Create Template/Layout for the
report using Template Builder. Here is a sample template.
Note the following:
The data fields that are defined on
the template
For example: Customer Name, Customer
Id
The elements of the template that
will repeat when the report is run.
For example, Customer trx id ,
Invoice Number and Original Amount Due. All these fields on the template will
repeat for each Employee that is reported.
9. Mark up your template layout.
Like a mail-merge document there’s
placeholders for the data you’re going to add, and then you can add whatever
formatting you like.
10. Now the next step is to select
Data > Load XML Data from the toolbar menu, then pick up the XML data a file
ie.SampleXmlReport.xml. Once the data is loaded, a “Data Loaded Successfully”
dialog box comes up and you can then start adding data items to the template.
11. To add data items from the XML
file into your report, you locate in the document the placeholder for the field
you’re going to add, highlight it and then select Insert > Field from the
toolbar. A dialog box comes up with all of the available data items, you select
the one you want and click insert as shown below:
12. You can add repeating rows into
your document by selecting Insert > Table/Form from the toolbar. This brings
up a different dialog box that lets you drag a parent node – in this case, “P
Invoices” – into the middle section, which becomes your repeating rows.
13. Calculate the average for amount
due original. Select Insert->Field from the Add Ins toolbar. Then select the
tag that calculates the average for that particular field.
14. Once we are done with adding up
all the fields in the template save it as an rtf which looks as below:
To confirm the output from the
template we build. Click on preview and select the type in which format
the output is required.
15. Adding the Template to ORACLE
Application.
In order to add the template to
application the user should have the responsibility XML Publisher Administrator
assigned.
In this step we do 2 processes,
registering concurrent program as Data Definition in template manager
And register the template using the
data definition created.
Go to XML Publisher
Administrator->Data Definitions->Create Data definition.
Here we fill all the details to
create data definition
NOTE: Make sure the code of the data
definition must be the same as the short name of the Concurrent Program we
registered for the procedure. So that the concurrent manager can retrieve the
templates associated with the concurrent program
We can add our xml file
SampleXmlReport.xml in data definition here:
16. Now create the template with the
help of template manager
At the runtime the concurrent
managers request interface will present the list of available templates with
respect to the data definition registered. We will upload the rtf template file
created here. We will select the language and territory.
We can upload different templates
for different languages and territories.
17. Now run the concurrent program
to get the desired output.
From the receivables responsibility,
use the submit request form to run the concurrent request.
The default layout is displayed
which we can change as per the requirement. For changing the template click on
options to look for all templates register with that concurrent program.
Here in the above example my
template is SampleXmlReport which is displayed in layout field.
And once the request is submitted we
will get the output in PDF as
This is the final output as desired
in the PDF format.
Dynamic
Content using Sub Templates
By
Tim Dexter-Oracle on Dec 01, 2011
I have written about sub templates
in the past on a few occasions; the principle behind them is pretty simple. If
you have common report components that can be shared across reports; be they
blocks of text like standard contract clauses or maybe some common calculation
or function, drop them into a sub template and share the love. Develop once,
use everywhere!
A colleague was recently tasked with conditionally bringing into a report output, paragraphs of static text based on some user preferences. That’s an ideal candidate for a sub template approach; drop all of the paragraphs in to an RTF subtemplate and then just conditionally pull them in based on some boolean expressions.
You might, quite naturally think about conditionally importing a series of sub templates rather than defining one, with all the content. However, XSL does not allow the conditional import of sub templates so you must take the single template approach. You can of course, import multiple sub templates if you have a lot of content to bring in but in most cases I would expect a single sub template will suffice.
BIP does need to know what those paragraphs need to be for each user whether that’s as a set of parameter values or a data element in the incoming data set. For this example I have used both approaches and they work all flavors of BIP. Implementation of the sub template onto the servers is going to be a little different but the main principle is the same. I have mercilessly ripped out a nice graphic from Leslie’s (doc writer extraordinaire) documentation.
This is for the 11g version that supports loading sub templates into the report catalog as objects. They can then be referenced in your main template using the import statement:
<?import:xdoxsl:///subtemplatefolder/subtemplatename.xsb?>
The subtemplate folder is going to be from the /SharedFolders or /My Folders root. For instance, I have a sub template ‘paragraphs’ loaded into a ‘test’ folder under Shared Folders. The import statement in my main template is ‘<?import:xdoxsl:///Test/ParaSubTemplate.xsb?>’
A colleague was recently tasked with conditionally bringing into a report output, paragraphs of static text based on some user preferences. That’s an ideal candidate for a sub template approach; drop all of the paragraphs in to an RTF subtemplate and then just conditionally pull them in based on some boolean expressions.
You might, quite naturally think about conditionally importing a series of sub templates rather than defining one, with all the content. However, XSL does not allow the conditional import of sub templates so you must take the single template approach. You can of course, import multiple sub templates if you have a lot of content to bring in but in most cases I would expect a single sub template will suffice.
BIP does need to know what those paragraphs need to be for each user whether that’s as a set of parameter values or a data element in the incoming data set. For this example I have used both approaches and they work all flavors of BIP. Implementation of the sub template onto the servers is going to be a little different but the main principle is the same. I have mercilessly ripped out a nice graphic from Leslie’s (doc writer extraordinaire) documentation.
This is for the 11g version that supports loading sub templates into the report catalog as objects. They can then be referenced in your main template using the import statement:
<?import:xdoxsl:///subtemplatefolder/subtemplatename.xsb?>
The subtemplate folder is going to be from the /SharedFolders or /My Folders root. For instance, I have a sub template ‘paragraphs’ loaded into a ‘test’ folder under Shared Folders. The import statement in my main template is ‘<?import:xdoxsl:///Test/ParaSubTemplate.xsb?>’
Update from Leslie
For those of you testing using your own My Folder area. The syn tax is
For those of you testing using your own My Folder area. The syn tax is
<?import:xdoxsl:///~username/path
to subtemplate.xsb?> where username is your user name. For example:
<?import:xdoxsl:///~tdexter/Subtemplates/Template1.xsb?>
Recommend you move them into the
shared folder area in production.
For 10g you will either need to drop
them into an accessible directory and use the file URI or mount them into the
web server directory structure and access them via an http URI. I normally
mount them in a directory under the ‘xmlpserver’ directory e.g
J2EE_HOME\applications\xmlpserver\xmlpserver\subtemplates, a template is then
accessible via the URI ‘http://server:port/subtemplates/template.rtf’
Make sure you set the Allow External
References property to true for the report so that the sub template can be
accessed.
The actual content of the sub template is pretty straight forward. It’s a series of paragraphs bounded by the ‘template’ command e.g.
The actual content of the sub template is pretty straight forward. It’s a series of paragraphs bounded by the ‘template’ command e.g.
<?template:para1?>
…
…
<?end
template?>
<?template:para2?>
…
…
<?end
template?>
<?template:para3?>
…
…
<?end
template?>
Now we have the dynamic content defined it’s a case of
conditionally bringing it into the main template. For this example I have
demonstrated two approaches; both rely on the required paragraph information to
be in the main dataset:
1. Using parameters to allow the user to select the appropriate paragraphs to be brought in. This means creating the parameters and ensuring that you have set the property on the data model to include the parameter values in the XML result set.
Once that’s done its just a simple case of using id statements to check if a given paragraph should be included:
1. Using parameters to allow the user to select the appropriate paragraphs to be brought in. This means creating the parameters and ensuring that you have set the property on the data model to include the parameter values in the XML result set.
Once that’s done its just a simple case of using id statements to check if a given paragraph should be included:
<?if:.//PARA1='1'?><?call:para1?><?end
if?>
This assumes my parameter is called PARA1 and that a ‘1’ means include it, it could easily be a ‘Y’ or ‘True’ value, you are just testing for it.
2. Including a value in the data to define what paragraphs should be included. If you have stored what paragraphs should be included for a given entity i.e. customer, supplier, employee, etc. Then you can extract those values into the data set and test for them. For this demo I have a 5 character set of ‘1’s and ‘0’s to represent the paragraphs that need to be included e.g. 10110. I just use a substring command to find out if a particular paragraph needs to be included.
<?if:substring(.//PARAS,1,1)='1'?><?call:para1?><?end
if?>
Where PARAS is the element holding the ‘1’s and ‘0’s string to be parsed.
You can of course use some other means of marking whether a paragraph needs to be included or not. It’s just a case of parsing out the values with a substring or similar command.
You should be able to generate dynamic content such as this:
XML Publisher Interview Questions and Answers
1. What
are the XML publisher tables.
Ans>PER_GB_XDO_TEMPLATES
XDO_DS_DEFINITIONS_B
XDO_DS_DEFINITIONS_TL
XDO_DS_DEFINITIONS_VL
XDO_LOBS
XDO_TEMPLATES_B
XDO_TEMPLATES_TL
XDO_TEMPLATES_VL
XDO_TEMPLATE_FIELDS
XDO_TRANS_UNITS
XDO_TRANS_UNIT_PROPS
XDO_TRANS_UNIT_VALUES
XDO_DS_DEFINITIONS_B
XDO_DS_DEFINITIONS_TL
XDO_DS_DEFINITIONS_VL
XDO_LOBS
XDO_TEMPLATES_B
XDO_TEMPLATES_TL
XDO_TEMPLATES_VL
XDO_TEMPLATE_FIELDS
XDO_TRANS_UNITS
XDO_TRANS_UNIT_PROPS
XDO_TRANS_UNIT_VALUES
2.
how to create report with out .rdf?
Ans> Using Data
template…..see below link
http://appstechnical01.blogspot.in/2012/08/using-multiple-quires-data-template-code.html
3.
how to write a loop in rtf template design ?
Ans>
<?for-each:G_invoice_no?>
……………………..<?end for each?>
4.
how to design sub templates in rtf layout
?
Ans> using following
tags..
<?template:template_name?>
This is Last Page
<?end template?>
5.
how to call a header or footer ?
Ans> using this tag <?call:header?> and <?call:footer?>
We have to use header section and footer section of the page.
6. How to break the page in specific condition ?
Ans>
<?split-by-page-break:?>
7.
How to use section break ?
Ans>
<?for-each@section:G_CUSTOMER(This is group name)?>
8.
How to create multi layouts in XMLP ?
Ans> using
below conditions
<?choose:?>
<?when:CF_CHOICE=’VENDOR’?>
Your template….
<?end when?>
<?when:CF_CHOICE=’INVOICE’?>
Your template….
<?end when?>
<?when:CF_CHOICE=’RECEIPT’?>
Your template….
<?end
when?>
<?end choose?>
9.
How to calculate the running total in XMLP?
Ans>
<?xdoxslt:set_variable($_XDOCTX, 'RTotVar',
xdoxslt:get_variable($_XDOCTX, 'RTotVar') + ACCTD_AMT(This is
column
name) )?><?xdoxslt:get_variable($_XDOCTX, 'RTotVar')?>
10. How to submit a layout in the backend ?
Ans> we have to write a procedure for this using the below
code
fnd_request.add_layout
(template_appl_name => 'application name',
template_code =>
'your template code',
template_language => 'En',
template_territory => 'US',
output_format =>
'PDF'
);
11. How to display the images in XMLP?
Ans>
url:{'http://image location'}
For example, enter:
url:{'http://www.oracle.com/images/ora_log.gif'}
url:{'${OA_MEDIA}/image
name'}
12.
How to pass the page numbers in rtf layout?
Ans>
<REPORT>
<PAGESTART>200<\PAGESTART>
....
</REPORT>
Enter
the following in your template:
<?initial-page-number:PAGESTART?>
13.How to display last page is differently in XML Publisher Reports.
Ans> what you want to dispay the test anything write in last of page
last page header
<?start@last-page-first:body?> <?end body?>
13.How to display last page is differently in XML Publisher Reports.
Ans> what you want to dispay the test anything write in last of page
last page header
<?start@last-page-first:body?> <?end body?>
more questions i
will update soon.........
we have any doubts on this please give the
comment....i will respond...u r comment
What is BI Publisher?
A. It is a reporting tool for generating the reports. More than tool it is an engine that can be
integrated with systems supporting the business.
Is BI Publisher integrated with Oracle Apps?
Yes, it is tightly integrated with Oracle Apps for reporting needs. In 11.5.10 instances xml publisher was used, in R12 we can it BI Publisher
What is the difference between xml publisher and BI Publisher?
Name is the difference, initially it was released on the name of xml publisher( the initial patchset), later on they have added more features and called it Business Intelligence Publisher. In BI by default we have integration with Datadefinitions in R12 instance. Both these names can be used interchangeably
What are the various components required for developing a BI publisher report?
Data Template, Layout template and the integration with Concurrent Manager.
How does the concurrent program submitted by the user knows about the datatemplate or layout template it should be using for generating the output?
The concurrent program ‘shortname’ will be mapped to the ‘code’ of the Datatemplate. Layout template is attached to the datatemplate, this forms the mapping between all the three.
What is a datatemplate?
Datatemplate is an xml structure which contains the queries to be run against the database so that desired output in xml format is generated, this generated xml output is then applied on to the layout template for the final output
What is a layout template?
Layout template defines how the user views the output, basically it can be developed using Microsoft word document in rft (rich text format) or Adobe pdf format. The data output in xml format (from Data template) will be loaded in layout template at run time and the required final output file is generated.
What are the output formats supported by layout template?
xls, html, pdf, eText etc are supported based on the business need.
Do you need to write multiple layout templates for each output type like html/pdf?
No, only layout template will be created, BI Publisher generates desired output format when the request is run
What is the default output format of the report?
The default output format defined during the layout template creation will be used to generate the output, the same can be modified during the request submission and it will overwrite the one defined at layout template
Can you have multiple layout templates for a singe data template?
Yes, multiple layouts can be defined, user has a choice here to use one among them at run time during conc request submission
Where do you register data and layout templates?
Layout template will be registered under xml publisher administrator responsibility>Templates tab.
Data template will be registered under xml publisher admininstrator responsibility> Data Definitions
I want to create a report output in 10 languages, do I have to create 10 layout templates?
No, BI Publisher provides the required translation for your templates, based on the number of languages installed in your oracle apps environment requires outputs are provided
What is the required installation for using BI Pub report?
BI Publisher deskop tool has be installed. Using this tool you can preview or test the report before deploying the same on to the instance.
How do you move your layout or data template across instances?
xdoloader is the utility that will be used.
What is the tool to map required data output and layout templates so that they can be tested in local machine?
Template viewer will be used for the same.
Which component is responsible for generating the output in xml format before applying it to layout template?
DataEngine will take DataTemplate as the input and the output will be generated in xml format which will then be applied on layout template
Can BI publisher reports be used in OAF pages?
XDO template utility helper java classes are provided for the same.
Name some business use cases for BI reports?
Bank EFT, customer documents, shipping documents, internal analysis documents or any transactional documents
How do you pass parameters to your report?
Concurrent program parameters should be passed, ensure that the parameter name/token are same as in the conc prog defn and the data template
What are the various sections in the data template?
Parameter section
Trigger Section
Sql stmt section
Data Structure section
Lexical Section
What does lexical section contain?
The required lexical clause of Key Flex field or Descriptive FF are created under this section
What triggers are supported in Data template?
Before report and After report are supported
Where is the trigger code written?
The code is written in the plsql package which is given under ‘defaultpackage’ tag of data template.
what is the file supporting the translation for a layout template?
A. xliff is the file that supports the translation, you can modify the same as required.
Q. How do you display the company logo on the report output?
A. Copy and paste the logo (.gif. or any format) on the header section of .rtf file . Ensure you resize per the company standards.
A. It is a reporting tool for generating the reports. More than tool it is an engine that can be
integrated with systems supporting the business.
Is BI Publisher integrated with Oracle Apps?
Yes, it is tightly integrated with Oracle Apps for reporting needs. In 11.5.10 instances xml publisher was used, in R12 we can it BI Publisher
What is the difference between xml publisher and BI Publisher?
Name is the difference, initially it was released on the name of xml publisher( the initial patchset), later on they have added more features and called it Business Intelligence Publisher. In BI by default we have integration with Datadefinitions in R12 instance. Both these names can be used interchangeably
What are the various components required for developing a BI publisher report?
Data Template, Layout template and the integration with Concurrent Manager.
How does the concurrent program submitted by the user knows about the datatemplate or layout template it should be using for generating the output?
The concurrent program ‘shortname’ will be mapped to the ‘code’ of the Datatemplate. Layout template is attached to the datatemplate, this forms the mapping between all the three.
What is a datatemplate?
Datatemplate is an xml structure which contains the queries to be run against the database so that desired output in xml format is generated, this generated xml output is then applied on to the layout template for the final output
What is a layout template?
Layout template defines how the user views the output, basically it can be developed using Microsoft word document in rft (rich text format) or Adobe pdf format. The data output in xml format (from Data template) will be loaded in layout template at run time and the required final output file is generated.
What are the output formats supported by layout template?
xls, html, pdf, eText etc are supported based on the business need.
Do you need to write multiple layout templates for each output type like html/pdf?
No, only layout template will be created, BI Publisher generates desired output format when the request is run
What is the default output format of the report?
The default output format defined during the layout template creation will be used to generate the output, the same can be modified during the request submission and it will overwrite the one defined at layout template
Can you have multiple layout templates for a singe data template?
Yes, multiple layouts can be defined, user has a choice here to use one among them at run time during conc request submission
Where do you register data and layout templates?
Layout template will be registered under xml publisher administrator responsibility>Templates tab.
Data template will be registered under xml publisher admininstrator responsibility> Data Definitions
I want to create a report output in 10 languages, do I have to create 10 layout templates?
No, BI Publisher provides the required translation for your templates, based on the number of languages installed in your oracle apps environment requires outputs are provided
What is the required installation for using BI Pub report?
BI Publisher deskop tool has be installed. Using this tool you can preview or test the report before deploying the same on to the instance.
How do you move your layout or data template across instances?
xdoloader is the utility that will be used.
What is the tool to map required data output and layout templates so that they can be tested in local machine?
Template viewer will be used for the same.
Which component is responsible for generating the output in xml format before applying it to layout template?
DataEngine will take DataTemplate as the input and the output will be generated in xml format which will then be applied on layout template
Can BI publisher reports be used in OAF pages?
XDO template utility helper java classes are provided for the same.
Name some business use cases for BI reports?
Bank EFT, customer documents, shipping documents, internal analysis documents or any transactional documents
How do you pass parameters to your report?
Concurrent program parameters should be passed, ensure that the parameter name/token are same as in the conc prog defn and the data template
What are the various sections in the data template?
Parameter section
Trigger Section
Sql stmt section
Data Structure section
Lexical Section
What does lexical section contain?
The required lexical clause of Key Flex field or Descriptive FF are created under this section
What triggers are supported in Data template?
Before report and After report are supported
Where is the trigger code written?
The code is written in the plsql package which is given under ‘defaultpackage’ tag of data template.
what is the file supporting the translation for a layout template?
A. xliff is the file that supports the translation, you can modify the same as required.
Q. How do you display the company logo on the report output?
A. Copy and paste the logo (.gif. or any format) on the header section of .rtf file . Ensure you resize per the company standards.
RTF Template : Working with variables
Let’s see how we can use the
variables to store temporary data or use for calculation. This is
achieved using “xdoxslt:” function. These are the BI Publisher extension
of standard xslt functions.
Use xdoxslt:set_variable () function
to set /initialize the variable and xdoxslt:get_variable() function to
get the variable value. $_XDOCTX is the System variables to set the XDO
Context.
/*initialize
a variables*/
<?xdoxslt:set_variable($_XDOCTX,
‘counter’, 0)?>
/*update
the variable’s value by adding the current value to MY_CNT, which is XML
element */
<?xdoxslt:set_variable($_XDOCTX,
‘counter’, xdoxslt:get_variable($_XDOCTX, ‘counter’) + MY_CNT)?>
/*
accessing the variables */
<?xdoxslt:get_variable($_XDOCTX,
‘counter’)?>
/*Working
in a loop*/
<?xdoxslt:set_variable($_XDOCTX,
‘counter’, 0)?>
<?for-each:G1?>
/*increment
the counter*/
<?xdoxslt:set_variable($_XDOCTX,
‘counter’, xdoxslt:get_variable($_XDOCTX, ‘counter’) + 1)?>
<?end
for-each?>
<?xdoxslt:get_variable($_XDOCTX,
‘counter’)?>
Hope
this help in understanding variable gimmicks.
Need
help on RTF template design or BI Publisher implementation, please contact info@adivaconsulting.com
What is XML Publisher?
Oracle
XML Publisher is a template-based publishing solution delivered with the Oracle
E-Business Suite. It provides a new approach to report design and publishing by
integrating familiar desktop word processing tools with existing E-Business
Suite data reporting. At runtime, XML Publisher merges the custom templates
with the concurrent request data extracts to generate output in PDF, HTML, RTF,
EXCEL (HTML), or even TEXT for use with EFT and EDI transmissions.
XML Publisher has been ported over to the PeopleSoft enterprise ERP suite. XML Publisher will be the reporting tool of choice from Oracle when Fusion Applications become available.
XML Publisher has been ported over to the PeopleSoft enterprise ERP suite. XML Publisher will be the reporting tool of choice from Oracle when Fusion Applications become available.
What are the various sections in the data template?
The data template is an XML document
that consists of 5 basic sections:
- Properties
- Parameters
- Triggers
- Data Query
- Data Structure
How do you migrate layout or data template across instances?
We
can use XDOLoader utility to migrate both data template and layout. Below is
the example:
Data Template:
java oracle.apps.xdo.oa.util.XDOLoader UPLOAD \
-DB_USERNAME ${apps_user} \
-DB_PASSWORD ${apps_pwd} \
-JDBC_CONNECTION ${TNS_STRING} \
-LOB_TYPE DATA_TEMPLATE \
-APPS_SHORT_NAME XXCUST \
-LOB_CODE XX_DT_REPORT \
-LANGUAGE en \
-TERRITORY US \
-XDO_FILE_TYPE XML \
-NLS_LANG ${NLS_LANG} \
-FILE_CONTENT_TYPE ‘text/html’ \
-FILE_NAME XX_DTEMPLATE.xml \
-LOG_FILE XX_DTEMPLATE.xml.log \
-CUSTOM_MODE FORCE
FIN_STATUS=$?
Layout:
java oracle.apps.xdo.oa.util.XDOLoader UPLOAD \
-DB_USERNAME ${apps_user} \
-DB_PASSWORD ${apps_pwd} \
-JDBC_CONNECTION ${TNS_STRING} \
-LOB_TYPE TEMPLATE_SOURCE \
-APPS_SHORT_NAME XXCUST \
-LOB_CODE XX_DT_REPORT \
-LANGUAGE en \
-TERRITORY US \
-XDO_FILE_TYPE RTF \
-NLS_LANG ${NLS_LANG} \
-FILE_CONTENT_TYPE ‘application/rtf’ \
-FILE_NAME XX_LAYOUT.rtf \
-LOG_FILE XX_LAYOUT.rtf.log \
-CUSTOM_MODE FORCE
Data Template:
java oracle.apps.xdo.oa.util.XDOLoader UPLOAD \
-DB_USERNAME ${apps_user} \
-DB_PASSWORD ${apps_pwd} \
-JDBC_CONNECTION ${TNS_STRING} \
-LOB_TYPE DATA_TEMPLATE \
-APPS_SHORT_NAME XXCUST \
-LOB_CODE XX_DT_REPORT \
-LANGUAGE en \
-TERRITORY US \
-XDO_FILE_TYPE XML \
-NLS_LANG ${NLS_LANG} \
-FILE_CONTENT_TYPE ‘text/html’ \
-FILE_NAME XX_DTEMPLATE.xml \
-LOG_FILE XX_DTEMPLATE.xml.log \
-CUSTOM_MODE FORCE
FIN_STATUS=$?
Layout:
java oracle.apps.xdo.oa.util.XDOLoader UPLOAD \
-DB_USERNAME ${apps_user} \
-DB_PASSWORD ${apps_pwd} \
-JDBC_CONNECTION ${TNS_STRING} \
-LOB_TYPE TEMPLATE_SOURCE \
-APPS_SHORT_NAME XXCUST \
-LOB_CODE XX_DT_REPORT \
-LANGUAGE en \
-TERRITORY US \
-XDO_FILE_TYPE RTF \
-NLS_LANG ${NLS_LANG} \
-FILE_CONTENT_TYPE ‘application/rtf’ \
-FILE_NAME XX_LAYOUT.rtf \
-LOG_FILE XX_LAYOUT.rtf.log \
-CUSTOM_MODE FORCE
Do we need to create multiple layout templates for printing report in multiple languages?
We can achieve multi language report
by two ways
- Different layout template for different languages This approach can be chosen if the layout is also different from language to language.
2. Generate XLIFF template for each language
XLIFF (XML Localization Interchange File Format) : format for exchanging localization data. XML based format that enables translators to concentrate on the text to be translated. We use this option when we want to use the same layout and apply specific translation.
Can you have multiple layout templates for a singe data template?
Yes!
Multiple layouts can be attached, so that user will have a choice here to use
one among them at the time of concurrent program submission
How to get a output of a XMLP report in different formats like PDF, DOC, XLS, TXT ?
While
submitting the concurrent program you select the output format in options form
of “Up on Completions” selection.
What is Data Template and Layout Template?
Data Template:
Datatemplate is an xml structure which contains the queries to be run against the database so that desired output in xml format is generated, this generated xml output is then applied on to the layout template for the final output
Layout Template:
Layout template defines how the user views the output, basically it can be developed using Microsoft word document in rft (rich text format) or Adobe pdf format. The data output in xml format (from Data template) will be loaded in layout template at run time and the required final output file is generated.
Datatemplate is an xml structure which contains the queries to be run against the database so that desired output in xml format is generated, this generated xml output is then applied on to the layout template for the final output
Layout Template:
Layout template defines how the user views the output, basically it can be developed using Microsoft word document in rft (rich text format) or Adobe pdf format. The data output in xml format (from Data template) will be loaded in layout template at run time and the required final output file is generated.
How does the concurrent request relate both data template and layout template it should be using for generating the output?
The
concurrent program ‘short name’ will be mapped to the ‘code’ of the Data
template. Layout template is attached to the data template, this forms the
mapping between all the three.
What are the various components required for developing a BI publisher report?
- Data Template
- Layout template
- Integration with Oracle Concurrent Manager
What is the difference between XML publisher and BI Publisher?
Name is the difference, XML
Publisher (today) is only found within E-Business Suite. Prior to release 12,
it was added in via a patch. In R12, it comes pre-installed. Both these names
can be used interchangeably.
XML Pub operates entirely within EBS
and can only be used within EBS. BIP can be installed as a standalone version
running off of several OC4J compliant engines, such as Application Server and
Tomcat. BIP can be pointed anywhere, so you could do reports out of an OLTP or
warehouse database, MSSQL and even within EBS.
Licensing is already included in
EBS, and the standalone costs whatever plus maintenance.
BI Publisher is based on OC4J, which
is a J2EE compliant engine, which for all practical purposes, is a Web server.
You see OC4J in lots of other Oracle products which typically have one thing in
common: they expose their application to the user via a Web interface. XMLP is
also based on this because EBS runs off of Application Server.
Both include a desktop component,
which is an add-in to Word, and the work there is the same regardless of which
flavor you’re using. You can create templates and publish them, there being a
slight difference in how each version does that.
What triggers are supported in Data template?
There are two different triggers
supported by Data Template:
- Before Trigger
- After Trigger
What are the main XML Publisher database Tables?
Here
are the few important tables of XMLP:
XDO_DS_DEFINITIONS_B
XDO_DS_DEFINITIONS_TL
XDO_DS_DEFINITIONS_VL
XDO_LOBS
XDO_TEMPLATES_B
XDO_TEMPLATES_TL
XDO_TEMPLATES_VL
XDO_TEMPLATE_FIELDS
XDO_TRANS_UNITS
XDO_TRANS_UNIT_PROPS
XDO_TRANS_UNIT_VALUES
XDO_DS_DEFINITIONS_B
XDO_DS_DEFINITIONS_TL
XDO_DS_DEFINITIONS_VL
XDO_LOBS
XDO_TEMPLATES_B
XDO_TEMPLATES_TL
XDO_TEMPLATES_VL
XDO_TEMPLATE_FIELDS
XDO_TRANS_UNITS
XDO_TRANS_UNIT_PROPS
XDO_TRANS_UNIT_VALUES
Where and What is the code written in the Data Template Trigger?
The
code is written in the plsql package which is mentioned under ‘defaultpackage’
tag of data template.
what is the file supporting the translation for a layout template?
XLIFF
is the file that supports the translation, we have one XLIFF file for each language.
How to do Looping in XMLP?
you can use the below syntax for
looping:
<?for-each:looping_node_name?>
.
.
.
<?end for-each?>
.
.
.
<?end for-each?>
How to create sub templates in rtf Template?
Here is the Sub Template tag:
<?template:header?>
…sub template design/tags…
<?end template?>
Here ‘header’ is the sub template name.
After that you call ‘header’ sub template any where in the rtf with below syntax:
<?call:header?>
<?template:header?>
…sub template design/tags…
<?end template?>
Here ‘header’ is the sub template name.
After that you call ‘header’ sub template any where in the rtf with below syntax:
<?call:header?>
How do you pagebreaks after specific rows?
We can use below tag for page break:
<?split-by-page-break?>
But to use this conditionally we can use below syntax:
<?if:position()
mod 5=0 ?>
<?split-by-page-break:?>
<?end if?>
Note: we should not use split-by-page-break in a table
layout.
How to create a conditional Layout in XMLP?
Here is the syntax for creating different layouts based on
condition:
<?choose:?>
<?when:CF_CHOICE=’VENDOR’?>
..design your Layout here..
<?end when?>
<?when:CF_CHOICE=’INVOICE’?>
..design your Layout here..
<?end when?>
<?when:CF_CHOICE=’RECEIPT’?>
..design your Layout here..
<?end when?>
<?end choose?>
<?choose:?>
<?when:CF_CHOICE=’VENDOR’?>
..design your Layout here..
<?end when?>
<?when:CF_CHOICE=’INVOICE’?>
..design your Layout here..
<?end when?>
<?when:CF_CHOICE=’RECEIPT’?>
..design your Layout here..
<?end when?>
<?end choose?>
How to restrict rows in a Group based on some condition in XMLP?
We can use below syntax to
restricting the rows in the Group based on condition:
Syntax:
<?for-each:Group_Name[./Field_name with Condition]?>
Example:
<?for-each:EMP_DETAILS[EMP_ADDRESS!=”]?>
Syntax:
<?for-each:Group_Name[./Field_name with Condition]?>
Example:
<?for-each:EMP_DETAILS[EMP_ADDRESS!=”]?>
In this examples it will filter the
Records with EMP_ADDRESS is not Null and Displays in the Report.
How to handle NULL values as Exceptions in XMLP?
We use section:not property to handle NULL values.
Syntax:
<?if@section:not(//GROUP_NAME)?>Message/Action<?end if?>
Example:
<?if@section:not(//G_HEADERS)?>No Data Found for the Parameters Provided Master <?end if?>
Displays the Message
” No Data Found for the Parameters Provided Master “
Syntax:
<?if@section:not(//GROUP_NAME)?>Message/Action<?end if?>
Example:
<?if@section:not(//G_HEADERS)?>No Data Found for the Parameters Provided Master <?end if?>
Displays the Message
” No Data Found for the Parameters Provided Master “
How to find String Length in XMLP?
Tag to find the length of the String
<?string-length(Field_NAME)?>
<?string-length(Field_NAME)?>
Example:
<Name>Samantha</Name> (i.e Data Source)
Template Layout:
<?Name?> is <?string-length(Name)?> characters length Word.
<Name>Samantha</Name> (i.e Data Source)
Template Layout:
<?Name?> is <?string-length(Name)?> characters length Word.
Output:
Samantha is 8 characters length Word.
Samantha is 8 characters length Word.
How to use Variables in XMLP?
Here is a small example of how to
use variables in XMLP rtf layout:
Declaring the Variable R
<?xdoxslt:get_variable($_XDOCTX, ‘R’)?>
Declaring the Variable R
<?xdoxslt:get_variable($_XDOCTX, ‘R’)?>
Declaring the Variable R and
Assigning the Values 4 to R
<?xdoxslt:set_variable($_XDOCTX, ‘R’, 4)?>
<?xdoxslt:set_variable($_XDOCTX, ‘R’, 4)?>
Get the Variable value
<?xdoxslt:get_variable($_XDOCTX, ‘R’)?>
<?xdoxslt:get_variable($_XDOCTX, ‘R’)?>
This adds 5 to variable R and
displays it
<?xdoxslt:set_variable($_XDOCTX, ‘R’, xdoxslt:get_variable($_XDOCTX, ‘R’)+5)?>
<?xdoxslt:set_variable($_XDOCTX, ‘R’, xdoxslt:get_variable($_XDOCTX, ‘R’)+5)?>
This subtracting 2 to varaible R and
displays it
<?xdoxslt:set_variable($_XDOCTX, ‘R’, xdoxslt:get_variable($_XDOCTX, ‘R’)-2)?>
<?xdoxslt:set_variable($_XDOCTX, ‘R’, xdoxslt:get_variable($_XDOCTX, ‘R’)-2)?>
Similarly U can use any mathematical
Operation to the variable R.
How to Sort Data in the XMLP?
Syntax:-
Case 1:-
<?sort:Field_Name?><?Field_Name?>
It sorts the data in Ascending order by Default.if Order By is not mentioned
Case 2:-
<?sort:Field_Name;’Order by‘?>
It sorts the data based on Order By mentioned here like Ascending Or Descending
Case 3:-
<?sort:Field_Name;’Order by‘;data-type=’text’?>
It sorts the String Data based on Order By mentioned here like Ascending Or Descending
Examples:-
Case 1:-
<?for-each:EMP_DETAILS?>
<?sort:EMP_NO?><?EMP_NAME?><?end for-each?>
Case 1:-
<?sort:Field_Name?><?Field_Name?>
It sorts the data in Ascending order by Default.if Order By is not mentioned
Case 2:-
<?sort:Field_Name;’Order by‘?>
It sorts the data based on Order By mentioned here like Ascending Or Descending
Case 3:-
<?sort:Field_Name;’Order by‘;data-type=’text’?>
It sorts the String Data based on Order By mentioned here like Ascending Or Descending
Examples:-
Case 1:-
<?for-each:EMP_DETAILS?>
<?sort:EMP_NO?><?EMP_NAME?><?end for-each?>
Case 2:-
<?for-each:EMP_DETAILS?>
<?sort:EMP_NO;’descending‘?><?EMP_NAME?><?end for-each?>
<?for-each:EMP_DETAILS?>
<?sort:EMP_NO;’descending‘?><?EMP_NAME?><?end for-each?>
Case 3:-
<?for-each:EMP_DETAILS?>
<?sort:EMP_NAME;’ascending‘;data-type=’text’?><?EMP_NAME?><?end for-each?>
<?for-each:EMP_DETAILS?>
<?sort:EMP_NAME;’ascending‘;data-type=’text’?><?EMP_NAME?><?end for-each?>
How to repeat the Header of the template on each and every page of the output in XMLP?
Use <b><@section:?></b> tag to repeat a section in any specific region of a layout(Or)You can also use header part of rtf (MS word feature) to insert the information you want to repeat on all pages.
What are the different ways to show/insert an image on XMLP layout?
There are 4 different ways to
insert/show an image in rtf:
- Insert an image directly on rtf just by using MS word standard feature
- Using OA_MEDIA: storing on server and giving physical path of the image
- Using URL of a image hosted on some website
- Retrieving the image store in a database as BLOB type
Can XML publisher reports be used in OAF pages?
We can use XDO template utility helper java classes to embed XMLP report on OA PagesWhich component is responsible for generating the output in XML format before applying it to layout template?
DataEngine will take DataTemplate as the input and the output will be generated in xml format which will then be applied on layout templateMore information: http://oracleappsdna.com/2014/10/developing-xml-publisher-reports-using-data-template/
No comments:
Post a Comment