BIP_开发案例09_结合JavaCP通过BIP API输出报表dataprocess / rtfprocess / foprocess(案例)

简介: 20150814 Created By BaoXinjian 一、摘要 通过Java Concurrent Program导入XML文件和RTF文件导出PDF报表,一种官方的源码解读,通过以下三个关键程序实现 1.

20150814 Created By BaoXinjian

一、摘要


通过Java Concurrent Program导入XML文件和RTF文件导出PDF报表,一种官方的源码解读,通过以下三个关键程序实现

1. 通过DataProcess设定XML数据来源

2. 通过RtfProcess设定RTF模板来源

3. 通过FoProcess产生PDF文件

 

二、方案设计 - 代码


Step1. 创建XML数据定义文件(EmpDataTemplate.xml),并上传至服务器的/u2/VIS/visappl/gavin/concprog/目录

复制代码
<?xml version="1.0" encoding="UTF-8" ?>   
 <dataTemplate name="EmpData" description="Employee Details" Version="1.0"> <parameters> <parameter name="p_DeptNo" dataType="character" /> </parameters> <dataQuery> <sqlStatement name="Q1"> <![CDATA[ SELECT d.DEPTNO DEPTNO ,d.DNAME DNAME ,d.LOC LOC ,e.EMPNO EMPNO ,e.ENAME ENAME ,e.JOB JOB ,e.MGR MGR ,TO_CHAR(e.HIREDATE,'YYYY/MM/DD') HIREDATE ,e.SAL SAL ,nvl(e.COMM, 0) COMM FROM scott.dept d ,scott.emp e WHERE d.deptno = e.deptno AND d.deptno = nvl( :p_DeptNo, d.deptno) ]]> </sqlStatement> </dataQuery> <dataStructure> <group name="G_DEPT" source="Q1"> <element name="DEPT_NUMBER" value="DEPTNO" /> <element name="DEPT_NAME" value="DNAME" /> <element name="LOCATION" value="LOC" /> <element name="EMPLOYEE_NUMBER" value="EMPNO" /> <element name="NAME" value="ENAME" /> <element name="JOB" value="JOB" /> <element name="MANAGER" value="MGR" /> <element name="HIREDATE" value="HIREDATE" /> <element name="SALARY" value="SAL" /> <element name="COMMISSION" value="COMM" /> </group> </dataStructure> </dataTemplate>
复制代码

Step2. 创建rtf模板(EmpDataTemplate.rtf)并上传至服务器的/u2/VIS/visappl/gavin/concprog/目录:

Step3. 创建java concurrent程序(EmpDataTemplate.java)。如果不能编译通过,需到服务器上的$JAVA_TOP目录下载相关类文件(可使 用zip命令打包下载: zip -r ~/conclib ./oracle/apps/fnd/cp/*):

复制代码
package bxj.oracle.apps.ap.java;

import java.sql.Connection;  
import oracle.apps.fnd.cp.request.CpContext; import oracle.apps.fnd.cp.request.JavaConcurrentProgram; import oracle.apps.xdo.dataengine.DataProcessor; import oracle.apps.fnd.util.ParameterList; import oracle.apps.fnd.cp.request.ReqCompletion; import oracle.apps.fnd.cp.request.OutFile; import oracle.apps.fnd.cp.request.LogFile; import oracle.apps.fnd.util.NameValueType; import oracle.apps.xdo.template.RTFProcessor; import oracle.apps.xdo.template.FOProcessor; import com.sun.java.util.collections.Hashtable; import java.io.File; public class runEmpXMLConcProg implements JavaConcurrentProgram { public runEmpXMLConcProg() { } String deptNo; public void runProgram(CpContext cpContext) { ParameterList params = cpContext.getParameterList(); ReqCompletion compl = cpContext.getReqCompletion(); OutFile outFile = cpContext.getOutFile(); LogFile logFile = cpContext.getLogFile(); logFile.writeln(">>1 start ..", LogFile.STATEMENT); while (params.hasMoreElements()) { NameValueType val = params.nextParameter(); if (val.getName().equals("P_DEPTNO")) deptNo = val.getValue(); } logFile.writeln(">>2 P_DEPTNO = " + deptNo, LogFile.STATEMENT); Connection jdbcConnection = cpContext.getJDBCConnection(); try { //Initialization – instantiate the DataProcessor class// DataProcessor dataProcessor = new DataProcessor(); //Set Data Template to be executed  dataProcessor.setDataTemplate("/u2/VIS/visappl/gavin/concprog/EmpDataTemplate.xml");
logFile.writeln(">>3 dataProcessor.setDataTemplate", LogFile.STATEMENT); // Assign parameter Hashtable parameters = new Hashtable(); parameters.put("p_DeptNo", deptNo); dataProcessor.setParameters(parameters); logFile.writeln(">>4 dataProcessor.setParameters", LogFile.STATEMENT); // Set the jdbc connection dataProcessor.setConnection(jdbcConnection); logFile.writeln(">>5 dataProcessor.setConnection", LogFile.STATEMENT); // Specify the output directory and file for the data file dataProcessor.setOutput("/u2/VIS/visappl/gavin/concprog/EmpDetails.xml"); logFile.writeln(">>6 dataProcessor.setOutput", LogFile.STATEMENT); // Process the data template dataProcessor.processData(); logFile.writeln(">>6.1 dataProcessor.processData", LogFile.STATEMENT); // Convert rtf to xsl RTFProcessor rtfProcessor = new RTFProcessor("/u2/VIS/visappl/gavin/concprog/EmpDataTemplate.rtf"); logFile.writeln(">>7 new RTFProcessor()", LogFile.STATEMENT); rtfProcessor.setOutput("/u2/VIS/visappl/gavin/concprog/EmpDataTemplate.xsl"); rtfProcessor.process(); logFile.writeln(">>8 rtfProcessor.process()", LogFile.STATEMENT); // Geneate PDF FOProcessor foProcessor = new FOProcessor(); foProcessor.setData("/u2/VIS/visappl/gavin/concprog/EmpDetails.xml"); logFile.writeln(">>9 foProcessor.setData()", LogFile.STATEMENT); foProcessor.setTemplate("/u2/VIS/visappl/gavin/concprog/EmpDataTemplate.xsl"); logFile.writeln(">>10 foProcessor.setTemplate()", LogFile.STATEMENT); foProcessor.setOutput("/u2/VIS/visappl/gavin/concprog/EmpDetails001.pdf"); logFile.writeln(">>11 foProcessor.setOutput()", LogFile.STATEMENT); foProcessor.setOutputFormat(FOProcessor.FORMAT_PDF); foProcessor.generate(); logFile.writeln(">>12 foProcessor.generate() 001", LogFile.STATEMENT); compl.setCompletion(ReqCompletion.NORMAL, "Concurrent Normal Completed!"); } catch (Exception e) { logFile.writeln("Java Concurrent Program Error: "+e.toString(), LogFile.STATEMENT); compl.setCompletion(ReqCompletion.ERROR, e.toString()); } } }
复制代码

 

三、方案设计 - 应用设定


Step1. 将XML文件和RTF文件上传至服务器相应目录

Step2.  将RunProgram Class包上传至相应目录

Step3. 设定并发可执行程序

 Step4. 设定并发程式及其参数

 

四、运行测试


Step1. 调用Request

Step2. 系统会自动依次产生三个文件xsl->xml->pdf

Step3. 查看xml data文件

Step4. 查看pdf

 

Thanks and Regards

参考:LiaoDunxia - http://blog.csdn.net/t0nsha/article/details/6336872

ERP技术讨论群: 288307890
技术交流,技术讨论,欢迎加入
Technology Blog Created By Oracle ERP - 鲍新建
相关文章
|
1天前
|
API 数据安全/隐私保护 UED
探索鸿蒙的蓝牙A2DP与访问API:从学习到实现的开发之旅
在掌握了鸿蒙系统的开发基础后,我挑战了蓝牙功能的开发。通过Bluetooth A2DP和Access API,实现了蓝牙音频流传输、设备连接和权限管理。具体步骤包括:理解API作用、配置环境与权限、扫描并连接设备、实现音频流控制及动态切换设备。最终,我构建了一个简单的蓝牙音频播放器,具备设备扫描、连接、音频播放与停止、切换输出设备等功能。这次开发让我对蓝牙技术有了更深的理解,也为未来的复杂项目打下了坚实的基础。
81 58
探索鸿蒙的蓝牙A2DP与访问API:从学习到实现的开发之旅
|
1天前
|
供应链 搜索推荐 API
1688榜单商品详细信息API接口的开发、应用与收益
1688作为全球知名的B2B电商平台,为企业提供丰富的商品信息和交易机会。为满足企业对数据的需求,1688开发了榜单商品详细信息API接口,帮助企业批量获取商品详情,应用于信息采集、校验、同步与数据分析等领域,提升运营效率、优化库存管理、精准推荐、制定市场策略、降低采购成本并提高客户满意度。该接口通过HTTP请求调用,支持多种应用场景,助力企业在电商领域实现可持续发展。
22 4
|
8天前
|
监控 供应链 搜索推荐
阿里妈妈商品详情API接口:开发、应用与收益的深度剖析
阿里妈妈是阿里巴巴旗下的数字营销平台,其商品详情API接口为开发者提供了获取淘宝、天猫等电商平台商品详细信息的工具。本文介绍了该接口的开发流程、应用场景及带来的收益,揭示了其在电商生态中的重要地位。
59 6
|
8天前
|
供应链 搜索推荐 API
1688APP原数据API接口的开发、应用与收益(一篇文章全明白)
1688作为全球知名的B2B电商平台,通过开放的原数据API接口,为开发者提供了丰富的数据资源,涵盖商品信息、交易数据、店铺信息、物流信息和用户信息等。本文将深入探讨1688 APP原数据API接口的开发、应用及其带来的商业收益,包括提升流量、优化库存管理、增强用户体验等方面。
50 6
|
10天前
|
监控 搜索推荐 API
京东商品详情API接口的开发、应用与收益探索
在数字化和互联网高速发展的时代,京东通过开放商品详情API接口,为开发者、企业和商家提供了丰富的数据源和创新空间。本文将探讨该API接口的开发背景、流程、应用场景及带来的多重收益,包括促进生态系统建设、提升数据利用效率和推动数字化转型等。
35 3
|
15天前
|
供应链 搜索推荐 API
探索1688榜单商品详细信息API接口:开发、应用与收益
本文深入探讨了1688榜单商品详细信息API接口的开发与应用,涵盖接口概述、开发条件、调用方法及数据处理等内容。该API帮助企业高效获取1688平台商品信息,应用于商品信息采集、校验、同步与数据分析等领域,有效提升了企业的运营效率、库存管理、销售转化率及市场策略制定能力,降低了采购成本,提升了客户满意度。
37 9
|
4天前
|
存储 搜索推荐 API
小红书笔记详情API接口的开发、应用与收益
小红书笔记详情API接口为开发者、企业和内容创作者提供了获取平台丰富资源的通道。通过该接口,用户可以提取笔记的详细信息(如标题、正文、标签等),并应用于市场调研、竞品分析、内容创作、电商推荐等多个领域。这不仅有助于提升品牌影响力和优化用户体验,还能挖掘商业机会,促进内容创新,增强用户互动与社群凝聚力。总之,小红书笔记详情API接口为企业和个人在社交媒体领域探索新增长点提供了重要工具。
32 0
|
13天前
|
人工智能 自然语言处理 API
Multimodal Live API:谷歌推出新的 AI 接口,支持多模态交互和低延迟实时互动
谷歌推出的Multimodal Live API是一个支持多模态交互、低延迟实时互动的AI接口,能够处理文本、音频和视频输入,提供自然流畅的对话体验,适用于多种应用场景。
62 3
Multimodal Live API:谷歌推出新的 AI 接口,支持多模态交互和低延迟实时互动
|
1天前
|
JSON 安全 API
淘宝商品详情API接口(item get pro接口概述)
淘宝商品详情API接口旨在帮助开发者获取淘宝商品的详细信息,包括商品标题、描述、价格、库存、销量、评价等。这些信息对于电商企业而言具有极高的价值,可用于商品信息展示、市场分析、价格比较等多种应用场景。
|
9天前
|
前端开发 API 数据库
Next 编写接口api
Next 编写接口api