使用java concurrent調用xmlp api生成pdf

目的:通過java concurrent調用XML Publisher API處理XML Data Definition和rtf 模板生成PDF報表。

環境:Oracle EBS R12.0.4

技術:Oracle, Java, XML Publisher

 

步驟:

 

1.創建XML數據定義文件(EmpDataTemplate.xml)並上傳至服務器的/home/applprod/test4bip/目錄:

  1. <?xml version="1.0" encoding="UTF-8" ?>   
  2.  <dataTemplate name="EmpData" description="Employee Details" Version="1.0">  
  3.     <parameters>  
  4.         <parameter name="p_DeptNo" dataType="character" />   
  5.     </parameters>  
  6.  <dataQuery>  
  7.     <sqlStatement name="Q1">  
  8.     <!--[CDATA[   
  9.     SELECT d.DEPTNO DEPTNO  
  10.           ,d.DNAME DNAME  
  11.           ,d.LOC LOC  
  12.           ,e.EMPNO EMPNO  
  13.           ,e.ENAME ENAME  
  14.           ,e.JOB JOB  
  15.           ,e.MGR MGR  
  16.           ,e.HIREDATE HIREDATE  
  17.           ,e.SAL SAL  
  18.           ,nvl(e.COMM, 0) COMM  
  19.       FROM scott.dept d  
  20.           ,scott.emp  e  
  21.      WHERE d.deptno = e.deptno  
  22.        AND d.deptno = nvl( :p_DeptNo, d.deptno)  
  23.     ]]-->   
  24.     </sqlStatement>  
  25.   </dataQuery>  
  26.   <dataStructure>  
  27.     <group name="G_DEPT" source="Q1">  
  28.         <element name="DEPT_NUMBER"      value="DEPTNO" />   
  29.         <element name="DEPT_NAME"        value="DNAME" />   
  30.         <element name="LOCATION"     value="LOC" />   
  31.         <element name="EMPLOYEE_NUMBER" value="EMPNO" />   
  32.         <element name="NAME"         value="ENAME" />   
  33.         <element name="JOB"              value="JOB" />   
  34.         <element name="MANAGER"          value="MGR" />   
  35.         <element name="HIREDATE"     value="HIREDATE" />   
  36.         <element name="SALARY"           value="SAL" />   
  37.         <element name="COMMISSION"       value="COMM" />   
  38.     </group>  
  39.   </dataStructure>  
  40.  </dataTemplate>  

 

2.創建rtf模板(EmpDataTemplate.rtf)並上傳至服務器的/home/applprod/test4bip/目錄:

 

3.創建java concurrent程序(EmpDataTemplate.java)。如果不能編譯通過,需到服務器上的$JAVA_TOP目錄下載相關類文件(可使用zip命令打包下載: zip -r ~/conclib ./oracle/apps/fnd/cp/*):

  1. package oracle.apps.fnd.cp;  
  2.   
  3. import java.sql.Connection;  
  4. import oracle.apps.fnd.cp.request.CpContext;  
  5. import oracle.apps.fnd.cp.request.JavaConcurrentProgram;  
  6. import oracle.apps.xdo.dataengine.DataProcessor;  
  7. import oracle.apps.fnd.util.ParameterList;  
  8. import oracle.apps.fnd.cp.request.ReqCompletion;  
  9. import oracle.apps.fnd.cp.request.OutFile;  
  10. import oracle.apps.fnd.cp.request.LogFile;  
  11. import oracle.apps.fnd.util.NameValueType;  
  12. import oracle.apps.xdo.template.RTFProcessor;  
  13. import oracle.apps.xdo.template.FOProcessor;  
  14. import com.sun.java.util.collections.Hashtable;  
  15. import java.io.File;  
  16.   
  17. public class EmpDataTemplate implements JavaConcurrentProgram {  
  18.   
  19.     String deptNo;  
  20.   
  21.     public void runProgram(CpContext cpContext) {  
  22.         {  
  23.   
  24.             ParameterList params = cpContext.getParameterList();  
  25.             ReqCompletion compl = cpContext.getReqCompletion();  
  26.             OutFile outFile = cpContext.getOutFile();  
  27.             LogFile logFile = cpContext.getLogFile();  
  28.             logFile.writeln(">>1 start ..", LogFile.STATEMENT);  
  29.   
  30.             while (params.hasMoreElements()) {  
  31.                 NameValueType val = params.nextParameter();  
  32.                 if (val.getName().equals("P_DEPTNO"))  
  33.                     deptNo = val.getValue();  
  34.   
  35.             }  
  36.   
  37.             logFile.writeln(">>2 P_DEPTNO = " + deptNo, LogFile.STATEMENT);  
  38.   
  39.             Connection jdbcConnection = cpContext.getJDBCConnection();  
  40.   
  41.             try {  
  42.   
  43.                 //Initialization – instantiate the DataProcessor class//  
  44.                 DataProcessor dataProcessor = new DataProcessor();  
  45.   
  46.                 //Set Data Template to be executed  
  47.                 dataProcessor.setDataTemplate("/home/applprod/test4bip/EmpDataTemplate.xml");  
  48.                 logFile.writeln(">>3 dataProcessor.setDataTemplate",  
  49.                                 LogFile.STATEMENT);  
  50.                   
  51.                 // Assign parameter  
  52.                 Hashtable parameters = new Hashtable();  
  53.                 parameters.put("p_DeptNo", deptNo);  
  54.                 dataProcessor.setParameters(parameters);  
  55.                 logFile.writeln(">>4 dataProcessor.setParameters",  
  56.                                 LogFile.STATEMENT);  
  57.   
  58.                 // Set the jdbc connection  
  59.                 dataProcessor.setConnection(jdbcConnection);  
  60.                 logFile.writeln(">>5 dataProcessor.setConnection",  
  61.                                 LogFile.STATEMENT);  
  62.   
  63.                 // Specify the output directory and file for the data file  
  64.                 dataProcessor.setOutput("/home/applprod/test4bip/EmpDetails.xml");  
  65.                 logFile.writeln(">>6 dataProcessor.setOutput",  
  66.                                 LogFile.STATEMENT);  
  67.   
  68.                 // Process the data template  
  69.                 dataProcessor.processData();  
  70.                 logFile.writeln(">>6.1 dataProcessor.processData",  
  71.                                 LogFile.STATEMENT);  
  72.   
  73.                 // Convert rtf to xsl  
  74.                 RTFProcessor rtfProcessor =  
  75.                     new RTFProcessor("/home/applprod/test4bip/EmpDataTemplate.rtf");  
  76.                 logFile.writeln(">>7 new RTFProcessor()", LogFile.STATEMENT);  
  77.   
  78.                 rtfProcessor.setOutput("/home/applprod/test4bip/EmpDataTemplate.xsl");  
  79.                 rtfProcessor.process();  
  80.   
  81.                 logFile.writeln(">>8 rtfProcessor.process()",  
  82.                                 LogFile.STATEMENT);  
  83.   
  84.                 // Geneate PDF  
  85.                 FOProcessor foProcessor = new FOProcessor();  
  86.                 foProcessor.setData("/home/applprod/test4bip/EmpDetails.xml");  
  87.                 logFile.writeln(">>9 foProcessor.setData()",  
  88.                                 LogFile.STATEMENT);  
  89.   
  90.                 foProcessor.setTemplate("/home/applprod/test4bip/EmpDataTemplate.xsl");  
  91.                 logFile.writeln(">>10 foProcessor.setTemplate()",  
  92.                                 LogFile.STATEMENT);  
  93.   
  94.                 foProcessor.setOutput("/home/applprod/test4bip/EmpDetails001.pdf");  
  95.                 logFile.writeln(">>11 foProcessor.setOutput()",  
  96.                                 LogFile.STATEMENT);  
  97.                 foProcessor.setOutputFormat(FOProcessor.FORMAT_PDF);  
  98.                 foProcessor.generate();  
  99.                 logFile.writeln(">>12 foProcessor.generate() 001",  
  100.                                 LogFile.STATEMENT);  
  101.   
  102.                 compl.setCompletion(ReqCompletion.NORMAL,  
  103.                                     "Concurrent Normal Completed!");  
  104.   
  105.             } catch (Exception e) {  
  106.                 compl.setCompletion(ReqCompletion.ERROR, e.toString());  
  107.             }  
  108.         }  
  109.   
  110.   
  111.     }  
  112. }  

 

4.編譯EmpDataTemplate.java,將EmpDataTemplate.class上傳至服務器的$JAVA_TOP/oracle/apps/fnd/cp目錄。

 

 

 

 

 

 

 

5.定義Executable:

Executable

Short Name

Application

Execution Method

Execution File Name

Execution File Path

XXFND_JAVAXMLP

XXFND_JAVAXMLP

Application Object Library

Java Concurrent Program

EmpDataTemplate

oracle.apps.fnd.cp

 

6.定義Program,掛請求,測試。

 

7.相關文檔下載:

http://download.csdn.net/source/3209735

 

8.參考資料:

1)http://blogs.oracle.com/xmlpublisher/2007/05/howto_java_concurrent_programs.html


轉載自:http://blog.csdn.net/t0nsha/article/details/6336872

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章