使用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/目录:

[xhtml]  view plain copy
  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/*):

[java]  view plain copy
  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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值