Oracle Report迁移到BI Publisher

转自: http://oracleseeker.com/2008/09/16/migrate-oracle-report-to-bi-publisher/

在Oracle Report中,数据模型和布局是在一个RDF文件中,而在BI Publisher中,数据模型和模板已经分离出来,因此Oracle提供了从Oracle Report转换到BI Publisher的转换工具,以便我们可以转向新的报表方式。


为了转换Oracle Report RDF文件到BI Publisher中的数据源和布局文件,需要进行两个步骤的转换工作:

  1. 将RDF文件转换为XML格式
  2. 将XML格式的报表文件转换为数据模型文件和布局文件


下面是转换示意图:

Migrate_Report_BIPubliser


一、前提条件

为了使BIP工具能够对RDF报表进行转换,必须满足以下条件:

  1. Oracle Report 9i以上的报表
  2. 需要先将RDF文件转换为XML格式


使用Oracle Report Designer另存功能或者位于$ORACLE_HOME/bin目录下的Oracle Report工具 rwconverter将RDF文件转换为XML格式的文件,如下面的例子:

$ORACLE_HOME/bin/rwconverter.sh  userid=apps/apps batch=yes source=$CUX_TOP/reports/ZHS/raxinv.rdf stype=rdffile dest=$CUX_TOP/reports/raxinv.xml dtype=XMLFILE compile_all=yes OVERWRITE=yes


二、数据模型转换

使用DataTemplateGenerator API将Oracle Report的数据模型和PL/SQL逻辑转换为BIP中的数据模板和PL/SQL数据包。

API可以通过命令行或者脚本来调用,调用成功后会生成如下的文件:

  1. 数据模板(REPORT.xml)
  2. PL/SQL包声明文件(REPORTS.pls)
  3. PL/SQL包体文件(REPORTB.pls)


转换命令如下:

java oracle.apps.xdo.rdfparser.DataTemplateGenerator $CUX_TOP/reports/raxinv.xml

oracle.apps.xdo.rdfparser.DataTemplateGenerator 位于中间服务器的$JAVA_TOP路径下,因此转换最好登录EBS中间服务器执行;

注:数据文件XML必须是完整的路径,否则转换失败


三、布局转换

使用RTFTemplateGenerator API将Oracle Report的布局转换为BIP的RTF模板文件,由于在RTF模板文件中不支持PLSQL,因此转换过程中不会转换任何的格式触发器的代码,转换器会将格式触发器中的代码写到日志中,开发人员需要在RTF模板中使用XSL来实现格式触发器的功能。

API可以通过命令行或者脚本来调用,调用成功后会生成如下的文件:

  1. RTF模板
  2. 日志文件


转换命令如下:

java oracle.apps.xdo.rdfparser.RTFTemplateGenerator $CUX_TOP/reports/raxinv.xml

oracle.apps.xdo.rdfparser.RTFTemplateGenerator 位于中间服务器的$JAVA_TOP路径下,因此转换最好登录EBS中间服务器执行;

注:数据文件XML必须是完整的路径,否则转换失败


四、批量转换

上面的三个步骤可以合并起来自动完成,不但可以完成一个报表的转换,还可以完成一个文件目录下所有报表的批量转换

下面是转换一个目录下所有RDF文件的脚本,需要使用如下的Java库:

  1. Collections.zip:从Sun Microsystems公司下载
  2. xmlparserv2-904:JAVA_TOP目录下
  3. 指向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脚本另存为一个脚本文件,然后进行转换操作。

请使用浏览器的分享功能分享到微信等