<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5010259590027019782</id><updated>2012-01-16T23:19:16.130-08:00</updated><category term='Mobile'/><category term='XML Publisher'/><category term='XML'/><category term='MSCA'/><category term='iRep'/><category term='SQL'/><category term='Database'/><category term='WebADI'/><title type='text'>Oracle Application</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://ora-apps.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5010259590027019782/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://ora-apps.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Neeraj Srivastava</name><uri>http://www.blogger.com/profile/15569140745802625486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_mKQhuTMPcMk/R2Y1jsHfeLI/AAAAAAAAAEQ/gu4gXAsjA-k/S220/Chalk_Charcoal_new.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>17</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5010259590027019782.post-8103433834360252747</id><published>2008-03-21T10:27:00.001-07:00</published><updated>2008-03-22T07:57:33.151-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XML Publisher'/><title type='text'>Converting RDF Reports to XM Publisher</title><content type='html'>One of my friends was working on converting 11.5.10 RDF reports into XML Publisher reports. Not a very strange requirement, considering everyone now wants to move to XML Publisher.  What however, was strange was the approach followed. Instead of following Approach 1 they opted for Approach 2, listed below.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Approach 1 &lt;/span&gt;: Convert the output format of Standard report to XML, create a new RTF template and register a Data Definition and Template with XML Publisher.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Approach 2 &lt;/span&gt;: Convert the RDF report into XML Report and use this XML as a Data Template. Create a new XML Publisher report Data Definition with this XML as Data Template and create a new Template.&lt;br /&gt;&lt;br /&gt;The problem with Approach 2 is that Oracle provides no tool to convert Reports 6i into XML Report and any other supporting APIs to handle associated PL/SQL logic embedded into RDF.&lt;br /&gt;&lt;br /&gt;   Enter Reports 9i (or higher) and XML Publisher 5.6.3. These two combinations of Oracle products provide tools to first convert RDF report into XML report and associated XML Publisher API to handle PL/SQL logic.&lt;br /&gt;&lt;br /&gt;This is how it works.&lt;br /&gt;-----------------------------&lt;br /&gt;Oracle Reports contains both Data Model (logic) and Layout (presentation) in a single file.  In XML Publisher they are stored separately. Therefore migration involves a 2 step process.&lt;br /&gt;&lt;br /&gt;Step 1  RDF to XML format report :  Oracle Reports 9i (or higher) comes with utility "rwconverter.exe".  Use either Reports Designer or "rwconverter.exe" command line to convert RDF into XML format report.&lt;br /&gt;&lt;br /&gt;From the Designer :&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_mKQhuTMPcMk/R-PxJC4zGXI/AAAAAAAAAIA/vd6RSdDne1I/s1600-h/rep.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_mKQhuTMPcMk/R-PxJC4zGXI/AAAAAAAAAIA/vd6RSdDne1I/s320/rep.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5180249134102419826" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The following command executes “rwconverter.exe” utility, taking the source report,&lt;br /&gt;XXTEST.rdf and converting it to an RDF-XML format that can be consumed by the&lt;br /&gt;XML Publisher conversion utility.&lt;br /&gt;&lt;br /&gt;Note the dtype must be specified as "xmlfile".&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;Oracle_home&gt;\BIN&gt;rwconverter batch=yes source= c:\XXTEST.rdf&lt;br /&gt;dest= c:\XXTEST.xml dtype=xmlfile overwrite=yes&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This would create an RDF-XML file, with all the PL/SQL logic and presentation logic.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Step 2.1 Data Model Migration : &lt;/span&gt;&lt;br /&gt;  XML Publisher 5.6.3 provides a Java API Package "&lt;span style="font-weight:bold;"&gt;oracle.apps.xdo.rdfparser&lt;/span&gt;". This package has "&lt;span style="font-weight:bold;"&gt;DataTemplateGenerator&lt;/span&gt;" class that creates a DataTemplate from the XML report file. If report has triggers this will generate '.pks' and '.pkb' file for that trigger which needs to be compiled into the Database&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Example&lt;/span&gt;&lt;br /&gt;javaw.exe oracle.apps.xdo.rdfparser.DataTemplateGenerator c:\XXTEST.xml&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Output Files:&lt;/span&gt;&lt;br /&gt;PL/SQL Package : XXTESTS.pls&lt;br /&gt;PL/SQL Body      : XXTESTB.pls&lt;br /&gt;DataTemplate      : XXTEST_template.xml&lt;br /&gt;&lt;br /&gt;Here is a sample XML output file. Notice the "&lt;span style="font-weight:bold;"&gt;defaultPackage&lt;/span&gt;", "&lt;span style="font-weight:bold;"&gt;dataTrigger&lt;/span&gt;" etc that contain reference to PL/SQL API.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8" ?&amp;gt;&lt;br /&gt;&amp;lt;dataTemplate name="XXTEST" defaultPackage="XXTEST" version="1.0"&amp;gt;&lt;br /&gt;&amp;lt;properties&amp;gt;&lt;br /&gt;&amp;lt;property name="xml_tag_case" value="upper" /&amp;gt;&lt;br /&gt;&amp;lt;/properties&amp;gt;&lt;br /&gt;&amp;lt;parameters&amp;gt;&lt;br /&gt;&amp;lt;parameter name="P_CONC_REQ_ID" dataType = "number"&amp;gt;&amp;lt;/parameter&amp;gt;&lt;br /&gt;&amp;lt;/parameters&amp;gt;&lt;br /&gt;&amp;lt;lexicals&amp;gt;&lt;br /&gt;&amp;lt;/lexicals&amp;gt;&lt;br /&gt;&amp;lt;dataQuery&amp;gt;&lt;br /&gt;&amp;lt;sqlStatement name="Q_Main"&amp;gt;&lt;br /&gt;&amp;lt;![CDATA[&lt;br /&gt;SELECT   user_name, user_id&lt;br /&gt;FROM xxuser&lt;br /&gt;]]&amp;gt;&lt;br /&gt;&amp;lt;/sqlStatement&amp;gt;&amp;lt;/dataQuery&amp;gt;&lt;br /&gt;&amp;lt;dataTrigger name="beforeReportTrigger" source="XXTEST.beforereport"/&amp;gt;&lt;br /&gt;&amp;lt;dataStructure&amp;gt;&lt;br /&gt;&amp;lt;group name="G_1" dataType="varchar2" source="Q_Main"&amp;gt;&lt;br /&gt;&amp;lt;element name="user_name" dataType="varchar2" value="SEGMENT_VALUE"/&amp;gt;&lt;br /&gt;&amp;lt;element name="user_id" dataType="number" value="VALUE_SET"/&amp;gt;&lt;br /&gt;&amp;lt;/group&amp;gt;&lt;br /&gt;&amp;lt;/group&amp;gt;&lt;br /&gt;&amp;lt;element name="CP_segment_name" dataType="varchar2" value="XXTEST.CP_segment_name_p"/&amp;gt;&lt;br /&gt;&amp;lt;element name="CF_RUN_DATE"  dataType="USDate" value="XXTEST.cf_run_dateformula()"/&amp;gt;&lt;br /&gt;&amp;lt;element name="CF_NAME"  dataType="varchar2" value="XXTEST.cf_nameformula()"/&amp;gt;&lt;br /&gt;&amp;lt;/dataStructure&amp;gt;&lt;br /&gt;&amp;lt;dataTrigger name="afterReportTrigger" source="XXTEST.afterreport()"/&amp;gt;&lt;br /&gt;&amp;lt;/dataTemplate&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Step 2.2 Data Model Migration :&lt;/span&gt;&lt;br /&gt;  XML Publisher 5.6.3 API Package "&lt;span style="font-weight:bold;"&gt;oracle.apps.xdo.rdfparser&lt;/span&gt;" has "&lt;span style="font-weight:bold;"&gt;RTFTemplateGenerator"&lt;/span&gt; class to migrate the Oracle Reports layout to an XML Publisher RTF template. Because there is no support for PL/SQL in an RTF Template,  the generator writes all Oracle Report format trigger code to the log file. This must later be implemented as XSL code&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Example&lt;/span&gt;&lt;br /&gt;javaw.exe oracle.apps.xdo.rdfparser.RTFTemplateGenerator c:\XXTEST.xml&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Output Files:&lt;/span&gt;&lt;br /&gt;RTF Template  : C:\XXTEST.rtf&lt;br /&gt;Log File      : C:\XXTEST.log&lt;br /&gt;&lt;br /&gt;That’s it we are done with the conversion. &lt;br /&gt; Now that we have converted the RDF into XML publisher report, we simply need to use the Data Template and RTF to register with the XML Publisher.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Step 3&lt;/span&gt; :  Register a new Data Definition with XML Publisher Responsibility, with XML file generated as part of Step 2.2 as Data Template. Register the RTF template for the DD.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;Step 4 &lt;/span&gt;: Create a Concurrent Report  Program with Report output as XML and executable as "&lt;span style="font-weight:bold;"&gt;XDODTEXE&lt;/span&gt;".  XDODTEXE is XML Publisher Data Template Executable Engine, which is a Java Concurrent Program. &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_mKQhuTMPcMk/R-PxQS4zGYI/AAAAAAAAAII/BKumhE0ENIU/s1600-h/rep2.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_mKQhuTMPcMk/R-PxQS4zGYI/AAAAAAAAAII/BKumhE0ENIU/s320/rep2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5180249258656471426" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;That’s it.  We have traced the steps involved to convert an existing RDF into an XML Publisher Report for 11.5.10.&lt;br /&gt; &lt;br /&gt; I will write more on XML Publisher in my subsequent blogs. &lt;br /&gt;&lt;br /&gt;Till then keep reading my blog and feel free to write your comments.&lt;br /&gt;&lt;br /&gt;Cheers &lt;br /&gt;~Neeraj&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5010259590027019782-8103433834360252747?l=ora-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ora-apps.blogspot.com/feeds/8103433834360252747/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5010259590027019782&amp;postID=8103433834360252747&amp;isPopup=true' title='18 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5010259590027019782/posts/default/8103433834360252747'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5010259590027019782/posts/default/8103433834360252747'/><link rel='alternate' type='text/html' href='http://ora-apps.blogspot.com/2008/03/conerting-rdf-reports-to-xm-publisher.html' title='Converting RDF Reports to XM Publisher'/><author><name>Neeraj Srivastava</name><uri>http://www.blogger.com/profile/15569140745802625486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_mKQhuTMPcMk/R2Y1jsHfeLI/AAAAAAAAAEQ/gu4gXAsjA-k/S220/Chalk_Charcoal_new.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_mKQhuTMPcMk/R-PxJC4zGXI/AAAAAAAAAIA/vd6RSdDne1I/s72-c/rep.JPG' height='72' width='72'/><thr:total>18</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5010259590027019782.post-8732210433974458431</id><published>2008-02-27T23:02:00.000-08:00</published><updated>2008-02-28T01:48:20.089-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Database'/><category scheme='http://www.blogger.com/atom/ns#' term='XML'/><title type='text'>Multilevel XML To Multiple Table</title><content type='html'>Recently I was working on an implementation project and was faced with situation where client wanted some inbound data populate standard tables. Fair enough, but the problem was that the data provided was in XML format and they wanted a PL/SQL solution for it.&lt;br /&gt;  After some research I managed to find out lot of APIs provided by Oracle (and there are plenty of them). Oracle 9i has  &lt;a href="http://download-west.oracle.com/docs/cd/B19306_01/appdev.102/b14258/d_xmlsav.htm#i1049436"&gt;DBMS_XMLSave&lt;/a&gt;&lt;br /&gt;  while Oracle 10g has &lt;a href="http://download-west.oracle.com/docs/cd/B19306_01/appdev.102/b14258/d_xmlstr.htm#i1008591"&gt;DBMS_XMLStore &lt;/a&gt;. &lt;br /&gt;   DBMS_XMLStore is the preferred package as it is written in C and linked into the Oracle kernel. It also uses the SAX parser. As a result DBMS_XMLStore has better performance characteristics. &lt;br /&gt;&lt;br /&gt;   Both of these APIs rest over &lt;a href="http://download-west.oracle.com/docs/cd/B19306_01/appdev.102/b14258/t_xml.htm#i1007914"&gt; XMLtype &lt;/a&gt; object. XMLType is a system-defined opaque type for handling XML data and has predefined member functions on it to extract XML nodes and fragments. You can create columns of XMLType and insert XML documents into it. You can also generate XML documents as XMLType instances dynamically.&lt;br /&gt; &lt;br /&gt; Now, most samples that I found on internet handled inserting into a single table at a time (will show that later as well). However, what I needed was &lt;br /&gt;1) Read XML file from a file known location.&lt;br /&gt;2) Read the structure into a master-detail (parent-child) kind of relation. &lt;br /&gt;&lt;br /&gt; Based on my learnings, here is what it looks like : &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;-- In   -- Flat Multi Level XML&lt;br /&gt;-- Out  -- Two Tables&lt;br /&gt;&lt;br /&gt;----------------------------------&lt;br /&gt;&lt;strong&gt;TABLES&lt;/strong&gt;&lt;br /&gt;----------------------------------&lt;br /&gt;CREATE TABLE emp_t (&lt;br /&gt;  EMP_ID NUMBER,&lt;br /&gt;  NAME VARCHAR2(10) )&lt;br /&gt;/&lt;br /&gt;CREATE TABLE emp_details (&lt;br /&gt;  EMP_ID NUMBER,&lt;br /&gt;  DESCRIPTION VARCHAR2(100),&lt;br /&gt;  B_DATE DATE)&lt;br /&gt;/&lt;br /&gt;----------------------------------&lt;br /&gt;&lt;strong&gt;XML&lt;/strong&gt;&lt;br /&gt;----------------------------------&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&amp;lt;EMP_ROWS&amp;gt;&lt;br /&gt;&amp;lt;EMP&amp;gt;&lt;br /&gt;  &amp;lt;EMP_ID&amp;gt;1&amp;lt;/EMP_ID&amp;gt;&lt;br /&gt;  &amp;lt;NAME&amp;gt;A&amp;lt;/NAME&amp;gt;&lt;br /&gt;  &amp;lt;LINE_ROWS&amp;gt;&lt;br /&gt;     &amp;lt;LINE&amp;gt;&lt;br /&gt;   &amp;lt;EMP_ID&amp;gt;1&amp;lt;/EMP_ID&amp;gt;&lt;br /&gt;   &amp;lt;B_DATE&amp;gt;01-JUN-2005&amp;lt;/B_DATE&amp;gt;&lt;br /&gt;   &amp;lt;DESCRIPTION&amp;gt;DESCRIPTION1&amp;lt;/DESCRIPTION&amp;gt;&lt;br /&gt;     &amp;lt;/LINE&amp;gt;&lt;br /&gt;     &amp;lt;LINE&amp;gt;&lt;br /&gt;   &amp;lt;EMP_ID&amp;gt;1&amp;lt;/EMP_ID&amp;gt;&lt;br /&gt;   &amp;lt;B_DATE&amp;gt;01-JUN-2005&amp;lt;/B_DATE&amp;gt;&lt;br /&gt;   &amp;lt;DESCRIPTION&amp;gt;DESCRIPTION2&amp;lt;/DESCRIPTION&amp;gt;&lt;br /&gt;     &amp;lt;/LINE&amp;gt;&lt;br /&gt;     &amp;lt;LINE&amp;gt;&lt;br /&gt;   &amp;lt;EMP_ID&amp;gt;1&amp;lt;/EMP_ID&amp;gt;&lt;br /&gt;   &amp;lt;B_DATE&amp;gt;01-JUN-2005&amp;lt;/B_DATE&amp;gt;&lt;br /&gt;   &amp;lt;DESCRIPTION&amp;gt;DESCRIPTION3&amp;lt;/DESCRIPTION&amp;gt;&lt;br /&gt;     &amp;lt;/LINE&amp;gt;&lt;br /&gt;     &amp;lt;LINE&amp;gt;&lt;br /&gt;   &amp;lt;EMP_ID&amp;gt;1&amp;lt;/EMP_ID&amp;gt;&lt;br /&gt;   &amp;lt;B_DATE&amp;gt;01-JUN-2005&amp;lt;/B_DATE&amp;gt;&lt;br /&gt;   &amp;lt;DESCRIPTION&amp;gt;DESCRIPTIONDESCRIPTION4&amp;lt;/DESCRIPTION&amp;gt;&lt;br /&gt;     &amp;lt;/LINE&amp;gt;&lt;br /&gt;  &amp;lt;/LINE_ROWS&amp;gt;&lt;br /&gt;&amp;lt;/EMP&amp;gt;&lt;br /&gt;&amp;lt;EMP&amp;gt;&lt;br /&gt;  &amp;lt;EMP_ID&amp;gt;2&amp;lt;/EMP_ID&amp;gt;&lt;br /&gt;  &amp;lt;NAME&amp;gt;B&amp;lt;/NAME&amp;gt;&lt;br /&gt;  &amp;lt;LINE_ROWS&amp;gt;&lt;br /&gt;     &amp;lt;LINE&amp;gt;&lt;br /&gt;   &amp;lt;EMP_ID&amp;gt;2&amp;lt;/EMP_ID&amp;gt;&lt;br /&gt;   &amp;lt;B_DATE&amp;gt;01-JUN-2005&amp;lt;/B_DATE&amp;gt;&lt;br /&gt;  &amp;lt;DESCRIPTION&amp;gt;DESCRIPTION5&amp;lt;/DESCRIPTION&amp;gt;&lt;br /&gt;     &amp;lt;/LINE&amp;gt;&lt;br /&gt;     &amp;lt;LINE&amp;gt;&lt;br /&gt;   &amp;lt;EMP_ID&amp;gt;2&amp;lt;/EMP_ID&amp;gt;&lt;br /&gt;   &amp;lt;B_DATE&amp;gt;01-JUN-2005&amp;lt;/B_DATE&amp;gt;&lt;br /&gt;   &amp;lt;DESCRIPTION&amp;gt;DESCRIPTION6&amp;lt;/DESCRIPTION&amp;gt;&lt;br /&gt;     &amp;lt;/LINE&amp;gt;&lt;br /&gt;   &amp;lt;LINE&amp;gt;&lt;br /&gt;   &amp;lt;EMP_ID&amp;gt;2&amp;lt;/EMP_ID&amp;gt;&lt;br /&gt;   &amp;lt;B_DATE&amp;gt;01-JUN-2005&amp;lt;/B_DATE&amp;gt;&lt;br /&gt;   &amp;lt;DESCRIPTION&amp;gt;DESCRIPTION7&amp;lt;/DESCRIPTION&amp;gt;&lt;br /&gt;     &amp;lt;/LINE&amp;gt;&lt;br /&gt;     &amp;lt;LINE&amp;gt;&lt;br /&gt;   &amp;lt;EMP_ID&amp;gt;2&amp;lt;/EMP_ID&amp;gt;&lt;br /&gt;   &amp;lt;B_DATE&amp;gt;01-JUN-2005&amp;lt;/B_DATE&amp;gt;&lt;br /&gt;   &amp;lt;DESCRIPTION&amp;gt;DESCRIPTION8&amp;lt;/DESCRIPTION&amp;gt;&lt;br /&gt;     &amp;lt;/LINE&amp;gt;&lt;br /&gt;  &amp;lt;/LINE_ROWS&amp;gt;&lt;br /&gt;&amp;lt;/EMP&amp;gt;&lt;br /&gt;&amp;lt;/EMP_ROWS&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;----------------------------------&lt;br /&gt;&lt;strong&gt;Sample Code&lt;/strong&gt;&lt;br /&gt;----------------------------------&lt;br /&gt;&lt;br /&gt;DECLARE&lt;br /&gt;&lt;br /&gt;v_xml_clob CLOB;&lt;br /&gt;-- Oracle directory object and filename&lt;br /&gt;-- Read the XML file into BFILE&lt;br /&gt;&lt;br /&gt;v_xml_file BFILE := BFILENAME('USR_TMP', 'emp_data_levels.xml');&lt;br /&gt;&lt;br /&gt;-- offsets refer to start of files &lt;br /&gt;v_dst_offset number := 1;&lt;br /&gt;v_src_offset number := 1;&lt;br /&gt;&lt;br /&gt;v_lang_ctx number := DBMS_LOB.DEFAULT_LANG_CTX;&lt;br /&gt;v_warning number;&lt;br /&gt;&lt;br /&gt;v_xml XMLtype;&lt;br /&gt;&lt;br /&gt;v_rows NUMBER;&lt;br /&gt;&lt;br /&gt;BEGIN&lt;br /&gt;-- Open xml file on OS &lt;br /&gt;dbms_lob.open(v_xml_file,dbms_lob.lob_readonly);&lt;br /&gt;&lt;br /&gt;-- necessary for correct handling of LOB locator &lt;br /&gt;dbms_lob.createtemporary(v_xml_clob, true, dbms_lob.session); &lt;br /&gt;&lt;br /&gt;-- xml file to clob &lt;br /&gt;dbms_lob.loadCLOBfromfile(&lt;br /&gt;dest_lob =&gt; v_xml_clob&lt;br /&gt;, src_bfile =&gt; v_xml_file&lt;br /&gt;, amount =&gt; dbms_lob.getlength(v_xml_file)&lt;br /&gt;, dest_offset =&gt; v_dst_offset&lt;br /&gt;, src_offset =&gt; v_src_offset&lt;br /&gt;, bfile_csid =&gt; dbms_lob.default_csid&lt;br /&gt;, lang_context =&gt; v_lang_ctx&lt;br /&gt;, warning =&gt; v_warning&lt;br /&gt;);&lt;br /&gt;&lt;br /&gt;-- close xml file&lt;br /&gt;dbms_lob.close(v_xml_file); &lt;br /&gt;&lt;br /&gt;-- clob to XMLtype&lt;br /&gt;v_xml := XMLtype(v_xml_clob);&lt;br /&gt;&lt;br /&gt;------------------------------------&lt;br /&gt;-- XML Processing Begins &lt;br /&gt;------------------------------------&lt;br /&gt;  INSERT&lt;br /&gt;   WHEN tab = 'emp_t'&lt;br /&gt;   THEN&lt;br /&gt;  INTO  emp_t&lt;br /&gt;VALUES  (id, name)&lt;br /&gt;   WHEN tab = 'emp_details'&lt;br /&gt;   THEN&lt;br /&gt;  INTO  emp_details&lt;br /&gt;VALUES  (id, b_date, description)&lt;br /&gt;WITH T AS (select XMLtype(v_xml_clob) xml from dual)&lt;br /&gt;SELECT 'emp_t' tab, &lt;br /&gt;           to_number(extractvalue (t2.column_value, 'EMP/EMP_ID')) id,&lt;br /&gt;           extractvalue (t2.column_value, 'EMP/NAME') name, &lt;br /&gt;           null b_date, &lt;br /&gt;           null description&lt;br /&gt;     FROM t t, TABLE (xmlsequence (t.xml.extract ('EMP_ROWS/EMP'))) t2&lt;br /&gt;   UNION ALL&lt;br /&gt;   SELECT 'emp_details', &lt;br /&gt;           to_number(extractvalue (t2.column_value, 'LINE/EMP_ID')) emp_id,&lt;br /&gt;           null,&lt;br /&gt;           extractvalue (t2.column_value, 'LINE/DESCRIPTION') description,&lt;br /&gt;           to_date(extractvalue (t2.column_value, 'LINE/B_DATE'),'DD-MON-YYYY') b_date&lt;br /&gt;     FROM t t,&lt;br /&gt;          TABLE (xmlsequence (t.xml.extract ('EMP_ROWS/EMP/LINE_ROWS/LINE'))) t2;&lt;br /&gt;&lt;br /&gt;-- commit ;&lt;br /&gt;EXCEPTION&lt;br /&gt; WHEN OTHERS THEN&lt;br /&gt;  dbms_output.put_line ( 'Exception' || SQLERRM );&lt;br /&gt;END;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;Code is mostly self explanatory.  Read the physical file, create a temporary CLOB, load CLOB from file and then crete a new XMLType. Using XMLType and XPath notation, read the  XML and insert into the required columns.&lt;br /&gt; That's it !!!&lt;br /&gt;&lt;br /&gt; Looks like a really simple solution and it really really works too..&lt;br /&gt;&lt;br /&gt; We will more later. Till then ..&lt;br /&gt;&lt;br /&gt;Cheers &lt;br /&gt;~Neeraj&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5010259590027019782-8732210433974458431?l=ora-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ora-apps.blogspot.com/feeds/8732210433974458431/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5010259590027019782&amp;postID=8732210433974458431&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5010259590027019782/posts/default/8732210433974458431'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5010259590027019782/posts/default/8732210433974458431'/><link rel='alternate' type='text/html' href='http://ora-apps.blogspot.com/2008/02/multilevel-xml-to-multiple-table.html' title='Multilevel XML To Multiple Table'/><author><name>Neeraj Srivastava</name><uri>http://www.blogger.com/profile/15569140745802625486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_mKQhuTMPcMk/R2Y1jsHfeLI/AAAAAAAAAEQ/gu4gXAsjA-k/S220/Chalk_Charcoal_new.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5010259590027019782.post-3718551789775392263</id><published>2008-02-26T01:14:00.001-08:00</published><updated>2008-02-26T01:35:13.714-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XML Publisher'/><title type='text'>XML Publisher Features : PDF Merge</title><content type='html'>In the previous article I addressed merging different XMLs and Templates (RTF to XSL) to generate PDF output. &lt;br /&gt;&lt;br /&gt;   In this article I will show a similar capability provide for merging existing PDF outputs and additional manipulation that can be achieved. &lt;br /&gt;  XML Publisher PDF merging allows us to merge different unprotected PDF documents (PDF docs not password protected) and add Page Number, Text and Image Watermarks.If both text and image watermark are used, only image watermark is applied.&lt;br /&gt;  PDFs can be from totally different sources having totally different layouts.&lt;br /&gt; &lt;br /&gt;  This capability is provided by "PDFDocMerger" class of "oracle.apps.xdo.common.pdf.util" package.&lt;br /&gt;&lt;br /&gt;Again we need to write a simple Java class that reads different PDF file streams and merges them using PDFDocMerger class. It also allows for adding watermark and page numbering.&lt;br /&gt;  Page numbering capability allows us to specify Page Numbering coordinates,  starting page number and physical page from where numbering should begin.&lt;br /&gt;&lt;br /&gt;Sample Code :&lt;br /&gt;------------------------&lt;br /&gt;&lt;br /&gt;import oracle.apps.xdo.common.pdf.util.PDFDocMerger;&lt;br /&gt;import java.io.*;&lt;br /&gt;&lt;br /&gt;public class PdfMerger&lt;br /&gt;{&lt;br /&gt;    public static void main(String[] args)&lt;br /&gt;    {&lt;br /&gt;       System.out.println("Started") ;&lt;br /&gt;       try&lt;br /&gt;       {&lt;br /&gt;         FileInputStream[] fis = new FileInputStream [3] ;&lt;br /&gt;         FileInputStream fis1 = new FileInputStream("C:\\temp\\xpub\\pdf\\Input1.pdf");&lt;br /&gt;         FileInputStream fis2 = new FileInputStream("C:\\temp\\xpub\\pdf\\Input2.pdf");&lt;br /&gt;         FileInputStream fis3 = new FileInputStream("C:\\temp\\xpub\\pdf\\Input3.pdf");&lt;br /&gt;         fis[0]   = fis1 ;   fis[1]   = fis2 ;  fis[2] = fis3 ;&lt;br /&gt;&lt;br /&gt;         FileOutputStream fos1 = new FileOutputStream ("C:\\temp\\xpub\\pdf\\PdfMerger1.pdf") ;&lt;br /&gt;&lt;br /&gt;  // 1.Text Watermark&lt;br /&gt;         System.out.println("1 BEGIN") ;&lt;br /&gt;         PDFDocMerger pdfDocMrgr = new PDFDocMerger(fis,fos1);&lt;br /&gt;&lt;br /&gt;         // Adding Page Numbering&lt;br /&gt;         // Calling setPageNumberCoordinates() method is necessary to set Page Numbering&lt;br /&gt;         // setPageNumberFontInfo : the default font"(Helvetica, 8)" is used.&lt;br /&gt;         // setPageNumberValue :  the default initial vaulue "(1, 1)" is used.&lt;br /&gt;&lt;br /&gt;         pdfDocMrgr.setPageNumberCoordinates(300, 20);&lt;br /&gt;         pdfDocMrgr.setPageNumberFontInfo("Courier", 10);&lt;br /&gt;         pdfDocMrgr.setPageNumberValue(3, 2); // Start from what number, start from which page&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;   // Add Text Watermark&lt;br /&gt;         // Can also use setTextDefaultWatermark(String) without these detailed setting&lt;br /&gt;         pdfDocMrgr.setTextWatermark("TEXT WM", 200f, 200f); //set text and place&lt;br /&gt;         pdfDocMrgr.setTextWatermarkAngle(80); //set angle&lt;br /&gt;         pdfDocMrgr.setTextWatermarkColor(0.3f, 0.3f, 1.0f); // set RGB Color&lt;br /&gt;&lt;br /&gt;/* Commented code for Image watermark. &lt;br /&gt;// Add Image Watermark, Fit to Size&lt;br /&gt;         FileInputStream imgStream = new FileInputStream("C:\\temp\\xpub\\pdf\\oralogo.gif");&lt;br /&gt;         float[] rct = {10f, 10f, -1f, -1f}; // fit to size .. no stretch -1,-1&lt;br /&gt;         //float[] rct = {100f, 100f, 400f, 400f}; // Stretch&lt;br /&gt;         pdfDocMrgr1.setImageWatermark(imgStream, rct);&lt;br /&gt;&lt;br /&gt;*/&lt;br /&gt;         // Merge PDF Documents and generates new PDF Document&lt;br /&gt;         pdfDocMrgr.mergePDFDocs();&lt;br /&gt;         pdfDocMrgr = null;&lt;br /&gt;         System.out.println("1 END") ;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;         fos1.close();&lt;br /&gt; &lt;br /&gt;       }//try&lt;br /&gt;       catch (Exception e)&lt;br /&gt;       {&lt;br /&gt;          System.out.println(" Exception " + e.getMessage()) ;&lt;br /&gt;          e.printStackTrace()  ;&lt;br /&gt;       }&lt;br /&gt;       System.out.println("End") ;&lt;br /&gt;       &lt;br /&gt;    }//main&lt;br /&gt;}//PdfMerger&lt;br /&gt;&lt;br /&gt;After we compile and run the code, we can see the output.&lt;br /&gt;&lt;br /&gt;Output : Page Numbering  + Text Watermark&lt;br /&gt;---------------------------------------------&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp1.blogger.com/_mKQhuTMPcMk/R8PcvSoX80I/AAAAAAAAAHw/QNXQUnXjIbg/s1600-h/pdfm1.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_mKQhuTMPcMk/R8PcvSoX80I/AAAAAAAAAHw/QNXQUnXjIbg/s320/pdfm1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5171219502164603714" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Output : Page Numbering  + Image Watermark&lt;br /&gt;---------------------------------------------&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp3.blogger.com/_mKQhuTMPcMk/R8Pc8yoX81I/AAAAAAAAAH4/gnfRNUTeDhE/s1600-h/pdfm2.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_mKQhuTMPcMk/R8Pc8yoX81I/AAAAAAAAAH4/gnfRNUTeDhE/s320/pdfm2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5171219734092837714" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; I will be writing more about XML Publisher in my subsequent articles. Till then...&lt;br /&gt;&lt;br /&gt;Cheers&lt;br /&gt;~Neeraj&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5010259590027019782-3718551789775392263?l=ora-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ora-apps.blogspot.com/feeds/3718551789775392263/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5010259590027019782&amp;postID=3718551789775392263&amp;isPopup=true' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5010259590027019782/posts/default/3718551789775392263'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5010259590027019782/posts/default/3718551789775392263'/><link rel='alternate' type='text/html' href='http://ora-apps.blogspot.com/2008/02/xml-publisher-features-pdf-merge.html' title='XML Publisher Features : PDF Merge'/><author><name>Neeraj Srivastava</name><uri>http://www.blogger.com/profile/15569140745802625486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_mKQhuTMPcMk/R2Y1jsHfeLI/AAAAAAAAAEQ/gu4gXAsjA-k/S220/Chalk_Charcoal_new.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_mKQhuTMPcMk/R8PcvSoX80I/AAAAAAAAAHw/QNXQUnXjIbg/s72-c/pdfm1.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5010259590027019782.post-5336931359986814107</id><published>2008-02-25T23:28:00.000-08:00</published><updated>2008-02-26T01:01:44.961-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XML Publisher'/><title type='text'>XML Publisher Features : XML Merge</title><content type='html'>In my previous articles I have written about generating PDF output using different approaches provided by XML Publisher. &lt;br /&gt;  In this article I will write about Merge feature provided by XML Publisher. FOUtility class provided as part of the "oracle.apps.xdo.template.fo.util" package allows us to merge different XML sources with single or multiple XSL or RTF templates to create a single PDF output.&lt;br /&gt;&lt;br /&gt;  This kind of feature is useful when we have multiple XML sources and want them to produce a single formatted output. Alternately, we can merge multiple templates to different XML data stream to generate output in one shot.&lt;br /&gt;&lt;br /&gt; To exploit this capability we need to write a Java class that uses XML publisher API.&lt;br /&gt;&lt;br /&gt;Steps Involved are similar to what we have already done in earlier Java+XML code.&lt;br /&gt;&lt;br /&gt;Approach 1 : Single Templates + Multiple Data XML&lt;br /&gt;----------------------------------------------------------&lt;br /&gt;&lt;br /&gt;1) Read RTF Template and convert it to XSL.&lt;br /&gt;2) Get XML data streams. Create FO strem of XML and XSL using "FOUtility.createFO" for each XML data.&lt;br /&gt;3) Merge these FOs using "FOUtility.mergeFOs" to generate a single merged FO stream.&lt;br /&gt;4) Generate PDF (or any other output) using  FOProcessor class.&lt;br /&gt;&lt;br /&gt;Sample Code &lt;br /&gt;--------------------------&lt;br /&gt;&lt;br /&gt;import oracle.apps.xdo.template.RTFProcessor;&lt;br /&gt;import oracle.apps.xdo.template.FOProcessor;&lt;br /&gt;import oracle.apps.xdo.template.fo.util.FOUtility;&lt;br /&gt;import oracle.apps.xdo.XDOException;&lt;br /&gt;&lt;br /&gt;import java.lang.reflect.Array;&lt;br /&gt;import java.io.FileInputStream;&lt;br /&gt;import java.io.FileNotFoundException;&lt;br /&gt;import java.io.FileOutputStream;&lt;br /&gt;import java.io.InputStream;&lt;br /&gt;&lt;br /&gt;public class XmlMerge&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; public static void main(String[] args)&lt;br /&gt; {&lt;br /&gt;   System.out.println("Started") ;&lt;br /&gt;   try&lt;br /&gt;   { //Convert RTF to XSL-FO&lt;br /&gt;     RTFProcessor rtfProcessor = new RTFProcessor("C:\\temp\\xpub\\rtf\\XMLPUBTEST.rtf"); //input template&lt;br /&gt;     rtfProcessor.setOutput("C:\\temp\\xpub\\rtf\\XmlMerge.xsl"); // output file&lt;br /&gt;     rtfProcessor.process();&lt;br /&gt;    &lt;br /&gt;     //Create XSL-FO objects for multiple XML input streams&lt;br /&gt;      InputStream[] in = new InputStream[2] ;&lt;br /&gt;      InputStream fFOStream = FOUtility.createFO("C:\\temp\\xpub\\rtf\\Emp1.xml", "C:\\temp\\xpub\\rtf\\XmlMerge.xsl");&lt;br /&gt;      InputStream sFOStream = FOUtility.createFO("C:\\temp\\xpub\\rtf\\Emp2.xml", "C:\\temp\\xpub\\rtf\\XmlMerge.xsl");&lt;br /&gt;      Array.set(in, 0, fFOStream);&lt;br /&gt;      Array.set(in, 1, sFOStream);&lt;br /&gt;&lt;br /&gt;      //Generate the merged FO &lt;br /&gt;      InputStream mergedFOStream = FOUtility.mergeFOs(in, null);&lt;br /&gt;&lt;br /&gt;      if (mergedFOStream == null) {&lt;br /&gt;          System.out.println("Merge failed.");&lt;br /&gt;      }&lt;br /&gt;      // Create FO Processor&lt;br /&gt;      FOProcessor processor = new FOProcessor();&lt;br /&gt;      processor.setData(mergedFOStream);&lt;br /&gt;      processor.setTemplate((String) null);&lt;br /&gt;      //FORMAT_EXCEL , FORMAT_HTML, FORMAT_RTF , FORMAT_PDF&lt;br /&gt;      //Set the format&lt;br /&gt;      processor.setOutput("C:\\temp\\xpub\\rtf\\XmlMerge.pdf");&lt;br /&gt;      processor.setOutputFormat(FOProcessor.FORMAT_PDF);&lt;br /&gt;      processor.generate();&lt;br /&gt;   }&lt;br /&gt;   catch (XDOException xe)&lt;br /&gt;   {&lt;br /&gt;      System.out.println(" XDOException  " + xe.getMessage()) ;&lt;br /&gt;   }&lt;br /&gt;   catch (Exception e)&lt;br /&gt;   {&lt;br /&gt;      System.out.println(" Exception " + e.getMessage()) ;&lt;br /&gt;   }&lt;br /&gt;   System.out.println("End") ;&lt;br /&gt; } //main&lt;br /&gt;} //XmlMerge&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Output &lt;br /&gt;-------------&lt;br /&gt;&lt;a href="http://bp0.blogger.com/_mKQhuTMPcMk/R8PT1CoX8yI/AAAAAAAAAHg/RnAb1C9-CgI/s1600-h/merge1.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_mKQhuTMPcMk/R8PT1CoX8yI/AAAAAAAAAHg/RnAb1C9-CgI/s320/merge1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5171209705344201506" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;/***********************************************************************/&lt;br /&gt;  &lt;br /&gt;Approach 2 : Different Templates + Multiple Data XML&lt;br /&gt;----------------------------------------------------------&lt;br /&gt;1) Read RTF templates and convert them to XSL.&lt;br /&gt;2) Creat an String array of XML and XSL file names identifying data and templates.&lt;br /&gt;3) Generate PDF (or any other output) using FOProcessor class.&lt;br /&gt;&lt;br /&gt;Sample Code &lt;br /&gt;--------------------------&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;import oracle.apps.xdo.template.RTFProcessor;&lt;br /&gt;import oracle.apps.xdo.template.FOProcessor;&lt;br /&gt;import oracle.apps.xdo.template.fo.util.FOUtility;&lt;br /&gt;import oracle.apps.xdo.XDOException;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;import java.io.FileInputStream;&lt;br /&gt;import java.io.FileNotFoundException;&lt;br /&gt;import java.io.FileOutputStream;&lt;br /&gt;import java.io.InputStream;&lt;br /&gt;&lt;br /&gt;// This approach takes different XML and XSL files&lt;br /&gt;&lt;br /&gt;public class XmlMerge1&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;  public static void main(String[] args)&lt;br /&gt; {&lt;br /&gt;   System.out.println("Started") ;&lt;br /&gt;   try&lt;br /&gt;   {  &lt;br /&gt;      //Create XSL-FO objects for multiple XML input streams&lt;br /&gt;   // This approach applies specific XSL Format to specific XML data files&lt;br /&gt;      String[] xmlInput = {"C:\\temp\\xpub\\rtf\\Emp1.xml",  "C:\\temp\\xpub\\rtf\\Emp2.xml"};&lt;br /&gt;      String[] xslInput = {"C:\\temp\\xpub\\rtf\\XmlMerge1.xsl", "C:\\temp\\xpub\\rtf\\XmlMerge2.xsl"};&lt;br /&gt;&lt;br /&gt;   // Create FO Processor&lt;br /&gt;      FOProcessor processor = new FOProcessor();&lt;br /&gt;      processor.setData(xmlInput);&lt;br /&gt;      processor.setTemplate(xslInput);&lt;br /&gt;      //FORMAT_EXCEL , FORMAT_HTML, FORMAT_RTF , FORMAT_PDF&lt;br /&gt;      //Set the format&lt;br /&gt;      processor.setOutput("C:\\temp\\xpub\\rtf\\XmlMerge12.pdf");&lt;br /&gt;      processor.setOutputFormat(FOProcessor.FORMAT_PDF);&lt;br /&gt;      processor.generate();&lt;br /&gt;   }&lt;br /&gt;   catch (XDOException xe)&lt;br /&gt;   {&lt;br /&gt;      System.out.println(" XDOException  " + xe.getMessage()) ;&lt;br /&gt;   }&lt;br /&gt;   catch (Exception e)&lt;br /&gt;   {&lt;br /&gt;      System.out.println(" Exception " + e.getMessage()) ;&lt;br /&gt;   }&lt;br /&gt;   System.out.println("End") ;&lt;br /&gt; } //main&lt;br /&gt;} //XmlMerge1&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Output &lt;br /&gt;-------------&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp1.blogger.com/_mKQhuTMPcMk/R8PUFSoX8zI/AAAAAAAAAHo/zCavMIJW7fw/s1600-h/merge2.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_mKQhuTMPcMk/R8PUFSoX8zI/AAAAAAAAAHo/zCavMIJW7fw/s320/merge2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5171209984517075762" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;  In my next few articles I will address more of the XML Publisher features.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Cheers &lt;br /&gt;~Neeraj&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5010259590027019782-5336931359986814107?l=ora-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ora-apps.blogspot.com/feeds/5336931359986814107/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5010259590027019782&amp;postID=5336931359986814107&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5010259590027019782/posts/default/5336931359986814107'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5010259590027019782/posts/default/5336931359986814107'/><link rel='alternate' type='text/html' href='http://ora-apps.blogspot.com/2008/02/xml-publisher-features-xml-merge.html' title='XML Publisher Features : XML Merge'/><author><name>Neeraj Srivastava</name><uri>http://www.blogger.com/profile/15569140745802625486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_mKQhuTMPcMk/R2Y1jsHfeLI/AAAAAAAAAEQ/gu4gXAsjA-k/S220/Chalk_Charcoal_new.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_mKQhuTMPcMk/R8PT1CoX8yI/AAAAAAAAAHg/RnAb1C9-CgI/s72-c/merge1.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5010259590027019782.post-6198856309749510689</id><published>2008-02-17T21:39:00.000-08:00</published><updated>2008-02-17T21:57:48.353-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WebADI'/><title type='text'>WebADI - Using a Custom Integrator</title><content type='html'>After all the hard work in creating custom integrator, we are all set to use our custom integrator. This is the easiest of all the activities. &lt;br /&gt;&lt;br /&gt;1) Select "Oracle Web ADI” responsibility and click on "Create Document" function.&lt;br /&gt;&lt;br /&gt;2) Select the viewer, generally Excel, to generate the document.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_mKQhuTMPcMk/R7kdLCoX8qI/AAAAAAAAAGg/paIj2EjbZOE/s1600-h/int1.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_mKQhuTMPcMk/R7kdLCoX8qI/AAAAAAAAAGg/paIj2EjbZOE/s320/int1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5168194122906333858" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;3) Select our custom Integrator from the list of available integrators.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_mKQhuTMPcMk/R7kdSyoX8rI/AAAAAAAAAGo/lDRXiIHXR6o/s1600-h/int2.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_mKQhuTMPcMk/R7kdSyoX8rI/AAAAAAAAAGo/lDRXiIHXR6o/s320/int2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5168194256050320050" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;4) Select out layout we defined in our earlier steps.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_mKQhuTMPcMk/R7kddioX8sI/AAAAAAAAAGw/YYdBYZFxErk/s1600-h/int3.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_mKQhuTMPcMk/R7kddioX8sI/AAAAAAAAAGw/YYdBYZFxErk/s320/int3.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5168194440733913794" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;5) Select "None" on the Content tab.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_mKQhuTMPcMk/R7kdlyoX8tI/AAAAAAAAAG4/1fqQZBs0vAs/s1600-h/int4.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_mKQhuTMPcMk/R7kdlyoX8tI/AAAAAAAAAG4/1fqQZBs0vAs/s320/int4.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5168194582467834578" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;6) Review and click on Create Document.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_mKQhuTMPcMk/R7kdxioX8uI/AAAAAAAAAHA/vxFSUNpqiK0/s1600-h/int5.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_mKQhuTMPcMk/R7kdxioX8uI/AAAAAAAAAHA/vxFSUNpqiK0/s320/int5.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5168194784331297506" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;7) This will create and excel sheet with all the columns we defined in the layout. Fill the excel sheet with the data we want to upload. &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_mKQhuTMPcMk/R7kd4ioX8vI/AAAAAAAAAHI/EmRwwQqjFlI/s1600-h/int6.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_mKQhuTMPcMk/R7kd4ioX8vI/AAAAAAAAAHI/EmRwwQqjFlI/s320/int6.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5168194904590381810" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;8) Click on Oracle -&gt; Upload and wait for it to upload the records.&lt;br /&gt;Upon successful upload, a smiley icon is shown for each record.&lt;br /&gt;&lt;br /&gt;NOTE :- Integrator commits only if all rows are uploaded successfully.&lt;br /&gt;&lt;br /&gt;We can check the results from the database to verify the success .&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_mKQhuTMPcMk/R7keASoX8wI/AAAAAAAAAHQ/rxQS7T-OPSs/s1600-h/int7.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_mKQhuTMPcMk/R7keASoX8wI/AAAAAAAAAHQ/rxQS7T-OPSs/s320/int7.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5168195037734368002" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;That’s it.. We have created our Integrator and used it to upload data into Oracle Apps using WebADI !!!!!!&lt;br /&gt;&lt;br /&gt;Cheers&lt;br /&gt;~Neeraj&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5010259590027019782-6198856309749510689?l=ora-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ora-apps.blogspot.com/feeds/6198856309749510689/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5010259590027019782&amp;postID=6198856309749510689&amp;isPopup=true' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5010259590027019782/posts/default/6198856309749510689'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5010259590027019782/posts/default/6198856309749510689'/><link rel='alternate' type='text/html' href='http://ora-apps.blogspot.com/2008/02/webadi-using-custom-integrator.html' title='WebADI - Using a Custom Integrator'/><author><name>Neeraj Srivastava</name><uri>http://www.blogger.com/profile/15569140745802625486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_mKQhuTMPcMk/R2Y1jsHfeLI/AAAAAAAAAEQ/gu4gXAsjA-k/S220/Chalk_Charcoal_new.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_mKQhuTMPcMk/R7kdLCoX8qI/AAAAAAAAAGg/paIj2EjbZOE/s72-c/int1.jpg' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5010259590027019782.post-1156445876071178201</id><published>2008-02-17T21:15:00.000-08:00</published><updated>2008-02-17T21:43:42.327-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WebADI'/><title type='text'>WebADI - Creating Integrator Layout</title><content type='html'>In my earlier posts, we saw steps involved in &lt;a href="http://ora-apps.blogspot.com/2007/10/webadi-creating-custom-integrators.html"&gt;WebADI Creating Custom Integrators&lt;/a&gt; and steps involved to &lt;a href="http://ora-apps.blogspot.com/2008/02/webadi-associate-function-with-custom.html"&gt;Associate Function with Custom Integrators&lt;/a&gt;.&lt;br /&gt; Now, continuing with WebADI custom Integrators, we need to define a layout. This layout actually defines how the XLSheet will look like for uploading actual data.&lt;br /&gt;&lt;br /&gt;1) From “Oracle Web ADI” responsibility, click "Define Layout: function to create a Layout for existing or Custom Integrators.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_mKQhuTMPcMk/R7kZQioX8mI/AAAAAAAAAGA/qfWLyQPNc3Y/s1600-h/int1.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_mKQhuTMPcMk/R7kZQioX8mI/AAAAAAAAAGA/qfWLyQPNc3Y/s320/int1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5168189819349103202" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;2) Next select the Integrator we created in earlier steps.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_mKQhuTMPcMk/R7kZXSoX8nI/AAAAAAAAAGI/6g5ahbkSP5s/s1600-h/int2.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_mKQhuTMPcMk/R7kZXSoX8nI/AAAAAAAAAGI/6g5ahbkSP5s/s320/int2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5168189935313220210" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;3) Click Define Layout, give Layout a name and Layout Key.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_mKQhuTMPcMk/R7kZdioX8oI/AAAAAAAAAGQ/VEJ30oS88Ao/s1600-h/int3.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_mKQhuTMPcMk/R7kZdioX8oI/AAAAAAAAAGQ/VEJ30oS88Ao/s320/int3.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5168190042687402626" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;4) Click Continue. The next screen shows all the procedure parameters. &lt;br /&gt;  Choose as Header if the value should remain same for all data lines or Line if the value changes for each line. See the screen shot below. Click Apply.&lt;br /&gt;For complex layouts, we need to first identify Header and Lines at the start itself.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_mKQhuTMPcMk/R7kZkyoX8pI/AAAAAAAAAGY/827lNxSBtNo/s1600-h/int4.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_mKQhuTMPcMk/R7kZkyoX8pI/AAAAAAAAAGY/827lNxSBtNo/s320/int4.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5168190167241454226" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;5) That's it !! We are done.  And ready to use this custom integrator to load data into Oracle Apps without coding or programming anymoer.&lt;br /&gt; &lt;br /&gt;  &lt;br /&gt;Cheers&lt;br /&gt;~Neeraj&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5010259590027019782-1156445876071178201?l=ora-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ora-apps.blogspot.com/feeds/1156445876071178201/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5010259590027019782&amp;postID=1156445876071178201&amp;isPopup=true' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5010259590027019782/posts/default/1156445876071178201'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5010259590027019782/posts/default/1156445876071178201'/><link rel='alternate' type='text/html' href='http://ora-apps.blogspot.com/2008/02/webadi-creating-integrator-layout.html' title='WebADI - Creating Integrator Layout'/><author><name>Neeraj Srivastava</name><uri>http://www.blogger.com/profile/15569140745802625486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_mKQhuTMPcMk/R2Y1jsHfeLI/AAAAAAAAAEQ/gu4gXAsjA-k/S220/Chalk_Charcoal_new.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_mKQhuTMPcMk/R7kZQioX8mI/AAAAAAAAAGA/qfWLyQPNc3Y/s72-c/int1.jpg' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5010259590027019782.post-1371295846054224787</id><published>2008-02-16T03:28:00.000-08:00</published><updated>2008-02-16T03:49:09.093-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WebADI'/><title type='text'>WebADI - Associate Function with Custom Integrators</title><content type='html'>In an earlier post  &lt;a href="http://ora-apps.blogspot.com/2007/10/webadi-creating-custom-integrators.html"&gt;WebADI Creating Custom Integrators&lt;/a&gt; we saw the steps to create a Custom WebADI Integrator  However, we can’t use this Integrator as we need to take care of the Function Security in Oracle Apps. &lt;br /&gt;For this we need to create a Function and associate the Integrator with this function and assign it to the menu seeded WebADI Menu.&lt;br /&gt;&lt;br /&gt;Here are the steps to create this link.&lt;br /&gt;&lt;br /&gt;1) Create a from function TESTEMP.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_mKQhuTMPcMk/R7bMYCoX8fI/AAAAAAAAAFI/7yv98RwQHWc/s1600-h/int1.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_mKQhuTMPcMk/R7bMYCoX8fI/AAAAAAAAAFI/7yv98RwQHWc/s320/int1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5167542335849361906" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;2) Repeat steps 3) and 4) of previous post to select another Integrator and select "HR Maintain Integrator Form Function Associations". This is a standard integrator that allows us to associate a Form Function with an Integrator.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_mKQhuTMPcMk/R7bMyyoX8gI/AAAAAAAAAFQ/X8bluH5VVdw/s1600-h/int2.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_mKQhuTMPcMk/R7bMyyoX8gI/AAAAAAAAAFQ/X8bluH5VVdw/s320/int2.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5167542795410862594" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;3)Next, select layout "Form Function Association"(default standard).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_mKQhuTMPcMk/R7bM6SoX8hI/AAAAAAAAAFY/2hoGrbrjFBE/s1600-h/int3.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_mKQhuTMPcMk/R7bM6SoX8hI/AAAAAAAAAFY/2hoGrbrjFBE/s320/int3.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5167542924259881490" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;4)Next, select "Form Function Association" (default standard)for content.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_mKQhuTMPcMk/R7bNByoX8iI/AAAAAAAAAFg/ba2s97cIRHk/s1600-h/int4.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_mKQhuTMPcMk/R7bNByoX8iI/AAAAAAAAAFg/ba2s97cIRHk/s320/int4.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5167543053108900386" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;5)Next, give the Application Short Name and Integrator name (just create in steps earlier)&lt;br /&gt; Click continue, and on Review screen, click on "Create Document" button.&lt;br /&gt; This will generate the excel sheet with all the required details. Open the excel sheet.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_mKQhuTMPcMk/R7bNJyoX8jI/AAAAAAAAAFo/9tvplZ8nw3I/s1600-h/int5.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_mKQhuTMPcMk/R7bNJyoX8jI/AAAAAAAAAFo/9tvplZ8nw3I/s320/int5.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5167543190547853874" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;6)Complete the excel sheet by entering the Form function name we created earlier. &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_mKQhuTMPcMk/R7bNQioX8kI/AAAAAAAAAFw/ul3BubxQ_Ng/s1600-h/int6.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_mKQhuTMPcMk/R7bNQioX8kI/AAAAAAAAAFw/ul3BubxQ_Ng/s320/int6.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5167543306511970882" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;7)Click Oracle -&gt; Upload. This will create the association between Integrator and the Form Function.&lt;br /&gt;&lt;br /&gt;8)Now, add this function to the Menu (function security)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_mKQhuTMPcMk/R7bNZyoX8lI/AAAAAAAAAF4/EoHoSujN6uQ/s1600-h/int7.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_mKQhuTMPcMk/R7bNZyoX8lI/AAAAAAAAAF4/EoHoSujN6uQ/s320/int7.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5167543465425760850" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Bingo!!! We are done. Now we need to create/ define a Layout and we will be ready to upload data using this Integrator.&lt;br /&gt;&lt;br /&gt;Cheers&lt;br /&gt;~Neeraj&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5010259590027019782-1371295846054224787?l=ora-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ora-apps.blogspot.com/feeds/1371295846054224787/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5010259590027019782&amp;postID=1371295846054224787&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5010259590027019782/posts/default/1371295846054224787'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5010259590027019782/posts/default/1371295846054224787'/><link rel='alternate' type='text/html' href='http://ora-apps.blogspot.com/2008/02/webadi-associate-function-with-custom.html' title='WebADI - Associate Function with Custom Integrators'/><author><name>Neeraj Srivastava</name><uri>http://www.blogger.com/profile/15569140745802625486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_mKQhuTMPcMk/R2Y1jsHfeLI/AAAAAAAAAEQ/gu4gXAsjA-k/S220/Chalk_Charcoal_new.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_mKQhuTMPcMk/R7bMYCoX8fI/AAAAAAAAAFI/7yv98RwQHWc/s72-c/int1.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5010259590027019782.post-7001570805228795570</id><published>2008-02-16T02:34:00.000-08:00</published><updated>2008-02-16T03:54:31.590-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iRep'/><title type='text'>Oracle Integration Repository</title><content type='html'>Oracle E-Business Suite includes many different APIs and integration technologies, such as PL/SQL procedures, Java classes, XML Gateway messages, Electronic Data Interchange (EDI) messages, open interfaces, concurrent programs, business events,and Web services.&lt;br /&gt;&lt;br /&gt; Most consultants working on Oracle Apps find it difficult to find the right public API to use while designing RICEW components. This was primarily due to the fact that there wasn't a single document that listed all the public APIs or integration points.&lt;br /&gt;&lt;br /&gt; Beginning with Oracle E-Business Suite 11i10, Oracle introduced a comprehensive online directory of all Oracle E-Business Suite integration points, including Web services, business-to-business&lt;br /&gt;(B2B) protocols, application programming interfaces (APIs), legacy integration technologies, and business events. &lt;br /&gt;&lt;br /&gt; This product is called Integration Repository or iRep. Oracle has made 11i10 iRep available at the following url: &lt;a href="http://irep.oracle.com/index.html"&gt;http://irep.oracle.com/index.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_mKQhuTMPcMk/R7bBdioX8dI/AAAAAAAAAE4/y5o9f05DbQ0/s1600-h/irep.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_mKQhuTMPcMk/R7bBdioX8dI/AAAAAAAAAE4/y5o9f05DbQ0/s320/irep.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5167530335710736850" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt; The tool lets users easily discover and deploy the appropriate business service interface for integration with any system, application, or business partner.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_mKQhuTMPcMk/R7bB2yoX8eI/AAAAAAAAAFA/LuiXDrludu8/s1600-h/irep1.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_mKQhuTMPcMk/R7bB2yoX8eI/AAAAAAAAAFA/LuiXDrludu8/s320/irep1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5167530769502433762" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;   In Release 12, the Oracle Integration Repository ships as part of the E-Business Suite. Once the instance is patched, the iRep automatically updates with content appropriate for the precise revisions of interfaces in the instance&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5010259590027019782-7001570805228795570?l=ora-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ora-apps.blogspot.com/feeds/7001570805228795570/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5010259590027019782&amp;postID=7001570805228795570&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5010259590027019782/posts/default/7001570805228795570'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5010259590027019782/posts/default/7001570805228795570'/><link rel='alternate' type='text/html' href='http://ora-apps.blogspot.com/2008/02/oracle-integration-repository.html' title='Oracle Integration Repository'/><author><name>Neeraj Srivastava</name><uri>http://www.blogger.com/profile/15569140745802625486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_mKQhuTMPcMk/R2Y1jsHfeLI/AAAAAAAAAEQ/gu4gXAsjA-k/S220/Chalk_Charcoal_new.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_mKQhuTMPcMk/R7bBdioX8dI/AAAAAAAAAE4/y5o9f05DbQ0/s72-c/irep.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5010259590027019782.post-7770195303668743207</id><published>2007-12-30T08:04:00.000-08:00</published><updated>2008-03-03T10:05:59.254-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XML Publisher'/><title type='text'>XML Publisher Using Simple Java + XML + XSL</title><content type='html'>XML Publisher provides lot of Java APIs and capabilities through its APIs. Using these APIs we can write Standalone Java Programs to generate Reports or write Java Concurrent Programs(JCPs) in Apps environment.&lt;br /&gt;&lt;br /&gt;One of the Java Package/APIs provided is FO Processor Engine. These APIs merge an XML file (data source file) and an XSLT file (template) to generate PDF, Excel, HTML, and RTF reports. &lt;br /&gt;&lt;br /&gt;So lets see an example of how to do it using a simple Java Class.&lt;br /&gt;&lt;br /&gt;Step 1: Create XML and XSL file &lt;br /&gt;----------------------------------&lt;br /&gt;XML is the data file and XSL is the file that specifies the layout of the data on the report.&lt;br /&gt;Generally, XML can be obtained from database using APIs or from any other system. We will use the same XML data that we have used in other exmples.&lt;br /&gt;XSL is the stylesheet. We can create XSL using XSL tools. Generally, we use a RTF and convert it into XSL.&lt;br /&gt;&lt;br /&gt;XML :-&lt;br /&gt;--------&lt;br /&gt;Screen shot of XML file.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp2.blogger.com/_mKQhuTMPcMk/R3fHs_dWBiI/AAAAAAAAAEg/4QJ8pyITCNQ/s1600-h/xml_data.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_mKQhuTMPcMk/R3fHs_dWBiI/AAAAAAAAAEg/4QJ8pyITCNQ/s320/xml_data.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5149804274684134946" /&gt;&lt;/a&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;-------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;XSL :-&lt;br /&gt;---------&lt;br /&gt;Screen shot of XSL file.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp2.blogger.com/_mKQhuTMPcMk/R3fIA_dWBjI/AAAAAAAAAEo/hPzQiewRq5c/s1600-h/xsl.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_mKQhuTMPcMk/R3fIA_dWBjI/AAAAAAAAAEo/hPzQiewRq5c/s320/xsl.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5149804618281518642" /&gt;&lt;/a&gt;&lt;br /&gt; &lt;br /&gt;-------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;Step 2: Write the Java code &lt;br /&gt;------------------------------&lt;br /&gt;&lt;br /&gt;Now we need to write the Java program that uses XML Publisher’s java APIs to generate the output. &lt;br /&gt;&lt;br /&gt;Here's a sample code :&lt;br /&gt;------------------------&lt;br /&gt;&lt;br /&gt;import oracle.apps.xdo.XDOException;&lt;br /&gt;import oracle.apps.xdo.common.pdf.util.PDFDocMerger;&lt;br /&gt;import oracle.apps.xdo.template.FOProcessor;&lt;br /&gt;import oracle.apps.xdo.template.fo.util.FOUtility;&lt;br /&gt;import oracle.xml.parser.v2.NSResolver;&lt;br /&gt;&lt;br /&gt;public class EmpXmlPub  {&lt;br /&gt;    public EmpXmlPub() {&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void foEngine() {&lt;br /&gt;        try {&lt;br /&gt;            FOProcessor processor = new FOProcessor();&lt;br /&gt;            processor.setData("C:\\temp\\xpub\\1\\Emp.xml"); //XML Data File&lt;br /&gt;            processor.setTemplate("C:\\temp\\xpub\\1\\emp1.xsl"); //XSL Data File&lt;br /&gt;            processor.setOutput("C:\\temp\\xpub\\1\\emp.pdf"); //OutputFormat&lt;br /&gt;            processor.setOutputFormat(FOProcessor.FORMAT_PDF);&lt;br /&gt;            processor.generate(); &lt;br /&gt;        } catch (XDOException e) {&lt;br /&gt;            System.out.println("XDOException " + e.getMessage());&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;     public static void main(String[] argv) {&lt;br /&gt;        EmpXmlPub empXmlPub = new EmpXmlPub();&lt;br /&gt;        empXmlPub.foEngine();&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;} // EmpXmlPub&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Step 3: Compile the code and run&lt;br /&gt;-----------------------------------&lt;br /&gt;Now we are ready to compile the code and run the program. We need to ensure that all the required classes, jar files and resources (xml, xsl) files are with us. &lt;br /&gt; We have to ensure that JAVA_HOME and CLASSPATH variables are set or specified explicitly in the command.&lt;br /&gt;&lt;br /&gt;&lt;JAVA_HOME&gt;javac.exe  -classpath .;&lt;JAR PATH&gt;xdocore.jar;xmlparserv2-904.jar;versioninfo.jar;i18nAPI_v3.jar;classes12.jar;nls_charset12.jar;collections.jar   EmpXmlPub.java&lt;br /&gt;&lt;br /&gt;Then once class files are generated, we are good to run it.&lt;br /&gt;&lt;br /&gt; &lt;JAVA_HOME&gt;java.exe  -classpath .;&lt;JAR PATH&gt;xdocore.jar;xmlparserv2-904.jar;versioninfo.jar;i18nAPI_v3.jar;classes12.jar;nls_charset12.jar;collections.jar  EmpXmlPub&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp0.blogger.com/_mKQhuTMPcMk/R3fFjfdWBhI/AAAAAAAAAEY/dcuTPRBBgwk/s1600-h/jxx.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_mKQhuTMPcMk/R3fFjfdWBhI/AAAAAAAAAEY/dcuTPRBBgwk/s320/jxx.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5149801912452122130" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This will generate the pdf file in the specified output directory. Just open the pdf file and check the output.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp2.blogger.com/_mKQhuTMPcMk/R3fIQ_dWBkI/AAAAAAAAAEw/f_Muc4l-2l4/s1600-h/op.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_mKQhuTMPcMk/R3fIQ_dWBkI/AAAAAAAAAEw/f_Muc4l-2l4/s320/op.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5149804893159425602" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;That's how simple it is !!!&lt;br /&gt;&lt;br /&gt;More on XML publisher in coming articles &lt;br /&gt;&lt;br /&gt;Cheers !!!&lt;br /&gt;Neeraj&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5010259590027019782-7770195303668743207?l=ora-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ora-apps.blogspot.com/feeds/7770195303668743207/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5010259590027019782&amp;postID=7770195303668743207&amp;isPopup=true' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5010259590027019782/posts/default/7770195303668743207'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5010259590027019782/posts/default/7770195303668743207'/><link rel='alternate' type='text/html' href='http://ora-apps.blogspot.com/2007/12/xml-publisher-using-simple-java-xml-xsl.html' title='XML Publisher Using Simple Java + XML + XSL'/><author><name>Neeraj Srivastava</name><uri>http://www.blogger.com/profile/15569140745802625486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_mKQhuTMPcMk/R2Y1jsHfeLI/AAAAAAAAAEQ/gu4gXAsjA-k/S220/Chalk_Charcoal_new.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_mKQhuTMPcMk/R3fHs_dWBiI/AAAAAAAAAEg/4QJ8pyITCNQ/s72-c/xml_data.jpg' height='72' width='72'/><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5010259590027019782.post-8700112743708140050</id><published>2007-12-16T22:36:00.000-08:00</published><updated>2007-12-16T23:54:12.694-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MSCA'/><category scheme='http://www.blogger.com/atom/ns#' term='Mobile'/><title type='text'>Oracle Mobile Applications (MSCA) Overview</title><content type='html'>Oracle Application provides Mobile capability, allowing for transactions to be executed from the Mobile/RF/Wireless devices.&lt;br /&gt;   Oracle Mobile Supply Chain Applications is the key technology enabler for successful deployment of the Warehouse Management System.&lt;br /&gt;  The Mobile Supply Chain Applications technology provides a seamless integration of the the Oracle e-business suite with the process critical devices such as RF hand-held devices, bar code printers and scales etc.&lt;br /&gt;&lt;br /&gt;Mobile computing devices such as RF Hand-helds allow for executing the transactions such as item picking/packing/putaway at the point of activity thus allowing for reducing the time taken to perform the transaction. &lt;br /&gt;Oracle MSCA applications transform these automated data collecdevices into powerful mobile computers with the capability to execute complex transactions by tightly integrating them with the e-business suite. &lt;br /&gt;&lt;br /&gt;Integrating the material handling devices to the Oracle e-business suite is also one of the key functionality of the MSCA. With Oracle mobile supply chain applications the transactions are being performed at the point of activity and directly affecting the live data. &lt;br /&gt;&lt;br /&gt;Characteristics&lt;br /&gt;------------------------&lt;br /&gt;*  IEEE 802.11B Wireless LAN Standard based&lt;br /&gt;*  Integrated barcode reader&lt;br /&gt;*  “In the building” Applications like Manufacturing Execution and Warehouse Management&lt;br /&gt;*  Emphasis on sub-second response times, automating repetitive transactions&lt;br /&gt;*  Field level validation&lt;br /&gt;*  Execute transactions at the point of activity&lt;br /&gt;*  Eliminates: Latency, Redundancy, Inaccuracy&lt;br /&gt;*  Delivers: Accuracy, Currancy, Efficiency&lt;br /&gt;*  Requires: Mobility, Usability, Reliability&lt;br /&gt;&lt;br /&gt;Networks Supported&lt;br /&gt;--------------------------&lt;br /&gt;MSCA allows a wide variety of wireless networks to choose from based on their requirements and business needs. &lt;br /&gt;&lt;br /&gt;*  Wide Area Wirelss Networks  :   Include Cellular, GSM, GPRS and PCS that offer integrated voice/data transmission capabilities&lt;br /&gt;*  Local Area Networks for high speed, reliable data communication :   Include 400 MHz UHF, 2.4 GHz OpenAir, IEEE 802.11 Frequency Hopping, IEEE 802.11 Direct Sequence. &lt;br /&gt;*  MSCA Radio Independent gives the customers the freedom of choice for radio technologies. This enables customers to mix different types of wireless radios to meet different range and throughput requirements within a single environment. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Bar code Technology&lt;br /&gt;--------------------------&lt;br /&gt;Bar codes encode letters and numbers into a concise, simple format (sequences of vertical bars and spaces of variable widths) that machines can read.  2D barcode is capable of encoding significantly more  information than 1D bar codes.&lt;br /&gt; Bar code scanners read bar codes, the overhead and fallibility of human data entry is nearly eliminated.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Applications/Transactions supported&lt;br /&gt;-----------------------------------------&lt;br /&gt;Oracle MSCA currently supports transactions of different modules of Discrete Manufacturing and Process Manufacturing. &lt;br /&gt;&lt;br /&gt;Many transactions are avaialble on MSCA devices. If WMS is installed and an organization is WMS enabled,there are additional WMS transactions also available.&lt;br /&gt;&lt;br /&gt;Mobile Receiving : PO’s, transfers &amp; returns, Cross-dock alerts&lt;br /&gt;Mobile Quality   : Quality collections, View specifications&lt;br /&gt;Mobile Inventory : Transfers, Misc. issues &amp; receipts, Cycle counts&lt;br /&gt;Mobile Shipping  :Ship confirm, Print shipping documents&lt;br /&gt;Mobile Manufacturing : Issues, Moves, Completions, Scrap, Kanban&lt;br /&gt;&lt;br /&gt;More transactions are expected in the future.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Architecture&lt;br /&gt;--------------------------------&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_mKQhuTMPcMk/R2YoVsHfeGI/AAAAAAAAADs/xvTPn5m1uh8/s1600-h/MSCA_Arch_1.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_mKQhuTMPcMk/R2YoVsHfeGI/AAAAAAAAADs/xvTPn5m1uh8/s320/MSCA_Arch_1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5144843977402316898" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;*  MSCA is a pure Java based implementation.It has&lt;br /&gt;    -- Thin Client Architecture&lt;br /&gt;    -- Distributed capabilities.&lt;br /&gt;*  Implemented on the Oracle Apps Datamodel&lt;br /&gt;    -- AOL Menus/Form Functions&lt;br /&gt;    -- AK based customization&lt;br /&gt;&lt;br /&gt;All Mobile Supply Chain Applications are built in Java, using a Java beans development framework. Each page (or screen) of an application is essentially a Java bean, whose fields and properties have been set by the programmer.  By extending these classes or adding new ones, MSCA customers can modify existing applications or create their own.&lt;br /&gt;&lt;br /&gt; There are two types of clients available &lt;br /&gt;   *  Character Mode Clent : This client gives a simple character mode look and uses tab and arrow keys for navigation. It does not support mouse actions.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_mKQhuTMPcMk/R2YokMHfeHI/AAAAAAAAAD0/_81I7QxZXy0/s1600-h/Char_mode_scr1.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_mKQhuTMPcMk/R2YokMHfeHI/AAAAAAAAAD0/_81I7QxZXy0/s320/Char_mode_scr1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5144844226510420082" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;   *  GUI Client : It is an extension of the existing client and gives Rich UI feel and supports mouse.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_mKQhuTMPcMk/R2YopcHfeII/AAAAAAAAAD8/9jyl46tXwF8/s1600-h/gui1.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_mKQhuTMPcMk/R2YopcHfeII/AAAAAAAAAD8/9jyl46tXwF8/s320/gui1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5144844316704733314" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_mKQhuTMPcMk/R2Yot8HfeJI/AAAAAAAAAEE/hvq6tWravrs/s1600-h/gui2.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_mKQhuTMPcMk/R2Yot8HfeJI/AAAAAAAAAEE/hvq6tWravrs/s320/gui2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5144844394014144658" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I will deal more on MSCA application aspects, like writing new applications, customizing existing applications etc in my subsequent blogs.&lt;br /&gt;&lt;br /&gt;Till then&lt;br /&gt;Cheers !!!&lt;br /&gt;Neeraj&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5010259590027019782-8700112743708140050?l=ora-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ora-apps.blogspot.com/feeds/8700112743708140050/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5010259590027019782&amp;postID=8700112743708140050&amp;isPopup=true' title='23 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5010259590027019782/posts/default/8700112743708140050'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5010259590027019782/posts/default/8700112743708140050'/><link rel='alternate' type='text/html' href='http://ora-apps.blogspot.com/2007/12/oracle-mobile-applications-msca.html' title='Oracle Mobile Applications (MSCA) Overview'/><author><name>Neeraj Srivastava</name><uri>http://www.blogger.com/profile/15569140745802625486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_mKQhuTMPcMk/R2Y1jsHfeLI/AAAAAAAAAEQ/gu4gXAsjA-k/S220/Chalk_Charcoal_new.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_mKQhuTMPcMk/R2YoVsHfeGI/AAAAAAAAADs/xvTPn5m1uh8/s72-c/MSCA_Arch_1.jpg' height='72' width='72'/><thr:total>23</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5010259590027019782.post-1348669235036123343</id><published>2007-11-16T21:15:00.000-08:00</published><updated>2007-11-16T21:18:46.051-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Database'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>Custom Contexts</title><content type='html'>A context is "a set of application-defined attributes that validates and secures an application".&lt;br /&gt;A namespace for a context is created using CREATE CONTEXT syntax. Once a attribute of a namespace has been assigned a value, the value remains for the entire user session or until reset by another value.Contexts are also used for Fine-grained Access Control (row level security).&lt;br /&gt;USERENV is a system generated and maintained namespace that provides environment information.&lt;br /&gt;&lt;br /&gt;Creating Custom Contexts&lt;br /&gt;--------------------------------&lt;br /&gt;&lt;br /&gt;A namespace for a context is created using CREATE CONTEXT syntax. To be able to create a context namespace, we must associate it with an API.&lt;br /&gt;This ensures that context attributes are set by only those users who have access to the API associated with the Context.&lt;br /&gt;Then we need to define a procedure to set the context attribute based on some condition. We can set the context at the runtime by calling this API.&lt;br /&gt;&lt;br /&gt;SQL&gt;&lt;br /&gt;create or replace context tek_app_context using apps.tek_app_context_pkg;&lt;br /&gt;/&lt;br /&gt;SQL&gt;&lt;br /&gt;create or replace package tek_app_context_pkg as&lt;br /&gt;        procedure set_tek_app_context (p_user_id NUMBER) ;&lt;br /&gt;end;&lt;br /&gt;/&lt;br /&gt;SQL&gt;&lt;br /&gt;create or replace package body tek_app_context_pkg as&lt;br /&gt;  procedure set_tek_app_context ( p_user_id NUMBER) as&lt;br /&gt;  begin&lt;br /&gt;   n_debug('set app context ' || p_user_id );&lt;br /&gt;    dbms_session.set_context( namespace =&gt; 'tek_app_context',&lt;br /&gt;                              attribute =&gt; 'user_id',&lt;br /&gt;                                  value =&gt;  p_user_id );&lt;br /&gt;  end set_tek_app_context ;&lt;br /&gt;&lt;br /&gt;end tek_app_context_pkg ;&lt;br /&gt;/&lt;br /&gt;&lt;br /&gt;Listing Context Namespaces and Attributes&lt;br /&gt;-------------------------------------------------&lt;br /&gt;&lt;br /&gt;DBMS_SESSION.LIST_CONTEXT is an API that can be used to determine all namespaces and attributes active for a session, excluding USERENV.&lt;br /&gt;Since the procedure returns a table of type AppCtxTabType - PL/SQL must be used to execute the package and process the returned list.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;SQL&gt; set serverout on&lt;br /&gt;SQL&gt; declare&lt;br /&gt;         list dbms_session.AppCtxTabTyp;   -- type defined in dbms_session pkg&lt;br /&gt;         cnt number;&lt;br /&gt;     begin&lt;br /&gt;         dbms_session.list_context (list, cnt);&lt;br /&gt;         for i in 1..cnt loop&lt;br /&gt;         dbms_output.put_line( list(i).namespace || ' ' || list(i).attribute ||&lt;br /&gt;                                                   ' = '|| list(i).value );&lt;br /&gt;     end loop;&lt;br /&gt;     end;&lt;br /&gt;     /&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Cheers &lt;br /&gt;~Neeraj&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5010259590027019782-1348669235036123343?l=ora-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ora-apps.blogspot.com/feeds/1348669235036123343/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5010259590027019782&amp;postID=1348669235036123343&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5010259590027019782/posts/default/1348669235036123343'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5010259590027019782/posts/default/1348669235036123343'/><link rel='alternate' type='text/html' href='http://ora-apps.blogspot.com/2007/11/custom-contexts.html' title='Custom Contexts'/><author><name>Neeraj Srivastava</name><uri>http://www.blogger.com/profile/15569140745802625486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_mKQhuTMPcMk/R2Y1jsHfeLI/AAAAAAAAAEQ/gu4gXAsjA-k/S220/Chalk_Charcoal_new.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5010259590027019782.post-7915406903860036437</id><published>2007-10-31T20:06:00.000-07:00</published><updated>2007-11-07T20:27:04.642-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WebADI'/><title type='text'>WebADI Creating Custom Integrators</title><content type='html'>&lt;span style=";font-family:arial;font-size:100%;"  &gt;Web Applications Desktop Integrator (Web ADI) is a self-service Oracle Application.&lt;br /&gt;Web ADI generates Microsoft Excel or Word documents on your desktop, and downloads the data you have selected from the application to be viewed, or modified and uploaded.&lt;br /&gt;It can also be used to load legacy data into Oracle HRMS, and allows you to manage the Mail Merge process&lt;br /&gt;We can use the WebADI to create custom Integrators that can be used to Upload or Download data from the application.&lt;br /&gt;&lt;br /&gt;In this blog I will list down the steps involved in creating a Custom Integrator that can be used to upload data into Custom table. Again, here we will be using EMP table for the sake of simplicity.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;1) Assign yourself “&lt;span style="color: rgb(51, 51, 255);"&gt;Oracle Web ADI&lt;/span&gt;” responsibility. It has three important functions.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Create Document&lt;/span&gt; : Allows using existing Integrators or create custom Integrators&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;Define Layout&lt;/span&gt;       : Create a Layout for existing or Custom Integrators&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;Define Mapping &lt;/span&gt;   : Create Map for exiting or Custom integrator to load data using flat text files.&lt;span style="background: white none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;font-size:12;" &gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;p class="MsoNormal"  style="margin-left: 18pt; text-indent: -18pt;font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;2) Update the "&lt;span style="color: rgb(51, 51, 255);"&gt;Oracle Web ADI Menu&lt;/span&gt;" menu to add the Integrator functions menu "&lt;span style="color: rgb(51, 51, 255);"&gt;HR ADI Seeded Integrator Form Functions&lt;/span&gt;" . Otherwise, we won't be able to use integrators as permission is not granted.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="margin-left: 18pt; text-indent: -18pt;font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;3)&lt;span style="font-size:100%;"&gt;     &lt;/span&gt;&lt;/span&gt;Now, click on the “&lt;span style="color:blue;"&gt;Create Document&lt;/span&gt;” option.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="margin-left: 18pt; text-indent: -18pt; font-weight: bold;font-family:courier new;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: normal;"&gt;4) Select the Viewer, generally Excel, to generate the document (Reporting Check box is used when downloading&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_mKQhuTMPcMk/RylLdb-nwYI/AAAAAAAAAC8/BaLaV5V6EBY/s1600-h/int_1.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_mKQhuTMPcMk/RylLdb-nwYI/AAAAAAAAAC8/BaLaV5V6EBY/s320/int_1.JPG" alt="" id="BLOGGER_PHOTO_ID_5127712619836719490" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="margin-left: 18pt; text-indent: -18pt; font-weight: bold;font-family:courier new;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: normal;"&gt;5)  Next, select  "&lt;span style="color: rgb(51, 51, 255);"&gt;HR Integrator Setup&lt;/span&gt;" to create a custom Integrator.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="margin-left: 18pt; text-indent: -18pt; font-weight: bold;font-family:courier new;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: normal;"&gt;6) Next, select the layout as "Integrator Setup" .&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="margin-left: 18pt; text-indent: -18pt; font-weight: bold;font-family:courier new;"&gt;&lt;span style="font-size:100%;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_mKQhuTMPcMk/RylLmL-nwaI/AAAAAAAAADM/p9CBRV0bx8A/s1600-h/int_3.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_mKQhuTMPcMk/RylLmL-nwaI/AAAAAAAAADM/p9CBRV0bx8A/s320/int_3.JPG" alt="" id="BLOGGER_PHOTO_ID_5127712770160574882" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="margin-left: 18pt; text-indent: -18pt; font-weight: bold;font-family:courier new;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: normal;"&gt;7) Next, leave the content as "None"&lt;span style="font-weight: bold;"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-weight: bold;font-family:courier new;font-size:100%;"  &gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_mKQhuTMPcMk/RylL_L-nwbI/AAAAAAAAADU/amTmTy68KLE/s1600-h/int_4.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_mKQhuTMPcMk/RylL_L-nwbI/AAAAAAAAADU/amTmTy68KLE/s320/int_4.JPG" alt="" id="BLOGGER_PHOTO_ID_5127713199657304498" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: normal;"&gt;8) Next, review and select "Create Document".&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;font-size:100%;"  &gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_mKQhuTMPcMk/RylMIL-nwcI/AAAAAAAAADc/Q359EMKllkU/s1600-h/int_5.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_mKQhuTMPcMk/RylMIL-nwcI/AAAAAAAAADc/Q359EMKllkU/s320/int_5.JPG" alt="" id="BLOGGER_PHOTO_ID_5127713354276127170" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: normal;"&gt;9) This action creates an Excel Spreadsheet. Make sure you "Enable Macros" when you open it.&lt;br /&gt;&lt;br /&gt;Now using this spreadsheet we can create New Integrators. Basically, WebADI uses data from this standard template/layout to create/upload details about new Integrators. Complete the excel sheet with the Integrator Name.&lt;/span&gt;&lt;/span&gt;&lt;table border="1"&gt;&lt;br /&gt;&lt;tbody&gt;&lt;tr&gt;&lt;br /&gt;&lt;th&gt;Column&lt;/th&gt;&lt;br /&gt;&lt;th&gt;Meaning&lt;/th&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt; Metadata Type &lt;/td&gt;&lt;br /&gt;&lt;td&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt; CREATE : create new Integrator  &lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;     &lt;tr&gt;&lt;td&gt; UPDATE : update an Integrator  &lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;       &lt;tr&gt;&lt;td&gt; DOWNLOAD : download Integrator data  &lt;/td&gt;&lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt; Application Short Name&lt;/td&gt;&lt;br /&gt;&lt;td&gt; Application Short Name, like AP, XXTEK&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt; Integrator User Name &lt;/td&gt;&lt;br /&gt;&lt;td&gt; Integrator User Name, Appear in the drop down list &lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt; View Name &lt;/td&gt;&lt;br /&gt;&lt;td&gt; Name of the View used to download data, not required for CREATE type. &lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt; Form Name &lt;/td&gt;&lt;br /&gt;&lt;td&gt; &lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt; GENERAL if don’t associate Integrator with form  &lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;     &lt;tr&gt;&lt;td&gt; LETTER for mail merge.  &lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;       &lt;tr&gt;&lt;td&gt; Specific form name to associate with Integrator  &lt;/td&gt;&lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;   &lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt; API Package Name &lt;/td&gt;&lt;br /&gt;&lt;td&gt; PROCEDURE or FUNCTION &lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt; API Procedure Name &lt;/td&gt;&lt;br /&gt;&lt;td&gt; Procedure that inserts/uploads data. &lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt; Interface User Name  &lt;/td&gt;&lt;br /&gt;&lt;td&gt; Interface name displayed on to the user for this integrator on layout page.  &lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt; Interface Parameter List Name &lt;/td&gt;&lt;br /&gt;&lt;td&gt; Name for the parameter list displayed on Layout page &lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt; API Type&lt;/td&gt;&lt;br /&gt;&lt;td&gt; PROCEDURE or FUNCTION &lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt; API Return Type &lt;/td&gt;&lt;br /&gt;&lt;td&gt;  Date, Number or Varhar2 &lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: normal;"&gt;&lt;br /&gt;Click on Oracle --&gt; Upload menu option. This will upload the Integrator definition into the system and the Integrator name would appear on the list of available integrators.&lt;br /&gt;&lt;br /&gt;NOTE : Integrator commits only if all rows are uploaded successfully&lt;br /&gt;Make sure that the API + Procedure is defined in the database, as the Integrator uses the procedure parameters to identify the data/columns to handle and shows it in the layout (which we will be creating soon ..)&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;p class="MsoNormal"  style="margin-left: 18pt; font-weight: bold;font-family:courier new;"&gt;&lt;span style="font-size:100%;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_mKQhuTMPcMk/RylMOb-nwdI/AAAAAAAAADk/FtDW3uFbHjo/s1600-h/int_6.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_mKQhuTMPcMk/RylMOb-nwdI/AAAAAAAAADk/FtDW3uFbHjo/s320/int_6.JPG" alt="" id="BLOGGER_PHOTO_ID_5127713461650309586" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: normal;"&gt;So far we have only created the custom Integrator. We still need to do a few more things before we can actually begin to use it&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; . ---------------------------------------------------------------------------------&lt;br /&gt;Here's the sample code attached, simple and easy.&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;CREATE OR REPLACE PACKAGE temp_emp IS&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;PROCEDURE CREATE_EMP(&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;p_empno IN NUMBER&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;, p_ename IN VARCHAR2&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;, p_job IN VARCHAR2&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;, p_mgr IN NUMBER&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;, p_hiredate IN DATE&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;, p_sal IN NUMBER&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;, p_comm IN NUMBER&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;, p_deptno IN NUMBER&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;END temp_emp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;CREATE OR REPLACE PACKAGE BODY temp_emp IS&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;PROCEDURE CREATE_EMP(&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;p_empno IN NUMBER&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;, p_ename IN VARCHAR2&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;, p_job IN VARCHAR2&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;, p_mgr IN NUMBER&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;, p_hiredate IN DATE&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;, p_sal IN NUMBER&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;, p_comm IN NUMBER&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;, p_deptno IN NUMBER&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;IS&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;BEGIN&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;insert into emp ( empno, ename, job, mgr, hiredate, sal, comm, deptno);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;values (p_empno, p_ename, p_job, p_mgr,p_hiredate,p_sal,p_comm,p_deptno);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;EXCEPTION&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;WHEN OTHERS THEN&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   null;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;END ;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;END temp_emp ;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;---------------------------------------------------------------------------------&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;&lt;br /&gt;&lt;br /&gt;Cheers&lt;br /&gt;~Neeraj&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5010259590027019782-7915406903860036437?l=ora-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ora-apps.blogspot.com/feeds/7915406903860036437/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5010259590027019782&amp;postID=7915406903860036437&amp;isPopup=true' title='14 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5010259590027019782/posts/default/7915406903860036437'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5010259590027019782/posts/default/7915406903860036437'/><link rel='alternate' type='text/html' href='http://ora-apps.blogspot.com/2007/10/webadi-creating-custom-integrators.html' title='WebADI Creating Custom Integrators'/><author><name>Neeraj Srivastava</name><uri>http://www.blogger.com/profile/15569140745802625486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_mKQhuTMPcMk/R2Y1jsHfeLI/AAAAAAAAAEQ/gu4gXAsjA-k/S220/Chalk_Charcoal_new.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_mKQhuTMPcMk/RylLdb-nwYI/AAAAAAAAAC8/BaLaV5V6EBY/s72-c/int_1.JPG' height='72' width='72'/><thr:total>14</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5010259590027019782.post-8166611421544285959</id><published>2007-10-30T19:08:00.000-07:00</published><updated>2007-10-31T20:05:45.961-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XML Publisher'/><title type='text'>PL SQL Stored Procedure + XML Publisher</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: times new roman;font-family:arial;font-size:100%;"  &gt;  This is one of the least used approaches. However, I am writing this blog just to show if it can be done.&lt;br /&gt;This approach uses a PL/SQL Stored API based concurrent program to generate the XML data. Once we have the XML data, rest of the steps are same as using Report.&lt;br /&gt;&lt;br /&gt;1) Create a PL SQL Package Procedure. In this procedure write the logic to fetch the required records and generate the xml file. In this simple approach, we are generating xml file by concatenating the structure with result from query and by using FND_FILE.OUTPUT&lt;br /&gt;Here is the sample code.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;----------------------------------&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;-- Package Spec&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;CREATE OR REPLACE PACKAGE xx_pls_xml_rep_test AS&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;PROCEDURE xx_gen_xml_data ( p_error_code OUT NUMBER&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;               ,p_error_msg  OUT VARCHAR2&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;               ,v_dept_no    IN NUMBER&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;             );&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;END xx_pls_xml_rep_test;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;/&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;----------------------------------&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;-- Package Body&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;CREATE OR REPLACE PACKAGE BODY xx_pls_xml_rep_test&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;AS&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;    PROCEDURE xx_gen_xml_data ( p_error_code OUT NUMBER&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;                   ,p_error_msg  OUT VARCHAR2&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;                   ,v_dept_no    IN NUMBER&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;                 )&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;    IS&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;      CURSOR emp_details_cur ( v_dept_no VARCHAR2 ) IS&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;        SELECT employee_id   empno&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;             , employee_name ename&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;             , job           job&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;             , d.dname       dept_name&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;             , salary        sal&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;        FROM   emp e&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;             , dept d&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;        WHERE  e.deptno = d.deptno&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;               AND NVL (d.deptno, 0) = NVL (v_dept_no, 0) ;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;       output_file  utl_file.file_type;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;      /* v_empno    NUMBER;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;       v_empname  VARCHAR2(100);&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;       v_job      VARCHAR2(100);&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;       v_deptname VARCHAR2(100);&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;       v_sal      NUMBER;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;       v_row      emp_details_cur%rowtype;*/&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;    BEGIN&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;      FND_FILE.put_line( FND_FILE.LOG,'Entered in the procedure');&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;      FND_FILE.put_line( FND_FILE.OUTPUT,'&lt;xmlpub&gt;'          ) ;&lt;br /&gt;&lt;/xmlpub&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;      FND_FILE.put_line( FND_FILE.OUTPUT,'&lt;list_g_empno&gt;' ) ;&lt;br /&gt;&lt;/list_g_empno&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;      FOR l_rec IN emp_details_cur ( v_dept_no)&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;      LOOP&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;          FND_FILE.put_line( FND_FILE.LOG,'inside Loop');&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;          FND_FILE.put_line( FND_FILE.OUTPUT,'&lt;g_empno&gt;'     ) ;&lt;br /&gt;&lt;/g_empno&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;          FND_FILE.put_line( FND_FILE.OUTPUT,'&lt;empno&gt;' || l_rec.empno  || '&lt;/empno&gt;'   ) ;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;         FND_FILE.put_line( FND_FILE.OUTPUT,'&lt;ename&gt;' || l_rec.ename || '&lt;/ename&gt;'    ) ;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;          FND_FILE.put_line( FND_FILE.OUTPUT,'&lt;job&gt;' || l_rec.job || '&lt;/job&gt;'        ) ;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;          FND_FILE.put_line( FND_FILE.OUTPUT,'&lt;dept_name&gt;' || l_rec.dept_name  || '&lt;/dept_name&gt;') ;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;          FND_FILE.put_line( FND_FILE.OUTPUT,'&lt;sal&gt;' || l_rec.sal || '&lt;/sal&gt;'      ) ;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;          FND_FILE.put_line( FND_FILE.OUTPUT,''                   ) ;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;          &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;          FND_FILE.put_line( FND_FILE.LOG,'&lt;g_empno&gt;'     ) ;&lt;br /&gt;&lt;/g_empno&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;          FND_FILE.put_line( FND_FILE.LOG,'&lt;empno&gt;' || l_rec.empno  || '&lt;/empno&gt;'   ) ;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;          FND_FILE.put_line( FND_FILE.LOG,'&lt;ename&gt;' || l_rec.ename || '&lt;/ename&gt;'    ) ;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;          FND_FILE.put_line( FND_FILE.LOG,'&lt;job&gt;' || l_rec.job || '&lt;/job&gt;'        ) ;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;          FND_FILE.put_line( FND_FILE.LOG,'&lt;dept_name&gt;' || l_rec.dept_name  || '&lt;/dept_name&gt;') ;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;          FND_FILE.put_line( FND_FILE.LOG,'&lt;sal&gt;' || l_rec.sal || '&lt;/sal&gt;'      ) ;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;          FND_FILE.put_line( FND_FILE.LOG,''                   ) ;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;      END LOOP;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;      FND_FILE.put_line( FND_FILE.OUTPUT,''     ) ;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;      FND_FILE.put_line( FND_FILE.OUTPUT,''        ) ;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;      FND_FILE.put_line( FND_FILE.LOG,'END  ');&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;    EXCEPTION&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;      WHEN OTHERS THEN&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;        DBMS_OUTPUT.put_line( ' EXCEPTION WHEN OTHERS THEN'  || SQLERRM );&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;    END xx_gen_xml_data;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;END xx_pls_xml_rep_test;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;/&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;2) Once the api is compiled and tested successfully, create the executable. Note the execution method should be PL SQL Stored Procedure.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_mKQhuTMPcMk/RyftvL-nwRI/AAAAAAAAACE/vFqXPjapNpQ/s1600-h/pl_sql_exec.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_mKQhuTMPcMk/RyftvL-nwRI/AAAAAAAAACE/vFqXPjapNpQ/s320/pl_sql_exec.JPG" alt="" id="BLOGGER_PHOTO_ID_5127328095709675794" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;3) Register the Concurrent program and any input parameters. Note the output file type should be XML.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_mKQhuTMPcMk/Ryft2L-nwSI/AAAAAAAAACM/FgnCqXfj5FU/s1600-h/pl_sql_PROG.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_mKQhuTMPcMk/Ryft2L-nwSI/AAAAAAAAACM/FgnCqXfj5FU/s320/pl_sql_PROG.JPG" alt="" id="BLOGGER_PHOTO_ID_5127328215968760098" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Now the remainder of the steps are same as used in "Reports + XML Publisher" approach&lt;br /&gt;&lt;br /&gt;4) Run the above program to generate the XML data file and use it to  create the RTF template using template builder.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_mKQhuTMPcMk/Ryfu2r-nwUI/AAAAAAAAACc/utbvOoFNTTw/s1600-h/rtf.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_mKQhuTMPcMk/Ryfu2r-nwUI/AAAAAAAAACc/utbvOoFNTTw/s320/rtf.jpg" alt="" id="BLOGGER_PHOTO_ID_5127329324070322498" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;5) We need to create a Data Definition for this object in XML Publisher. To do this, log into Application with "XML Publisher Administrator" responsibility. Click on "Data Definition" function.&lt;br /&gt;While creating Data Definition, ensure that the Data Definition Code remains SAME as the Concurrent Program Short Name. This allows Concurrent manager to bind the output of Conc report prog output to the template, by finding same name template.&lt;br /&gt;Upload the template in Template manager.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_mKQhuTMPcMk/Ryfvf7-nwWI/AAAAAAAAACs/qfSC4z_O1Rs/s1600-h/pl_sql_templ.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_mKQhuTMPcMk/Ryfvf7-nwWI/AAAAAAAAACs/qfSC4z_O1Rs/s320/pl_sql_templ.JPG" alt="" id="BLOGGER_PHOTO_ID_5127330032739926370" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;6) Now we need to register this template with XML Publisher. Click on the "Templates" tab.&lt;br /&gt;Fill all the required information. Select the Data Definition we created above. Select the language as English and leave territory empty.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_mKQhuTMPcMk/Ryfva7-nwVI/AAAAAAAAACk/VL3XT8DSyEg/s1600-h/pl_sql_dd.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_mKQhuTMPcMk/Ryfva7-nwVI/AAAAAAAAACk/VL3XT8DSyEg/s320/pl_sql_dd.JPG" alt="" id="BLOGGER_PHOTO_ID_5127329946840580434" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;7) Now  run the program and check the output.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_mKQhuTMPcMk/Ryfv1L-nwXI/AAAAAAAAAC0/Bl4PFnsqgz4/s1600-h/output1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_mKQhuTMPcMk/Ryfv1L-nwXI/AAAAAAAAAC0/Bl4PFnsqgz4/s320/output1.jpg" alt="" id="BLOGGER_PHOTO_ID_5127330397812146546" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;That's it ...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Cheers ..&lt;br /&gt;Neeraj&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5010259590027019782-8166611421544285959?l=ora-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ora-apps.blogspot.com/feeds/8166611421544285959/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5010259590027019782&amp;postID=8166611421544285959&amp;isPopup=true' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5010259590027019782/posts/default/8166611421544285959'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5010259590027019782/posts/default/8166611421544285959'/><link rel='alternate' type='text/html' href='http://ora-apps.blogspot.com/2007/10/pl-sql-stored-procedure-xml-publisher.html' title='PL SQL Stored Procedure + XML Publisher'/><author><name>Neeraj Srivastava</name><uri>http://www.blogger.com/profile/15569140745802625486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_mKQhuTMPcMk/R2Y1jsHfeLI/AAAAAAAAAEQ/gu4gXAsjA-k/S220/Chalk_Charcoal_new.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_mKQhuTMPcMk/RyftvL-nwRI/AAAAAAAAACE/vFqXPjapNpQ/s72-c/pl_sql_exec.JPG' height='72' width='72'/><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5010259590027019782.post-8965807646719337799</id><published>2007-10-17T21:00:00.000-07:00</published><updated>2007-10-17T21:55:27.288-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XML Publisher'/><title type='text'>Reports + XML Publisher</title><content type='html'>This is one of the easiest and simplest combinations to use with XML Publisher. This approach allows us to use any existing RDF report to generate XML data and bind it with a Template created in XML Publisher.&lt;br /&gt;Lets go through the steps involved in this approach. In the example used, we will use simple query based on EMP and DEPT tables.&lt;br /&gt;&lt;br /&gt;1) Write the RDF with the query to get the required output.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_mKQhuTMPcMk/RxbfbMthQNI/AAAAAAAAAAc/zbuV7LL8cGg/s1600-h/rdf1.jpg"&gt;&lt;img style="cursor: pointer;" src="http://bp1.blogger.com/_mKQhuTMPcMk/RxbfbMthQNI/AAAAAAAAAAc/zbuV7LL8cGg/s320/rdf1.jpg" alt="" id="BLOGGER_PHOTO_ID_5122527284542128338" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;2) Register the executable with Apps. Note the Executable name.&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_mKQhuTMPcMk/RxbflcthQOI/AAAAAAAAAAk/pctLKVr3EIU/s1600-h/executable.jpg"&gt;&lt;img style="cursor: pointer;" src="http://bp2.blogger.com/_mKQhuTMPcMk/RxbflcthQOI/AAAAAAAAAAk/pctLKVr3EIU/s320/executable.jpg" alt="" id="BLOGGER_PHOTO_ID_5122527460635787490" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;3) Register the Concurrent Program with Apps. Check the output to XML&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_mKQhuTMPcMk/RxbfusthQPI/AAAAAAAAAAs/Fg5Cvdhk5NQ/s1600-h/program.jpg"&gt; &lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_mKQhuTMPcMk/RxblQsthQVI/AAAAAAAAABc/So5Jx8uUbDk/s1600-h/program.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_mKQhuTMPcMk/RxblQsthQVI/AAAAAAAAABc/So5Jx8uUbDk/s320/program.jpg" alt="" id="BLOGGER_PHOTO_ID_5122533701223268690" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;4) Just Run the report to get the XML output. Save the output file to local disk. We will use this while generating the template.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_mKQhuTMPcMk/Rxbf5cthQQI/AAAAAAAAAA0/JedPXcZ3Dko/s1600-h/conc_run.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_mKQhuTMPcMk/Rxbf5cthQQI/AAAAAAAAAA0/JedPXcZ3Dko/s320/conc_run.jpg" alt="" id="BLOGGER_PHOTO_ID_5122527804233171202" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;5)  XML Data looks something like this :&lt;br /&gt;&lt;xmlpub&gt;&lt;/xmlpub&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_mKQhuTMPcMk/Rxbmx8thQXI/AAAAAAAAABs/gAGA3ZZ0hW0/s1600-h/xml.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_mKQhuTMPcMk/Rxbmx8thQXI/AAAAAAAAABs/gAGA3ZZ0hW0/s320/xml.jpg" alt="" id="BLOGGER_PHOTO_ID_5122535371965546866" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;6) Now we will create a Template using Oracle XML Publisher Desktop Client.  Open a New RTF file and save it. (See guide to learn more on creating RTF templates).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_mKQhuTMPcMk/RxbnJsthQYI/AAAAAAAAAB0/KQ6OBLnjKtY/s1600-h/rtf.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_mKQhuTMPcMk/RxbnJsthQYI/AAAAAAAAAB0/KQ6OBLnjKtY/s320/rtf.jpg" alt="" id="BLOGGER_PHOTO_ID_5122535779987440002" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;7) We need to create a Data Definition for this object in XML Publisher. To do this, log into Application with "XML Publisher Administrator" responsibility.  Click on "Data Definition" function.&lt;br /&gt;While creating Data Definition, ensure that the Data Definition Code remains SAME as the Concurrent Program Short Name. This allows Concurrent  manager to bind the output of Conc report prog output to the template, by finding same name template.&lt;br /&gt;Upload the template in Template manager.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_mKQhuTMPcMk/RxbjEsthQRI/AAAAAAAAAA8/zjJim2K6CrU/s1600-h/DD.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_mKQhuTMPcMk/RxbjEsthQRI/AAAAAAAAAA8/zjJim2K6CrU/s320/DD.jpg" alt="" id="BLOGGER_PHOTO_ID_5122531296041582866" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;8) Now we need to register this template with XML Publisher.  Click on the "Templates" tab.&lt;br /&gt;Fill all the required information. Select the Data Definition we created above. Select the language as English and leave territory empty.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_mKQhuTMPcMk/RxblrcthQWI/AAAAAAAAABk/STyTP1DUD7c/s1600-h/templ1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_mKQhuTMPcMk/RxblrcthQWI/AAAAAAAAABk/STyTP1DUD7c/s320/templ1.jpg" alt="" id="BLOGGER_PHOTO_ID_5122534160784769378" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;9) Voila !! We are done with the setup and just need to run the concurrent program to generate the output in PDF. When we raise the concurrent request, the Concurrent manager looks for a Template with the same Data Definition code as the Concurrent Program short name and binds the XML data with the template a Runtime to generate the required output.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_mKQhuTMPcMk/RxbkLcthQTI/AAAAAAAAABM/Wf09MYZLQGA/s1600-h/conc_run_1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_mKQhuTMPcMk/RxbkLcthQTI/AAAAAAAAABM/Wf09MYZLQGA/s320/conc_run_1.jpg" alt="" id="BLOGGER_PHOTO_ID_5122532511517327666" border="0" /&gt;&lt;/a&gt; This is how output would look like :&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_mKQhuTMPcMk/RxbkgsthQUI/AAAAAAAAABU/UIBUpKV_jYw/s1600-h/output1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_mKQhuTMPcMk/RxbkgsthQUI/AAAAAAAAABU/UIBUpKV_jYw/s320/output1.jpg" alt="" id="BLOGGER_PHOTO_ID_5122532876589547842" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;With a little more work on the Template, we can improve the output look based on the requirement without ever having to touch the code.&lt;br /&gt;&lt;br /&gt;Cheers !!&lt;br /&gt;~Neeraj&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5010259590027019782-8965807646719337799?l=ora-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ora-apps.blogspot.com/feeds/8965807646719337799/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5010259590027019782&amp;postID=8965807646719337799&amp;isPopup=true' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5010259590027019782/posts/default/8965807646719337799'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5010259590027019782/posts/default/8965807646719337799'/><link rel='alternate' type='text/html' href='http://ora-apps.blogspot.com/2007/10/reports-xml-publisher.html' title='Reports + XML Publisher'/><author><name>Neeraj Srivastava</name><uri>http://www.blogger.com/profile/15569140745802625486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_mKQhuTMPcMk/R2Y1jsHfeLI/AAAAAAAAAEQ/gu4gXAsjA-k/S220/Chalk_Charcoal_new.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_mKQhuTMPcMk/RxbfbMthQNI/AAAAAAAAAAc/zbuV7LL8cGg/s72-c/rdf1.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5010259590027019782.post-5134506920107844547</id><published>2007-10-15T20:59:00.001-07:00</published><updated>2007-10-17T20:49:51.924-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XML Publisher'/><title type='text'>Installing XML Publisher Desktop Client</title><content type='html'>To create templates we need to in Desktop Client provided by Oracle. This tool is used for &lt;span class="bodycopy"&gt;building and testing of layout templates.&lt;br /&gt;This installer consists of a plugin to MS Word &lt;/span&gt;&lt;span class="bodycopy"&gt;for the building of RTF templates and the Template Viewer, for testing and debugging all templates.&lt;br /&gt;&lt;br /&gt;Use the following URL to download the client :&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a href="http://http//www.oracle.com/technology/products/xml-publisher/xmlpclient.html"&gt;&lt;span class="bodycopy"&gt;http://www.oracle.com/technology/products/xml-publisher/xmlpclient.html&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;span class="bodycopy"&gt;&lt;br /&gt;Once download completes, unzip the file and just run the Setup program, which will guide you through the steps in installation.&lt;br /&gt;&lt;br /&gt;Once the installation is complete, run MS Word.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_mKQhuTMPcMk/RxQ4XMthQMI/AAAAAAAAAAU/klp_QiA-9SU/s1600-h/xmlpub_word.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_mKQhuTMPcMk/RxQ4XMthQMI/AAAAAAAAAAU/klp_QiA-9SU/s320/xmlpub_word.jpg" alt="" id="BLOGGER_PHOTO_ID_5121780647427391682" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span class="bodycopy"&gt;&lt;br /&gt;As you can see, it creates a Toolbar and a Menu. Explore through these to get to know more of it options and capabilities.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Cheers !!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5010259590027019782-5134506920107844547?l=ora-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ora-apps.blogspot.com/feeds/5134506920107844547/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5010259590027019782&amp;postID=5134506920107844547&amp;isPopup=true' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5010259590027019782/posts/default/5134506920107844547'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5010259590027019782/posts/default/5134506920107844547'/><link rel='alternate' type='text/html' href='http://ora-apps.blogspot.com/2007/10/installing-xml-publisher-desktop-client.html' title='Installing XML Publisher Desktop Client'/><author><name>Neeraj Srivastava</name><uri>http://www.blogger.com/profile/15569140745802625486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_mKQhuTMPcMk/R2Y1jsHfeLI/AAAAAAAAAEQ/gu4gXAsjA-k/S220/Chalk_Charcoal_new.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_mKQhuTMPcMk/RxQ4XMthQMI/AAAAAAAAAAU/klp_QiA-9SU/s72-c/xmlpub_word.jpg' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5010259590027019782.post-2504043994585170469</id><published>2007-10-14T20:35:00.000-07:00</published><updated>2007-10-17T20:50:30.578-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XML Publisher'/><title type='text'>Find XML Publisher Version</title><content type='html'>If we are using XML Publisher, we must know what version is being used. So how do we find out the version of XML Publisher being used ? It kind of tricky as there is no screen that actually shows the product release versions.&lt;br /&gt;This can be done indirectly using different ways. Here are some I found :&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;1) From the Output document.  &lt;/span&gt;This is the easiest way and can be used by anyone to find the XML Pub version.&lt;br /&gt; From the output document (PDF,  RTF, HTML, Excel) we can extract this information by opening them and checking from some comments.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;PDF : &lt;/span&gt;Open PDF in Adobe Acrobat Reader (I am using Reader 8). Then File --&gt; Properties --&gt;  Description Tab. Look for "PDF Producer" property. It also shows the PDF version used to create the PDF.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt; RTF : &lt;/span&gt;Open RTF in Word. File --&gt; Properties --&gt; Summary Tab. Look for "Comments" prorerty.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;  HTML, Excel : &lt;/span&gt;Open it in text editor. Look for comment like "&lt;span style=""&gt;Generated by".&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;2) From the Patch applied.&lt;/span&gt;&lt;br /&gt;   Each release comes on a different patch. So we can use this information to determine the XML Pub version. But you must have database access to do this.&lt;br /&gt;&lt;br /&gt;Execute the following query :&lt;br /&gt;&lt;br /&gt;SELECT DECODE (bug_number&lt;br /&gt;         , '3554613', '4.5.0'&lt;br /&gt;         , '3263588', 'XDO.H'&lt;br /&gt;         , '3822219', '5.0.0'&lt;br /&gt;         , '4236958', '5.0.1'&lt;br /&gt;         , '4206181', '5.5.0'&lt;br /&gt;         , '4561451', '5.6.0'&lt;br /&gt;         , '4905678', '5.6.1'&lt;br /&gt;         , '5097966', '5.6.2') PATCH, bug_number&lt;br /&gt;FROM ad_bugs&lt;br /&gt;WHERE bug_number IN&lt;br /&gt;   ('3554613'&lt;br /&gt;  , '3263588'&lt;br /&gt;  , '3822219'&lt;br /&gt;  , '4236958'&lt;br /&gt;  , '4206181'&lt;br /&gt;  , '4561451'&lt;br /&gt;  , '4905678'&lt;br /&gt;  , '5097966');&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;3) From the class file version of &lt;/span&gt;&lt;strong&gt;MetaInfo.class&lt;/strong&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;     Again with each release the files get update and so do their versions. Bingo !!  Read the file and determine the version.    Oracle has given the following matrix to determine XML Pub version.&lt;br /&gt;However, you must have access to the Application Server where these files are installed, so its kinda tricky.&lt;br /&gt;This file is available at the following location :&lt;br /&gt;$OA_JAVA/oracle/apps/xdo/common/MetaInfo.class&lt;br /&gt;&lt;br /&gt;&lt;table class="MsoNormalTable" style="width: 369px; height: 210px;" border="1" cellpadding="0" cellspacing="1"&gt;  &lt;tbody&gt;&lt;tr style=""&gt;   &lt;td style="padding: 0.75pt; width: 25%;" width="25%"&gt;   &lt;p class="MsoNormal"&gt;&lt;strong&gt;Metainfo.class&lt;/strong&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0.75pt; width: 30%;" width="30%"&gt;   &lt;p class="MsoNormal"&gt;&lt;strong&gt;XML Publisher&lt;/strong&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0.75pt; width: 16%;" valign="top" width="16%"&gt;   &lt;p class="MsoNormal"&gt;&lt;strong&gt;Patch&lt;/strong&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="padding: 0.75pt;"&gt;   &lt;p class="MsoNormal"&gt;115.27&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0.75pt;"&gt;   &lt;p class="MsoNormal"&gt;XDO 5.6.2&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0.75pt;" valign="top"&gt;   &lt;p class="MsoNormal"&gt;5097966 &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="padding: 0.75pt;"&gt;   &lt;p class="MsoNormal"&gt;115.26&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0.75pt;"&gt;   &lt;p class="MsoNormal"&gt;XDO 5.6.1&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0.75pt;" valign="top"&gt;   &lt;p class="MsoNormal"&gt;4905678&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="padding: 0.75pt;"&gt;   &lt;p class="MsoNormal"&gt;115.24&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0.75pt;"&gt;   &lt;p class="MsoNormal"&gt;XDO 5.6.0&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0.75pt;" valign="top"&gt;   &lt;p class="MsoNormal"&gt;4561451&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="padding: 0.75pt;"&gt;   &lt;p class="MsoNormal"&gt;115.22&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0.75pt;"&gt;   &lt;p class="MsoNormal"&gt;XDO 5.5.0&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0.75pt;" valign="top"&gt;   &lt;p class="MsoNormal"&gt;4206181&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="padding: 0.75pt;"&gt;   &lt;p class="MsoNormal"&gt;115.21&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0.75pt;"&gt;   &lt;p class="MsoNormal"&gt;XDO 5.0.1&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0.75pt;" valign="top"&gt;   &lt;p class="MsoNormal"&gt;4236958&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="padding: 0.75pt;"&gt;   &lt;p class="MsoNormal"&gt;115.19&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0.75pt;"&gt;   &lt;p class="MsoNormal"&gt;XDO 5.0.0&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0.75pt;" valign="top"&gt;   &lt;p class="MsoNormal"&gt;3822219&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="padding: 0.75pt;" valign="top"&gt;   &lt;p class="MsoNormal"&gt;115.15&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0.75pt;" valign="top"&gt;   &lt;p class="MsoNormal"&gt;XDO 4.5.0 (XDO.H)&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0.75pt;" valign="top"&gt;   &lt;p class="MsoNormal"&gt;3263588&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="padding: 0.75pt;" valign="top"&gt;   &lt;p class="MsoNormal"&gt;115.12&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0.75pt;" valign="top"&gt;   &lt;p class="MsoNormal"&gt;XDO 4.3.0&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0.75pt;" valign="top"&gt;   &lt;p class="MsoNormal"&gt;3395631&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Shows something like this :&lt;br /&gt;$Header MetaInfo.java 115.19 2004/11/30 02:45:52 tsuzuki noship $&lt;br /&gt;&lt;br /&gt;So, now we have enough of information to know what version of XML Pub is installed before we go ahead.&lt;br /&gt;&lt;br /&gt;Cheers !!!!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5010259590027019782-2504043994585170469?l=ora-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ora-apps.blogspot.com/feeds/2504043994585170469/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5010259590027019782&amp;postID=2504043994585170469&amp;isPopup=true' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5010259590027019782/posts/default/2504043994585170469'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5010259590027019782/posts/default/2504043994585170469'/><link rel='alternate' type='text/html' href='http://ora-apps.blogspot.com/2007/10/find-xml-publisher-version.html' title='Find XML Publisher Version'/><author><name>Neeraj Srivastava</name><uri>http://www.blogger.com/profile/15569140745802625486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_mKQhuTMPcMk/R2Y1jsHfeLI/AAAAAAAAAEQ/gu4gXAsjA-k/S220/Chalk_Charcoal_new.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5010259590027019782.post-1653433650533594350</id><published>2007-10-13T16:58:00.000-07:00</published><updated>2007-10-17T20:50:42.672-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XML Publisher'/><title type='text'>XML Publisher - Overview</title><content type='html'>Of late I have been working a lot on XML Publisher. On the consulting side, most reports are being dished out using XML Publisher, or at least the Layout part using most of the current RDF for XML data.&lt;br /&gt;However, most of the presentations or documents on XML Publisher are more like sales or feature presentations. There isn't a real good how-to-do document that actually takes beginners or first time users of XML Publisher through its different capabilities. So as part of my own learning process, I created my very own "XML Publisher for Dummies", a book that I used to document different ways of using XML Pub.&lt;br /&gt;&lt;br /&gt;I am going to share some basic and simple codes samples to exploit XML Publisher capabilities.  So here we go.&lt;br /&gt;&lt;br /&gt;XML Publisher is a powerful product, (though it still has some of its own problems ) that can be used to bind that data set,generated in many ways, to a template. We can create XML data using existing RDF or PL/SQL or Java program or any other source. We can also use the Java XML Publisher APIs for that and much much more.&lt;br /&gt;&lt;br /&gt; Here is  what XML Pub is from a very simplistic point of view :&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_mKQhuTMPcMk/RxFieMthQLI/AAAAAAAAAAM/oWQjgUlPEU8/s1600-h/xmlpub.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_mKQhuTMPcMk/RxFieMthQLI/AAAAAAAAAAM/oWQjgUlPEU8/s320/xmlpub.jpg" alt="" id="BLOGGER_PHOTO_ID_5120982522244710578" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;XML Publisher is made up of the following core API components:&lt;br /&gt;&lt;br /&gt;1) &lt;span style="font-weight: bold;"&gt;PDF Form Processing Engine&lt;/span&gt;  The PDF Form Processing Engine creates a PDF document by merging a PDF template  with an XML data file.&lt;br /&gt;oracle.apps.xdo.template.FormProcessor;&lt;br /&gt;&lt;br /&gt;2) &lt;span style="font-weight: bold;"&gt;RTF Processor Engine&lt;/span&gt; The RTF processor engine takes an RTF template as input. The processor parses the template and creates an XSL-FO template, which can be used input to the FO Engine.&lt;br /&gt;oracle.apps.xdo.template.RTFProcessor;&lt;br /&gt;&lt;br /&gt;3) &lt;span style="font-weight: bold;"&gt;FO Processor Engine&lt;/span&gt;&lt;br /&gt;The FO Processor Engine is XML Publisher’s  implementation of the W3C XSL-FO&lt;br /&gt;standard. It does not represent a complete implementation of every XSL-FO&lt;br /&gt;component. The FO Processor Merges XSL and XML to produce   following output formats: Excel (HTML), PDF, RTF, or HTML.from either of the following two inputs:&lt;br /&gt;• Template (XSL) and Data (XML) combination&lt;br /&gt;• FO object&lt;br /&gt;&lt;br /&gt;oracle.apps.xdo.template.FOProcessor;&lt;br /&gt;&lt;br /&gt;4) &lt;span style="font-weight: bold;"&gt;PDF Document Merger &lt;/span&gt; The PDF Document Merger class provides a set of utilities to manipulate PDF documents.  These utilities provide optional postprocessing of PDF files to merge documents, add page numbering, and set watermarks.&lt;br /&gt;oracle.apps.xdo.common.pdf.util.PDFDocMerger;&lt;br /&gt;&lt;br /&gt;5) &lt;span style="font-weight: bold;"&gt;eText Processor&lt;/span&gt;&lt;br /&gt;Converts RTF eText templates to XSL and merges the XSL with XML to produce text&lt;br /&gt;output for EDI and EFT transmissions.&lt;br /&gt;&lt;br /&gt;6) &lt;span style="font-weight: bold;"&gt;Document Processor Engine (XML APIs)&lt;/span&gt;&lt;br /&gt;Provides batch processing functionality to access a single API or multiple APIs by&lt;br /&gt;passing a single XML file to specify template names, data sources, languages, output&lt;br /&gt;type, output names, and destinations.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5010259590027019782-1653433650533594350?l=ora-apps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ora-apps.blogspot.com/feeds/1653433650533594350/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5010259590027019782&amp;postID=1653433650533594350&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5010259590027019782/posts/default/1653433650533594350'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5010259590027019782/posts/default/1653433650533594350'/><link rel='alternate' type='text/html' href='http://ora-apps.blogspot.com/2007/10/xml-publisher-overview.html' title='XML Publisher - Overview'/><author><name>Neeraj Srivastava</name><uri>http://www.blogger.com/profile/15569140745802625486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_mKQhuTMPcMk/R2Y1jsHfeLI/AAAAAAAAAEQ/gu4gXAsjA-k/S220/Chalk_Charcoal_new.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_mKQhuTMPcMk/RxFieMthQLI/AAAAAAAAAAM/oWQjgUlPEU8/s72-c/xmlpub.jpg' height='72' width='72'/><thr:total>1</thr:total></entry></feed>
