在Oracle Report中,数据模型和布局是在一个RDF文件中,而在BI Publisher中,数据模型和模板已经分离出来,因此Oracle提供了从Oracle Report转换到BI Publisher的转换工具,以便我们可以转向新的报表方式。
为了转换Oracle Report RDF文件到BI Publisher中的数据源和布局文件,需要进行两个步骤的转换工作:
- 将RDF文件转换为XML格式
- 将XML格式的报表文件转换为数据模型文件和布局文件
下面是转换示意图:
一、前提条件
为了使BIP工具能够对RDF报表进行转换,必须满足以下条件:
- Oracle Report 9i以上的报表
- 需要先将RDF文件转换为XML格式
使用Oracle Report Designer另存功能或者位于$ORACLE_HOME/bin目录下的Oracle Report工具 rwconverter将RDF文件转换为XML格式的文件,如下面的例子:
D:/Oracle_home/BIN>rwconverter batch=yes source= h:/reports/raxinv.rdf dest= h:/reports/raxinv.xml dtype=xmlfile overwrite=yes
二、数据模型转换
使用DataTemplateGenerator API将Oracle Report的数据模型和PL/SQL逻辑转换为BIP中的数据模板和PL/SQL数据包。
API可以通过命令行或者脚本来调用,调用成功后会生成如下的文件:
- 数据模板(REPORT.xml)
- PL/SQL包声明文件(REPORTS.pls)
- PL/SQL包体文件(REPORTB.pls)
转换命令如下:
java oracle.apps.xdo.rdfparser.DataTemplateGenerator H:/report/raxinv.xml
oracle.apps.xdo.rdfparser.DataTemplateGenerator 位于中间服务器的$JAVA_TOP路径下,因此转换最好登录EBS中间服务器执行;
注:数据文件XML必须是完整的路径,否则转换失败
三、布局转换
使用RTFTemplateGenerator API将Oracle Report的布局转换为BIP的RTF模板文件,由于在RTF模板文件中不支持PLSQL,因此转换过程中不会转换任何的格式触发器的代码,转换器会将格式触发器中的代码写到日志中,开发人员需要在RTF模板中使用XSL来实现格式触发器的功能。
API可以通过命令行或者脚本来调用,调用成功后会生成如下的文件:
- RTF模板
- 日志文件
转换命令如下:
javaw.exe oracle.apps.xdo.rdfparser.RTFTemplateGenerator H:/report/raxinv.xml
oracle.apps.xdo.rdfparser.RTFTemplateGenerator 位于中间服务器的$JAVA_TOP路径下,因此转换最好登录EBS中间服务器执行;
注:数据文件XML必须是完整的路径,否则转换失败
四、批量转换
上面的三个步骤可以合并起来自动完成,不但可以完成一个报表的转换,还可以完成一个文件目录下所有报表的批量转换
下面是转换一个目录下所有RDF文件的脚本,需要使用如下的Java库:
- Collections.zip:从Sun Microsystems公司下载
- xmlparserv2-904:JAVA_TOP目录下
- 指向Oracle Applications JAVA_TOP(需要BIP的库)
下面是成批转换的Shell脚本:
#!/bin/sh
# This script will generate a report for each template in the current directory
# Create a variable to hold the classpath
classpath=”DIR/collections.zip:DIR/xmlparserv2-904.zip:JAVA_TOP directory”
if [ $# -eq 0 ] then
for file in *.rdf
do
echo “Processing … $file”
if test -f $file
then
# Convert the rdf to xml
echo yes | $ORACLE_HOME/bin/rwconverter.sh batch=yes source=$file dest=$file dtype=xmlfile overwrite=yes; /
#Create a variable to hold the new xml file name, this is just a simple replace
# statement
xfile=”${file//rdf/xml}”;
# Generate the data template plus plsql
echo yes | /local/java/jdk1.5.0_06/bin/java -classpath
$classpath oracle.apps.xdo.rdfparser.DataTemplateGenerator $xfile;
# Generate the RTF template
echo yes | /local/java/jdk1.5.0_06/bin/java –classpath
$classpath oracle.apps.xdo.rdfparser.RTFTemplateGenerator $xfile;
fi
done
else
echo usage: $0
echo this script will generate a data template and supporting plsql and an RTF template in the current directory
fi
可以将上面的Shell脚本另存为一个脚本文件,然后进行转换操作。
http://oracleseeker.com/2008/09/16/migrate-oracle-report-to-bi-publisher/