XML Publisher Tutorial
XML Publisher Tutorial
Page 1|2
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 EBusiness 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:
1. User1 wants the same Report needs to be
printed in Spanish
2. User2 wants the Same Report needs to be
printed in chart format
3. User3 wants the Same Report output in
Excel
4. User4 wants the Same Report output to be
published on intranet or internet
5. 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 where as 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
Requirements for XML Data Object Reports
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
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 ;
/
Note: The layout field is blank as we havnot We have not yet attached any Template
or layout to this concurrent program.
<AMOUNT_DUE_ORIGINAL>8
000</AMOUNT_DUE_ORIGIN
AL>
</P_INVOICES>
- <P_INVOICES
<CUSTOMER_TRX_ID>929374</CU
STOMER_TRX_ID>
<CUSTOMER_ID>1119</CUSTOMER
_ID>
<INVOICE_NUMBER>2484267</INV
OICE_NUMBER>
<AMOUNT_DUE_ORIGINAL>380.68
</AMOUNT_DUE_ORIGINAL>
</P_INVOICES>
- <P_INVOICES>
<CUSTOMER_TRX_ID>806644</CU
STOMER_TRX_ID>
<CUSTOMER_ID>1119</CUSTOMER
_ID>
<INVOICE_NUMBER>2421373</INV
OICE_NUMBER>
<AMOUNT_DUE_ORIGINAL>615.96
</AMOUNT_DUE_ORIGINAL>
</P_INVOICES>
</P_CUSTOMER>
</CUSTOMERINFO>
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 process, registering concurrent program as Data
Definition in template manager
And register the template using the data definition created.
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.
And once the request is submitted we will get the output in PDF as