Você está na página 1de 44

An Oracle White Paper

May 2014
Build Your XML Reports



Build Your XML Reports


EXECUTIVE SUMMARY ................................................................ 2
Introduction ..................................................................................... 2
Process Overview ........................................................................... 3
Recurrent Business Needs ............................................................. 5
Obtain Current Template ................................................................. 5
Modify Template .............................................................................. 8
Update & Preview Modified Template ........................................... 31
Conclusion .................................................................................... 33
References .................................................................................... 33
Appendix A: Data Dictionary ......................................................... 34
Build Your XML Reports

EXECUTIVE SUMMARY
Businesses today are creating and printing purchasing documents and reports in a variety
of formats. Most businesses design their own layouts for these documents and reports to
optimize the visibility of data in order to be consistent with organization and industry
standards. Oracle Advanced Procurements document printing solution uses Oracle XML
Publishers standard based tools and technologies to deliver an efficient means to design
layouts and print professional documents.

Oracle XML Publisher enables customers to create and maintain their own report formats
based on XML data extracts from their existing Oracle Applications, be it Oracle
Purchasing or Oracle Sourcing or any of the other Oracle Advanced Procurement
modules that support XML Publisher reports. During execution, XML Publisher merges
the custom templates with the concurrent request data extracts to generate output in a
number of formats such as PDF, HTML, RTF, and XML.
Introduction
Oracle Advanced Procurements document publishing solution is powered by standards
based Oracle XML Publisher technology. Oracle XML Publisher is a template-based
publishing solution that makes optimal use of standard, well-known technologies and
tools, so you can rapidly develop and maintain custom report formats.

The flexibility provided by XML Publisher is due to the separation of the report format
from its content. While the collection of the data is done by Oracle Advanced
Procurement, the design and control of the report outputs is controlled by the template
files. During execution, Oracle XML Publisher merges the layout template files with the
data to create a variety of outputs to cater to business needs.

Thus, the segregation of the presentation layer and data structure in Oracle XML
Publishers approach provides immense control over designing and printing of
documents. You design your layout using tools provided by Oracle XML Publisher,
capture procurement data in Oracle Advanced Procurement and utilize the Oracle XML
Publisher engine to blend or combine the layout with the data structure to create a
composite document. Oracle XML Publisher Desktop, a tool that embeds Microsoft
Word, is extremely simple to use to design layouts.

You can find information about Oracle XML Publisher, including presentations, technical
information, demonstrations and sample layout formats at the following location:
http://www.oracle.com/technology/products/applications/publishing/index.html

Oracle Advanced Procurement has a number of XML Reports that are available for a
variety of documents such as Purchase Orders, Contracts, RFQs/RFIs/Auctions, and
Requisitions. These documents are based on the specified templates; those have been
2
Build Your XML Reports

created by using colors, images, font styles and other formatting and design options. Some
of the XML templates are pre-defined in the Oracle Procurement suite, and are available
as samples for users. However, it is expected that users would define their XML templates
which would have their personalized logo, formatting style and data fields specific to their
business requirements.

This paper provides you with some basic guidelines and tips to help build your own
custom XML Reports by modifying existing layout templates or by creating new layout
templates. This paper walks you through the existing process of using XML Publisher in
Oracle Advanced Procurement and then discusses how to handle some of the common
requirements for template modification with the help of sample use-cases. This document
is a quick start guide for users to be able to create their own custom XML reports and is
not a full-fledged developers guide. Thus the most frequently used modifications to
templates are discussed here.
Process Overview
Before looking into creating custom reports, a quick review of the XML Publisher
reporting/publishing capabilities within Oracle Advanced Procurement is necessary. The
View PDF action initiates a call to Oracle XML Publisher and results in the generation of
a report or document in the output format specified. For example, to create a PDF output
for a purchase order, users could perform the following steps:
1. Using Oracle Purchasing, query the Purchase Order document.
2. Select the View PDF action in the Actions drop-down and click Go.

3. The system prompts you with the Save or Open Document Pop-up window, as shown in the
figure.
3
Build Your XML Reports


4. If the option to open the document is selected, a PDF version of the purchase order is
generated and displayed.

4
Build Your XML Reports

Recurrent Business Needs
A scenario encountered by most users is that the out-of-the-box templates, though good
samples of standard documents, are too generic to use. Most users would like to
customize these templates in order to generate documents as per their defined company
layouts and business needs.
The most frequent requirements are adding new fields or suppressing some of the existing
fields, changing display formats, adding a company logo or other company images,
building a customized cover page for their documents or inserting blank pages. It is
important to define requirements clearly and group them appropriately, because each type
of requirement has its own solution.
Obtain Current Template
Determine Existing XML Publisher Templates
Oracle Advanced Procurement enables users to associate XML Publisher templates
(Layout Template) with various document types. Hence, if users need to modify an
existing template for a document type, the first step is to get a list of associated XML
Publisher templates for that document type.

To find out which associated templates need to be modified, users could follow these
steps:

1. Login into the application using Purchasing, XXX responsibility.
2. Navigate to Setup Purchasing Document Types Document Types definition page.


3. The Document Type Layout field shows the current XML Publisher template for this type of
5
Build Your XML Reports

document. For example, the template for Purchase Order Standard document type is
Standard Purchase Order Stylesheet with Logo.

Download Template
The next step is to view the template details. In order to do this, users would need to
navigate to the XML Publisher Administration pages.
1. Change responsibility to XML Publisher Administrator;
2. Navigate to Home Template Search Template page.
3. Search for the desired template: Standard Purchase Order Stylesheet with Logo

4. In the Search Results, click the link in the Name field to view the Template Details Page.
Note: Pay attention to the Type field, which determines the template format. The template
type can be XSL-FO or RTF, and both necessitate different tools and methods in order to
modify them. See: section Modify Template for more information.
Example: The type of template for standard Purchase Order is XSL-FO type in.xsl format.


6
Build Your XML Reports

5. The Localized Templates region displays the current template information.
6. The Preview icon enables you to preview the file.
Note: Boilerplate texts are language specific, so please select the appropriate localized
template for your language. In this document, American English is used in the
examples.


7. Click Download to download the template file to your local drive.



7
Build Your XML Reports

Modify Template
Any requirements to change the existing format or layout of the current document entails
modifications of the template files. You would modify the template based on your
business requirement. You would use varied modification methods to update the
template, depending on the template type. XSL-FO templates follow different
modification methods as compared to RTF templates. The majority of the PDF printing
capabilities in Oracle Advanced Procurement use the XSL-FO templates as their default.
Therefore, this document focuses mainly on the XSL-FO template, while providing some
information on the RTF template.
Beside template modification, it may be necessary to update the Data Definition or
change the program code in order to generate a new XML data structure. This involves
changes to the application code and is beyond the purview of this document.
XSL-FO Information
1. Overview
A majority of the XML Publishing usages within Oracle Advanced Procurement are for
the XSL-FO type templates. These templates consist of files with the .xsl extension.
XSL-FO stands for Extensible Style-sheet Language Formatting Objects. It is an XML-
based markup language for formatting XML data that is most often used to generate PDF
documents. XSL-FO is part of XSL (Extensible Style-sheet Language), a set of W3C
standards that are designed for the transformation and formatting of XML data.


2. XSL-FO Type Template Structure
(1) Attribute Set
An XSL-FO Type template may contain several Attribute Sets, which are collections of
attributes and their corresponding values that help to define the display format.
8
Build Your XML Reports


(2) Layout-master-set
The Layout-master-set section enables users to define the Report Output Page Layout by
specifying the page size, margins etc. Each Layout-master-set may contain multiple simple
page masters, and each of them is defined with the statement fo:simple-page-master
master-name=<Your Master Name>; usually, there is a page sequence master to
indicate the page sequence, with the statement fo:page-sequence-master master-
name="< Your Master Name >" .
For example, the XSL-FO template Standard Purchase Order Stylesheet with Logo defines
a Layout-master-set for the cover page as follows:
<fo:simple-page-master master-name="cover-page" margin-top="0.5in" margin-bottom="0.0in"
margin-left="0.71in" margin-right="0.71in" page-width="8.5in" page-height="11in" >
<fo:region-before region-name="xsl-region-header" extent="0.5in"/>
<fo:region-body region-name="xsl-region-body" margin-top="0.5in" margin-
bottom="1.0in"/>
<fo:region-after region-name="xsl-region-footer" extent="0.66in"/>
</fo:simple-page-master>
The template Standard Purchase Order Stylesheet with Logo contains three simple page
masters:
Cover-page
Details-first-page
Details-remaining-page
And a page-sequence master:
Details-page
9
Build Your XML Reports


(3) Block Element for Data Output
XSL-FO output data is usually nested within a Block element indicated as <fo: block>. The
Block element itself is nested within the Flow Element (<fo: flow>) which in turn is nested
within the Page-Sequence Element (<fo: page-sequence>). Thus "Blocks" of content
"Flow" into "Pages" of the output media. For example:
<fo:page-sequence master-reference="page1">
o <fo:flow flow-name="flow1">
<fo:block>

</fo:block>
<fo:block>

</fo:block>

o </fo:flow>
o <fo:flow flow-name="flow2">

o </fo:flow>
o
</fo:page-sequence>

Usually, blocks are organized into tables depending on the layout requirement. For
example in the Standard Purchase Order Stylesheet with Logo, the table contains many
table-cells with different blocks of PO data.



(4) Variables
The XSL-FO template supports the use of variables that can be defined to get values from
the runtime XML Data during the display of the output.
10
Build Your XML Reports

An example for the definition and usage of variables in Standard Purchase Order
Stylesheet with Logo is as follows:
a. <xsl:variable name="ROOT_OBJ" select="(/PO_DATA)"/>
In the statement a variable ROOT_OBJ is defined to store the entire data element
PO_DATA, which is retrieved during runtime from the actual XML data of current
purchase order.
b. <xsl:variable name="BOILER_PLATE_MESSAGES_OBJ"
select= ($ROOT_OBJ/MESSAGE/MESSAGE_ROW)"/>
In the above statement a variable BOILER_PLATE_MESSAGES_OBJ is defined, the
variable retrieves the entire element data of MESSAGE_ROW from the actual XML
data of current purchase order during runtime. Also note that the variable ROOT_OBJ
defined earlier is also used in this definition.
c. <fo:table-cell xsl:use-attribute-sets="table_cell_heading4">
<fo:block xsl:use-attribute-sets="table_head">

<xsl:value-of select="$BOILER_PLATE_MESSAGES_OBJ[MESSAGE='PO_FO_TYPE'][1]/TEXT"/>
In the example, previously defined variables are now used to get TEXT from the
PO_FO_TYPE element of XML Data at runtime and display it in a table cell as defined
by attribute set table_cell_heading4.
d. In the XML Data generated from the purchase order at runtime, the value of the TEXT
for PO_FO_TYPE is Type. Based on its definition and usage, the variable is displayed
in the PDF as follows:


Thus, in this example we see that field names can be generated during runtime using
variables. This is commonly used in purchase order printing.
Basic XSL-FO terminology has been introduced here. For more information on XSL-FO,
please refer to the W3C website and the W3School.

11
Build Your XML Reports

Modifying XSL-FO Templates
The following sections illustrate some of the most commonly requested modifications to
the XSL-FO templates in order to customize the report output.

1. Suppressing Displayed fields
If users need to suppress a field from the current layout, this is easily achieved by either
removing or commenting out the display statement from the template. This is illustrated
with the example of the Standard Purchase Order Style sheet with Logo template. Use
the following steps to suppress a field from the current layout:
Locate the section of code in the template that displays the field. Then either remove or
comment it with the latter being the preferred method, because it can be undone easily.
Pay close attention to the following points:
1) Similar fields may be used in multiple places in the template. You need to ensure that you
have identified the correct set of statements to modify. You may need to refer to the Data
Dictionary or work with your System Administrator, if you need more information on the
set of statements to modify.
2) If the field displayed is in a table cell, then you would need to remove or comment out all
the related statements for the table cells and its corresponding table cell header.
Otherwise, empty table cells or headers will be displayed in the printed document.
3) It is recommended to use the comment out method by using the appropriate comment
flags (<!-- -->), rather than removing the statements, because this gives you the flexibility
to undo the changes at a later point in time.
4) It is also recommended to document the changes being made in the template with the
use of suitable comments and annotations, as this helps in maintaining a clear audit
history of the updates/changes.


12
Build Your XML Reports

The original template:



Updated template:


The result: The Transportation field column is no longer displayed. You may adjust the width
of other columns to align the table correctly for pagination, margins, etc.
Both statement for transportation field and the table
header of transportation field are commented
Statement for transportation
field in a table cell
Statement for the table header of transportation field in
a table cell
13
Build Your XML Reports



Note:
The updated layout template will not impact the PDF printing for approved purchase
orders, unless the purchase order is updated and re-approved. It means if the purchase
order has been approved, the printed document will continue to use the original layout
template (the template when the Purchase Order was approved).

2. Adding new Attributes
If you need to add a new attribute to the printed document, ensure that the field exists in
current XML Schema by searching the Data Dictionary.
1) Attribute Does Not Exist in Data Dictionary: If the attribute is not available in the Data
Dictionary, it is not contained in the XML schema. In this scenario, please refer to Note
1505737.1, which discusses the use of a custom hook to achieve this. Please note that this
code hook is currently available for purchase order documents only.
2) Attribute Exists in Data Dictionary: If the attribute is in the XML schema, it can be added
to the output document by modifying the template. In the example of the Standard
Purchase Order Style sheet with Logo add an attribute that provides the Total of the
Purchase Order to the header information table, after the Supplier No. and before the
Payment Terms column. This can be achieved in the following way:
a. Add a column in the table for the new attribute and adjust the column width as
needed.

14
Build Your XML Reports


b. From the Data Dictionary, determine the element name in the XML Schema that would
map to the new attribute Total in the user interface. For our example it would be the
element TOTAL_AMOUNT.
c. Add table cells for Total between the Supplier No. and Payment Terms columns.

d. Add the table header for this new attribute. The current template uses predefined text
from the XML Data. The element for of the TOTAL_AMOUNT header is already
defined as follows:

For consistency, the new attribute can be added to the template in the following manner:


e. This would result in:


15
Build Your XML Reports

f. If one does not prefer the predefined (seeded) table header and would like to
update it, a simple way is to directly change the header in the template.
For example if the header should be Total Amount: instead of Total, change the
template as follows:



This would result in:



3. Modifying Display Formats
If you need to change the display format of a field, such as font, color, size, etc, this can
be easily achieved by making the change in the template. For example, in the Standard
Purchase Order Style-sheet with Logo if you would like to change the Currency
information in the Note to a bold format, this is done as follows.
Currently the Currency Information in the Note displays as follows:





16
Build Your XML Reports

And the corresponding statement in the template is:

If you wish to change the font and the text size and color, add the following statement:

This results in:
Another method to accomplish this is to define an attribute-set to contain these attributes
with their values, and use the attribute-set for the block, in the same way as some existing
table cells in the template.
<fo:block xsl:use-attribute-sets="form_data2">

4. Adding Images
Sometimes, you may want to add an image to the output document, such as the logo of
the buying company. To do this, the template can be modified:
1) Preparation of the Image Source
Upload the image to be used to a location that is accessible to the application and note the
URL. If its an image that will not change, we suggest uploading the image file into the Oracle
EBS Application Server by the administrator at a location accessible to the application server.
For example: \Application\Resources\Images\UserDefined\logo.jpg
2) Add the statement in the template to display the image.
For example in the Standard Purchase Order Style-sheet with Logo, one could make the
change highlighted below:

17
Build Your XML Reports


The result:


5. Adding a Watermark or background image
The image needs to be uploaded as in the previous scenario / example (Adding Images
section) and the appropriate reference made in the template using the background-
image attribute. Other attributes may be modified to change the layout, position etc.
background-image="http://la0625.oracleads.com/OA_MEDIA/FNDSSCORP.gif"/



18
Build Your XML Reports

6. Inserting a New Page
Sometimes you may need to add a page to the printed document such as a cover page or
insert blank pages between pages. This can be achieved by changing the template to either
add a page to display information already contained in the XML Schema or to just display
static information.
The steps to add a page to the document are:
1) Add an element for the new page in the layout-master-set section of the template.
2) Add page-sequence section for the new page.
3) Add sub-elements for the page-sequence to display the desired information.

For example in the Standard Purchase Order Style-sheet with Logo document, if you
want to add an empty page with a logo after the detail page, follow these steps:
(1) Add this code in the sub-element of <fo:layout-master-set> section:
<fo:simple-page-master master-name="empty-page">
<fo:region-before/>
<fo:region-body background-position-horizontal="50%" background-position-
vertical="50%" background-image="http://la0624.oracleads.com/OA_MEDIA/FNDSSCORP.gif"/>
<fo:region-after/>
</fo:simple-page-master>


(2) Add this code after the detail page sequence, as a sub-element of </fo:root>
<fo:page-sequence master-reference="empty-page">
</fo:page-sequence>

Changed Template:


19
Build Your XML Reports

The result: An empty page appears after the detail page with a logo and a watermark.

The template Standard Purchase Order Style-sheet with Logo has a cover page. If we
want to display the cover page using a condition such as the purchase order with contract
terms or not, this can be achieved with the following changes:


The code for the condition that displays the cover page:
<xsl:if test="$CON_TERMS_EXIST_FLAG">
<fo:page-sequence master-reference="cover-page">
Definition of
cover page
The empty page
20
Build Your XML Reports

If the purchase order has contract terms, the printed document will display a cover page
as seen in the figure:


7. New Layout for some Document Types
Sometimes you may need to define different layouts for some Document Types. For
example, for a standard purchase order, users may want to hide all the clause titles when
printing the Contract PDF. This is done by defining different layout templates for
different document types.
1) Create a New Template or Copy from an Existing One
a. Login to the application using the XML Publisher Administrator responsibility.
b. Navigate to Home Templates.
c. Click Create in the Templates page to create a new template or use the Duplicate
option if the new template is similar to an existing template.


21
Build Your XML Reports

d. Edit information for the new template.
e. Click Apply button when you are done with the updates.

2) Modify The Template File:
In the example you may want to hide section titles of Contract Terms when printing
Contract Terms for standard purchase orders. This can be achieved by either
removing or commenting out the corresponding sentences in the XSL template.


3) Associate The New Template to Document Type(s)
a. Login to the application using the Purchasing responsibility for your operating unit.
b. Setup Purchasing Document Types
c. Find the document type(s) that need to use this new layout for Contract Printing
d. Associate the new layout template to the document type(s).
Use Standard Purchase Order as an example:

Hide these sentences to
hide all section titles of
Contract Terms for PDF
Printing
22
Build Your XML Reports



Assign the new layout template for it, and click Apply button.

4) Validate the Result
Generate an output document with the new and old templates. Notice that for the
Standard Purchase Order document type, the section titles are hidden for contract terms.


Standard Purchase Order:
All section titles are hidden.
23
Build Your XML Reports


Whereas for any other Document Type, the section titles are displayed if there are
contract terms in the document.



5) Special Layout for Some Documents
You can define different document layouts for different document records, even though
the documents are of the same document type. For example, for purchase orders that
have simple contract terms, it is not necessary to print the section titles when printing
contract terms; the section titles are required for other purchase orders.
As noted in the previous steps, the document layout is associated with each document
type. Therefore, another approach is used to enable different layout templates for
specific documents.
A print action initiates a concurrent request to generate the XML data and the layout. The
concurrent request parameters determine the layout templates to be used, that can be
selected while manually running the requests. So it is possible to select different layout
templates, and manually run the concurrent requests to generate the report.
a. Create a New Template: Create a new template with hidden section titles.
b. Using the Standard Purchase Order document type, you can print purchase orders
with simple contract terms (the section titles will be hidden if the contract terms
are printed).
c. Run the Request:..Click Submit a New Request for the PO Output for
Communication concurrent request, and select an appropriate Operating Unit.
Other document types:
Section titles are remained
24
Build Your XML Reports



Define the parameters for the PO Output for Communication concurrent request. Notice
that the Purchase Order Layout and Contract Terms Layout parameter- values can be
modified from the default values. Select the appropriate templates for the Purchase
Order Layout and Contract Terms Layout, enter other parameter values and then submit
the request. For this example, we select New Contract Terms Layout as Contract Terms
Layout to hide section titles.



When the concurrent request is submitted successfully, the purchase order with contract
terms is printed with hidden section titles in the Contract Terms region.


Select the appropriate
Contract Terms
Layout template
25
Build Your XML Reports



Similarly, if you wish to print a Purchase Order with Contract Terms using a different
layout, simply create a new template and use the newly created template when
submitting the concurrent request. Though this method requires some manual steps and
may not be as convenient as the View PDF action which ensures that the system
generates the Purchase Order report, using the concurrent request method is fairly
simple and flexible.

8. Retaining the Text Format as Entered By User
Users may opt to retain the format of the text as it was entered by them while creating a
document in the printed version. For example, in an RFQ, one would like to maintain the
description information with multiple white spaces and linefeeds as entered by users in the
printed document:


All section titles are hidden.
26
Build Your XML Reports


However, using the seeded templates, the printed document displays as a formatted
output. Notice that though the linefeeds are retained, the consecutive white spaces in the
text are merged.



In order to preserve the white spaces in the printed document, the corresponding
template needs to be modified. The method to get current templates for Sourcing
documents is similar to that of purchase orders. If no updates have been made, the default
seeded layout for RFQ / RFI / Auction document is the Sourcing Style Sheet.
To achieve this, add a declaration for the Description block to preserve the linefeeds and
white spaces and prevent the merging of the white spaces.
linefeed-treatment="preserve" white-space-collapse="false" white-space-treatment="preserve"

Seeded Layout Template:
Linefeeds are preserved, but
consecutive white spaces
are merged into one.
27
Build Your XML Reports




Additional information can be obtained from the W3 School.
When the template is updated, any subsequent printing would get you the following result:






New Template:
All linefeeds and white
spaces are preserved.
28
Build Your XML Reports

Modifying RTF Templates
As mentioned before, besides XSL-FO templates, Oracle Advanced Procurement also
supports the use of RTF templates that are easier to maintain and modify. Users can edit
RTF templates using Microsoft Word with Business Intelligence Publisher (BIP)
Template Builder for Microsoft Word Add-in. More information can be found in Oracle
XML Publisher Report Designers Guide.

A frequently used scenario is Reporting for Requisitions that uses either Plain Text
Reports or XML Publisher Reports using RTF Templates. Requisition Report Printing has
similar requirements as have other Procurement documents. Users would like to modify
the default report layouts, add and remove fields etc. The Plain Text Report uses the
classic Oracle Reports without the use of layout templates, thus users cannot modify the
report format. Changes to the report format are possible using the XML Publisher
Reports. Users can modify the associated RTF templates. These reports are generated
using a concurrent request and as seen in earlier sections, users can associate their own
custom templates to the document type and then generate the reports. For additional
details on creating these reports please refer to: Defining Concurrent Programs and
Requests.

In the example exercise here you can create a Printed Requisitions Report (XML) and
hide the parameters page that is created by the default template. The layout template file is
in the RTF format, therefore it is easier to modify. You can simply remove the Report
Parameters table from the template using any RTF document editor.

Parameters Page:











Remove this table
29
Build Your XML Reports

Requisition Information Page:



When you complete the updates to the template, the modified template is used to create
the Requisition Reports as follows:



If users need to make the new layout the default layout template, you can achieve this by
updating the template that is associated with the program Printed Requisitions Report
(XML). Navigate to Concurrent Programs using the System Administration (not System
Administrator) responsibility. Use the Onsite Setting tab to define the new default layout
template and click Apply. From this point onwards, the newly defined layout template is
The Parameter Page
disappeared.
30
Build Your XML Reports

the default whenever the Printed Requisitions Report (XML) program is executed to
create a requisition report.

Additional references for working with and modifying RTF templates are available:
Oracle E-Business Suite Reporting
Oracle XML Publisher Report Designer's Guide
Update & Preview Modified Template
We looked at some examples for modifying templates. The last step to complete the
process of building your XML Reports is to update the template with the modified
Template file. To do that:
1. Login to the application using the XML Publisher Administrator responsibility.
2. Navigate to Home > Templates and search for the Template to be updated.
3. Go to the Template Detail Information page and in the Localized Templates region click on the
Update button. Click Download to download the current template file as a backup, if you have
not already done so.

31
Build Your XML Reports

4. In the Update File page, browse for the new template file in your local drive, and then click
Apply. You will observe that the file in Localized Template has been updated to the new one.



5. Click Preview to preview the changes. A sample Preview Data is required to be defined in the
Data Definition for the Preview function to work.





32
Build Your XML Reports

Conclusion
Using the XML Reports capabilities, we can identify the templates associated with the
reports you wish to modify, make the necessary changes, and then update the template in
the system. This whitepaper was intended to provide a quick start to building custom
XML Reports using scenarios, and covering typical business usages for various documents
in Oracle Advanced Procurement such as purchase orders, agreements,
RFQ/RFI/Auctions, requisitions, etc. The use cases were based on actual customer
requirements. The use cases discussed were basic in nature and yet they catered to varied
and diverse requirements. More complex requirements would need advanced knowledge
of XML and XSL-FO and an in-depth familiarity of the Oracle Advanced Procurement
data model. The Data Dictionary in the Appendix section of this whitepaper can assist
you with further information on the Oracle Advanced Procurement data model.


References
Some additional references:
Oracle XML Publisher Administration and Developer's Guide
Oracle XML Publisher Report Designer's Guide
Oracle Purchasing Document Printing and Communication
Frequently Asked Questions POXPOPDF: PO Output for Communication

33
Build Your XML Reports

Appendix A: Data Dictionary
SYSTEM CODES DESCRIPTION
HEADER
General
SEGMENT1 Purchase Order Number
REVISION_NUM PO Revision Number
PRINT_COUNT Number of times the document was printed
CUSTOMER_NUM Customer Number
LANGUAGE Supplier Site Language
VENDOR_ORDER_NUM Supplier Order Number
DOCUMENT_TYPE Document Type
TIMEZONE Timezone
VENDOR_NUM Supplier Number
DOCUMENT_NAME Document Type + PO Number + Revision
Terms
ACCEPTANCE_REQUIRED_FLAG Flag indicating acceptance required
ACCEPTANCE_DUE_DATE Acceptance Due Date
SHIP_VIA Ship Via
FOB FOB
FREIGHT_TERMS Freight Terms
PAYMENT_TERMS Payment Terms
PAY_ON_CODE Pay On Code
SHIPPING_CONTROL Shipping Control
NOTE_TO_VENDOR Note to Vendor
Amounts
AMOUNT_LIMIT Agreement Amount Limit
MIN_RELEASE_AMOUNT Minimum Release Amount
PRICE_UPDATE_TOLERANCE Price Update Tolerance
TOTAL_AMOUNT PO Total Amount
AMOUNT_AGREED Amount Agreed
Contacts
DOCUMENT_BUYER_FIRST_NAME Buyer's First Name
DOCUMENT_BUYER_LAST_NAME Buyer's Last Name
DOCUMENT_BUYER_TITLE Buyer's Title
BUYER_CONTACT_EMAIL Buyer's Email
BUYER_CONTACT_PHONE Buyer Contact Phone
BUYER_CONTACT_FAX Buyer Contact Fax
VENDOR_CONTACT_FIRST_NAME Supplier Contact's First Name
VENDOR_CONTACT_LAST_NAME Supplier Contact's Last Name
VENDOR_CONTACT_TITLE Supplier Contact's Title
VENDOR_CONTACT_AREA_CODE Supplier Contact Phone Area Code
VENDOR_CONTACT_PHONE Supplier Contact's Phone Number
Addresses
SHIP_TO_LOCATION_NAME Ship To Location Name
34
Build Your XML Reports

SHIP_TO_ADDRESS_LINE1 Ship To Address Line 1
SHIP_TO_ADDRESS_LINE2 Ship To Address Line 2
SHIP_TO_ADDRESS_LINE3 Ship To Address Line 3
SHIP_TO_ADDRESS_LINE4 Ship To Address Line 4
SHIP_TO_ADDRESS_INFO Ship To Address Info
SHIP_TO_COUNTRY Ship To Country
BILL_TO_LOCATION_NAME Bill To Location Name
BILL_TO_ADDRESS_LINE1 Bill To Address Line 1
BILL_TO_ADDRESS_LINE2 Bill To Address Line 2
BILL_TO_ADDRESS_LINE3 Bill To Address Line 3
BILL_TO_ADDRESS_LINE4 Bill To Address Line 4
BILL_TO_ADDRESS_INFO Bill To Address Info
BILL_TO_COUNTRY Bill To Country
VENDOR_NAME Supplier Name
VENDOR_ADDRESS_LINE1 Supplier Address Line 1
VENDOR_ADDRESS_LINE2 Supplier Address Line 2
VENDOR_ADDRESS_LINE3 Supplier Address Line 3
VENDOR_ADDRESS_LINE4 Supplier Address Line 4
VENDOR_CITY Supplier City
VENDOR_STATE Supplier State
VENDOR_POSTAL_CODE Supplier Zip Code
VENDOR_COUNTRY Supplier Country
VENDOR_AREA_CODE Supplier Phone Area Code
VENDOR_PHONE Supplier Phone
VENDOR_FAX Supplier Fax Number
OU_NAME Operating Unit Name
OU_ADDR1 Operating Unit Address Line 1
OU_ADDR2 Operating Unit Address Line 2
OU_ADDR3 Operating Unit Address Line 3
OU_TOWN_CITY Operating Unit Town/ City
OU_REGION2 Operating Unit Region
OU_POSTALCODE Operating Unit Zip Code
OU_COUNTRY Operating Unit Country
BUYER_ADDRESS_LINE1 Buyer Address Line 1
BUYER_ADDRESS_LINE2 Buyer Address Line 2
BUYER_ADDRESS_LINE3 Buyer Address Line 3
BUYER_ADDRESS_LINE4 Buyer Address Line 4
BUYER_CITY_STATE_ZIP Buyer City, State and Zip Code
BUYER_COUNTRY Buyer Country
LE_NAME Legal Entity Name
LE_ADDR1 Legal Entity Address Line 1
LE_ADDR2 Legal Entity Address Line 2
LE_ADDR3 Legal Entity Address Line 3
LE_TOWN_CITY Legal Entity Town/ City
LE_STATE_PROVINCE Legal Entity State/ Province
LE_POSTALCODE Legal Entity Zip Code
LE_COUNTRY Legal Entity Country
35
Build Your XML Reports

Flags & Codes
TYPE_LOOKUP_CODE Document Subtype
CURRENCY_CODE Currency Code
CANCEL_FLAG Flag indicating PO cancellation
APPROVED_FLAG Indicates whether the purchase order is approved or not
CLOSED_CODE Describes the closure status of the document
USSGL_TRANSACTION_CODE United States standard general ledger transaction code.
USER_HOLD_FLAG Indicates whether the purchase order is on hold or not
APPROVAL_REQUIRED_FLAG Indicates whether a quote or RFQ requires approval
FROZEN_FLAG Indicates whether the document is frozen or not
STATUS_LOOKUP_CODE PO Status
FROM_TYPE_LOOKUP_CODE Document type of the document used to auto create another document
AUTHORIZATION_STATUS Authorization status of the purchase order
GLOBAL_AGREEMENT_FLAG Global Agreement Flag
ENCUMBRANCE_REQUIRED_FLAG Indicates whether the document is to be encumbered or not
CONTERMS_EXIST_FLAG Flag Indicating Contract Terms Existence
PENDING_SIGNATURE_FLAG Pending Signature Flag
SIGNED Specifies if the document was ever signed or not
DOCUMENT_CREATION_METHOD Method in which the document got created - Auto create, enter PO , etc...
Dates and Text Fields
CLOSED_DATE Date the document was closed
FIRM_DATE Date from which the purchase order is firmed
APPROVED_DATE PO Approval Date
START_DATE_ACTIVE Key Flexfield Start date
END_DATE_ACTIVE Key Flexfield End date
CANCEL_DATE Cancellation Date
CREATION_DATE PO Creation Date
REVISED_DATE Revision Date
START_DATE Agreement Start Date
END_DATE Agreement End Date
GOVERNMENT_CONTEXT USSGL descriptive flexfield context column
COMMENTS Purchase Order Description
NOTE_TO_AUTHORIZER Note to approver
NOTE_TO_RECEIVER Note to receiver
CHANGE_SUMMARY Change Summary
COVER_MESSAGE Cover Page Message
AMMENDMENT_MESSAGE Amendment Message in the cover page
HEADER_SHORT_TEXT Short text attachment at header
ATTRIBUTE_CATEGORY Header Descriptive FlexField Attribute Category
ATTRIBUTE1 - 15 Header Descriptive FlexField Attribute 1 - 15
LINES
General
LINE_NUM Line number
ITEM_NUM Item number of the item
ITEM_REVISION Item revision
ITEM_DESCRIPTION Item description
36
Build Your XML Reports

VENDOR_PRODUCT_NUM Supplier item number
LINE_TYPE "Holds the line type like AMOUNT, GOODS, RATE and FIXED PRICE."
JOB_NAME Job name for Temp Labor purchase basis line types.
CONTRACTOR_FIRST_NAME First name of the contingent worker
CONTRACTOR_LAST_NAME Last name of the contingent worker
SEGMENT1 Purchase Order Number
TYPE_1099 1099 type for the purchase order line
CONTRACT_NUM Contract number referenced on the line
QUOTE_VENDOR_QUOTE_NUMBER Supplier quotation number.
QUOTATION_LINE Supplier quotation line number.
AUCTION_DISPLAY_NUMBER Reference to the negotiation number in sourcing
AUCTION_LINE_NUMBER Reference to the negotiation line number in Sourcing
BID_NUMBER Reference to the bid number in sourcing
BID_LINE_NUMBER Reference to the Bid line in sourcing
SUPPLIER_REF_NUMBER Tracking code for a specific configuration of an item.
QC_GRADE OPM: Stores the quality control grade wanted on the purchase order line
BASE_UOM OPM: Stores the base unit of measure (UOM) for the item ordered
SECONDARY_UOM OPM: Stores the dual unit of measure for the item ordered
SECONDARY_UNIT_OF_MEASURE OPM: Secondary unit of measure for the quantity ordered
PREFERRED_GRADE OPM: Preferred quality grade for the item ordered
TAX_NAME Tax code applying to the line
Quantity, Price and Amounts
UNIT_PRICE Unit Price
QUANTITY Quantity
QUANTITY_COMMITTED Quantity Committed
MIN_RELEASE_AMOUNT Minimum Release Amount
MIN_ORDER_QUANTITY Minimum Order Quantity
MAX_ORDER_QUANTITY Maximum Order Quantity
QTY_RCV_TOLERANCE Quantity received tolerance percentage
MARKET_PRICE Market Price
COMMITTED_AMOUNT Blankets only: Amount agreed for an agreement line
NOT_TO_EXCEED_PRICE Blankets or planned POs only: Price limit that you cannot exceed on a release shipment
LIST_PRICE_PER_UNIT List price for the item on the line
AMOUNT Budget Amount for temp labor standard PO lines
LINE_AMOUNT Total line amount for a given line. The amount is null for canceled lines.
CANCELED_AMOUNT Canceled line amount for a canceled line.
BASE_UNIT_PRICE Base Unit Price
TOTAL_LINE_AMOUNT Total line amount for a given line. Used only for canceled lines.
BASE_QTY OPM: Ordered quantity converted from transaction UOM to base UOM
SECONDARY_QUANTITY OPM: Secondary Quantity ordered on the line
SECONDARY_QTY OPM: Converted quantity from BASE UOM to DUAL UOM for the item ordered
Flags & Codes
CANCEL_FLAG Indicates whether the line is cancelled or not
GLOBAL_AGREEMENT_FLAG Global Agreement Flag
OVER_TOLERANCE_ERROR_FLAG Indicates whether or not you reject receipts exceeding the tolerance
UNORDERED_FLAG Indicates whether or not the line was created from unordered receipts
CLOSED_FLAG Indicates whether the line is closed or not
37
Build Your XML Reports

USER_HOLD_FLAG Flag Indicating User Hold
TAXABLE_FLAG Indicates whether the document line is taxable or not
ALLOW_PRICE_OVERRIDE_FLAG
Blankets or planned POs only: Indicates whether you can change the price on release
shipments
UNIT_MEAS_LOOKUP_CODE Unit of measure for the quantity ordered
ORDER_TYPE_LOOKUP_CODE Value basis of the line
PRICE_TYPE_LOOKUP_CODE Pricing Type
CLOSED_CODE Describes closure status of the line
PRICE_BREAK_LOOKUP_CODE
Blankets only: Pricing scheme for the price breaks of this line (cumulative or non-
cumulative).
USSGL_TRANSACTION_CODE United States standard general ledger transaction code.
TRANSACTION_REASON_CODE Transaction Reason Code
UN_NUMBER Contains the UN number
UN_DESC Holds the description of UN_NUMBER
HAZARD_CLASS Hazard class name
MATCHING_BASIS Matching basis of the line type
PURCHASE_BASIS Purchase basis of the line type
Dates & Text Fields
CANCEL_DATE Cancellation date
CLOSED_DATE Date the line is closed
EXPIRATION_DATE
Blanket, quotation, or RFQ only: Date after which the item on this catalog line can no
longer be ordered
RETROACTIVE_DATE Timestamp of a retroactive price change
START_DATE Assignment start Date for the contingent worker
NOTE_TO_VENDOR Short note to supplier
ATTRIBUTE_CATEGORY Descriptive flexfield segment
ATTRIBUTE1 - 15 Line Descriptive FlexField Attribute 1 - 15
CANCEL_REASON Cancellation reason provided by employee
GOVERNMENT_CONTEXT USSGL descriptive flexfield context column
LINE_SHORT_TEXT Short Text Attachment at Line level
SHIPMENTS
General
SHIPMENT_NUM Shipment line number
SHIPMENT_TYPE Type of the shipment
SUPPLIER_ORDER_LINE_NUMBER Used to store a supplier change request
CUSTOMER_PO_NUM Customer PO Number
CUSTOMER_PO_LINE_NUM Customer PO Line Number
CUSTOMER_PO_SHIPMENT_NUM Customer PO Shipment Number
TAX_NAME Tax code for the shipment
Quantity, Price and Amounts
QUANTITY Quantity ordered or break quantity for blanket purchase orders, RFQs and quotations
QUANTITY_CANCELLED Quantity cancelled
QUANTITY_RECEIVED Quantity received until today
QUANTITY_ACCEPTED Quantity accepted after inspection, up until today
QUANTITY_REJECTED Quantity rejected after inspection, up until today
QUANTITY_BILLED Quantity invoiced by Oracle Payables, up until today
38
Build Your XML Reports

QUANTITY_SHIPPED Quantity shipped
SECONDARY_QUANTITY OPM:Secondary Quantity ordered
SECONDARY_QUANTITY_RECEIVED Quantity in secondary unit of measure received until today
SECONDARY_QUANTITY_ACCEPTED Quantity accepted in secondary unit of measure after inspection, up until today
SECONDARY_QUANTITY_REJECTED Quantity rejected in secondary unit of measure after inspection, up until today
SECONDARY_QUANTITY_CANCELLED Quantity cancelled in secondary unit of measure after inspection, up until today
AMOUNT Stores the amount on the shipments for service lines
AMOUNT_RECEIVED Stores the amount received for service lines
AMOUNT_BILLED Stores the amount billed for service lines
AMOUNT_CANCELLED Amount cancelled for service lines
AMOUNT_ACCEPTED Amount Accepted for service lines
AMOUNT_REJECTED Amount rejected for service lines
TOTAL_SHIPMENT_AMOUNT Total Shipment Amount
PRICE_OVERRIDE Order shipment price or break price for blanket purchase orders, RFQs, and quotations
PRICE_DISCOUNT Discount percentage for price break (applies to RFQs and quotations only)
QTY_RCV_TOLERANCE Maximum over-receipt tolerance percentage
DAYS_EARLY_RECEIPT_ALLOWED Maximum acceptable number of days items can be received early
DAYS_LATE_RECEIPT_ALLOWED Maximum acceptable number of days items can be received late
INVOICE_CLOSE_TOLERANCE
Percentage tolerance within which a shipment is automatically closed for invoicing when
billed
RECEIVE_CLOSE_TOLERANCE Percentage tolerance within which a shipment is automatically closed for receiving
LEAD_TIME RFQ and Quotations Only: Lead time for the price break
Flags & Codes
CANCEL_FLAG Indicates whether the shipment is cancelled or not
ACCRUE_ON_RECEIPT_FLAG Indicates whether items are accrued upon receipt
TAXABLE_FLAG Indicates whether the shipment is taxable
CONSIGNED_FLAG Indicates shipment is consigned
INSPECTION_REQUIRED_FLAG Indicates whether shipment must be inspected before the invoice is paid
RECEIPT_REQUIRED_FLAG Indicates whether shipment must be received before the invoice is paid
ENCUMBERED_FLAG Indicates whether the shipment is encumbered or not
APPROVED_FLAG Indicates whether the shipment is approved
DROP_SHIP_FLAG Indicates whether the Shipment has a backing Sales Order Line.
TAX_USER_OVERRIDE_FLAG Indicator of whether someone overrode the default tax
CALCULATE_TAX_FLAG Indicator of whether tax needs to be calculated
VMI_FLAG Indicates VMI shipment line with value = 'Y'
FOB_LOOKUP_CODE Type of free-on-board terms for the shipment
QTY_RCV_EXCEPTION_CODE Describes what action is taken when the quantity received tolerance is exceeded
USSGL_TRANSACTION_CODE United States standard general ledger transaction code
FREIGHT_TERMS_LOOKUP_CODE Type of freight terms for the RFQ or quotation shipment
UNIT_MEAS_LOOKUP_CODE Price break quantity unit of measure
SHIP_VIA_LOOKUP_CODE Type of carrier for the RFQ or quotation shipment
COUNTRY_OF_ORIGIN_CODE Country of manufacture for this shipment
MATCH_OPTION
Indicator of whether the invoice for the shipment should be matched to the purchase
order or the receipt
SECONDARY_UNIT_OF_MEASURE OPM: Secondary Unit of measure for the ordered item
LEAD_TIME_UNIT Unit of measure for the lead time
PREFERRED_GRADE Preferred quality grade for the ordered item
39
Build Your XML Reports

SHIPPING_METHOD Shipping Method
VALUE_BASIS Value basis of the line location
MATCHING_BASIS Matching basis of the line location
Dates & Text Fields
DUE_DATE Promised Date/ Need By Date
CANCEL_DATE Cancellation date
START_DATE Effective date of the price break (applies to RFQs and quotations only)
END_DATE Expiration date of the price break (applies to RFQs and quotations only)
CLOSED_DATE Date the shipment is closed
RETROACTIVE_DATE Column used to store the date of a retroactive price change
ENCUMBERED_DATE Date of encumbrance for the shipment
NEED_BY_DATE Need-by date for the shipment schedule
PROMISED_DATE Supplier promised delivery date
SALES_ORDER_UPDATE_DATE Date/time when any referenced data elements on the backing Sales Order Line is updated
SHIPPING_INSTRUCTIONS Shipping Instructions
PACKING_INSTRUCTIONS Packing Instructions
CUSTOMER_PRODUCT_DESC Customer Product Description
ATTRIBUTE_CATEGORY DFF Attribute Category
ATTRIBUTE1 - 15 DFF Attribute 1 to 15
LINE_LOC_SHORT_TEXT Short text attachment at shipment
GOVERNMENT_CONTEXT USSGL descriptive flexfield context column
CLOSED_REASON Why the shipment is closed
CANCEL_REASON Cancellation reason provided by the employee
CHANGE_PROMISED_DATE_REASON Reason for changing the promised-by date
NOTE_TO_RECEIVER
Shipment level Note to receiver, which holds note to receiver info coming from Req
lines.
Addresses
SHIP_TO_LOCATION_NAME Ship To Location Name
SHIP_TO_ADDRESS_LINE1 Ship To Address Line 1
SHIP_TO_ADDRESS_LINE2 Ship To Address Line 2
SHIP_TO_ADDRESS_LINE3 Ship To Address Line 3
SHIP_TO_ADDRESS_LINE4 Ship To Address Line 4
SHIP_TO_ADDRESS_INFO Ship To Address Info
SHIP_TO_COUNTRY Ship To Country
SHIP_CONT_PHONE Ship to Contact Phone
SHIP_CONT_EMAIL Ship to Contact Email
ULTIMATE_DELIVER_CONT_PHONE Deliver to Contact Phone
ULTIMATE_DELIVER_CONT_EMAIL Deliver to Contact Email
SHIP_CONT_NAME Ship to Contact Name
ULTIMATE_DELIVER_CONT_NAME Deliver to Contact Name
SHIP_CUST_NAME Ship to Customer Name
SHIP_CUST_LOCATION Ship to Customer Location
ULTIMATE_DELIVER_CUST_NAME Deliver to Customer Name
ULTIMATE_DELIVER_CUST_LOCATION Deliver to Customer Location
SHIP_TO_CONTACT_FAX Ship to Contact Fax
ULTIMATE_DELIVER_TO_CONT_NAME Deliver to Contact Name
ULTIMATE_DELIVER_TO_CONT_FAX Deliver to Contact Fax
40
Build Your XML Reports

DISTRIBUTIONS
DISTRIBUTION_NUM Distribution Number
DISTRIBUTION_TYPE Distribution Type
EXPENDITURE_TYPE Expenditure Type (Project Attribute)
WIP_OPERATION_SEQ_NUM WIP Operation Sequence Number
WIP_RESOURCE_SEQ_NUM WIP Resource Sequence Number
DESTINATION_SUBINVENTORY Destination Subinventory
REQ_HEADER_REFERENCE_NUM Requisition Number Reference
REQ_LINE_REFERENCE_NUM Requisition Line Number Reference
CHARGE_ACCOUNT Change Account
AMOUNT_ORDERED Amount Ordered
AMOUNT_DELIVERED Amount Delivered
AMOUNT_CANCELLED Amount cancelled
AMOUNT_BILLED Amount Billed
QUANTITY_ORDERED Quantity Ordered
QUANTITY_DELIVERED Quantity Delivered
QUANTITY_BILLED Quantity Billed
QUANTITY_CANCELLED Quantity Cancelled
RECOVERABLE_TAX Recoverable Tax
NONRECOVERABLE_TAX Non Recoverable Tax
RECOVERY_RATE Recovery Date
EXPENDITURE_ITEM_DATE Expenditure Item Date (Project Attribute)
DESTINATION_TYPE_CODE Destination Type Code
USSGL_TRANSACTION_CODE United States standard general ledger transaction code
GOVERNMENT_CONTEXT USSGL descriptive flexfield context column
PROJECT_ACCOUNTING_CONTEXT Project Accounting Context
ATTRIBUTE_CATEGORY Attribute Category
ATTRIBUTE1 - 15 DFF Attribute 1 to 15
FULL_NAME Requester's Full Name
WORK_TELEPHONE Requester's Work Phone
EMAIL_ADDRESS Requester's Email Address
REQUESTER_DELIVER_TITLE Requester's Title
REQUESTER_DELIVER_FIRST_NAME Requester's First Name
REQUESTER_DELIVER_LAST_NAME Requester's Last Name
PRICE BREAKS
SHIPMENT_NUMBER Price Break Line Number
QUANTITY Quantity
START_DATE Start Date
END_DATE End Date
PRICE_OVERRIDE Price Discount Percentage
SHIP_TO_LOCATION_NAME Ship To Location Name
SHIP_TO_ADDRESS_LINE1 Ship To Address Line 1
SHIP_TO_ADDRESS_LINE2 Ship To Address Line 2
SHIP_TO_ADDRESS_LINE3 Ship To Address Line 3
SHIP_TO_ADDRESS_LINE4 Ship To Address Line 4
SHIP_TO_ADDRESS_INFO Ship To Address Info
SHIP_TO_COUNTRY Ship To Country
41
Build Your XML Reports

ATTRIBUTE1 -15 DFF Attribute 1 to 15
PRICE DIFFERENTIAL
NUMBER Price Differential Line Number
PRICE_TYPE Price Type
PRICE_TYPE_DESCRIPTION Price Type Description
MULTIPLIER Multiplier
ENABLED_FLAG Enabled Flag


42



Build Your XML Reports
May 2014
Author: Yong Cao
Contributing Authors: Barbara Fox, Sandeep
Sood, Kanishka Ghosh, Pratima Mahtani
Oracle Corporation
World Headquarters
500 Oracle Parkway
Redwood Shores, CA 94065
U.S.A.
Worldwide Inquiries:
Phone: +1.650.506.7000
Fax: +1.650.506.7200
oracle.com
Copyright 2014, Oracle and/or its affiliates. All rights reserved.
This document is provided for information purposes only, and the contents hereof are subject to change without notice. This
document is not warranted to be error-free, nor subject to any other warranties or conditions, whether expressed orally or implied in
law, including implied warranties and conditions of merchantability or fitness for a particular purpose. We specifically disclaim any
liability with respect to this document, and no contractual obligations are formed either directly or indirectly by this document. This
document may not be reproduced or transmitted in any form or by any means, electronic or mechanical, for any purpose, without our
prior written permission.
Oracle and J ava are registered trademarks of Oracle and/or its affiliates. Other names may be trademarks of their respective owners.
Intel and Intel Xeon are trademarks or registered trademarks of Intel Corporation. All SPARC trademarks are used under license and
are trademarks or registered trademarks of SPARC International, Inc. AMD, Opteron, the AMD logo, and the AMD Opteron logo are
trademarks or registered trademarks of Advanced Micro Devices. UNIX is a registered trademark of The Open Group. 0114

Você também pode gostar