Oracle XML Publisher管理および開発者ガイド リリース12 E05659-01 | ![]() 目次 | ![]() 前へ | ![]() 次へ |
XMLパブリッシャでは、OracleレポートをXMLパブリッシャ・レポートに容易に変換できるユーティリティを提供しています。
Oracleレポートではデータ・モデル(データ抽出ロジック)とレイアウト(表示方法)は単一のRDFファイルに一緒に埋め込まれています。一方、XMLパブリッシャでは、データ・モデルとレイアウトは別々に存在します。そのため、移行は、XMLパブリッシャのレポートに必要な個々のオブジェクトにRDFファイルを変換する2ステップのプロセスになります。
2つのステップを1つのシェル・スクリプトにまとめて、Oracleレポートを変換できます。このスクリプトは、指定されたディレクトリにある複数のOracleレポートを変換できるように修正することも可能です。次の図に、変換フローを示します。
移行ユーティリティは、XML形式でOracleレポートを受け入れます。この形式は、Oracle Reports 9i以降でのみサポートされています。Oracle Applications Release 12にアップグレードしている場合、Oracle Reports 10.1.3が含まれています。
OracleレポートのRDFファイルをXML形式に変換するには、Oracleレポート・デザイナまたは$ORACLE_HOME/binの下にあるOracleレポートのRwconverter.exeユーティリティを使用します。
次の例では、Rwconverterユーティリティを実行して、ソース・レポートraxinv.rdfを取得し、それをXMLパブリッシャの変換ユーティリティで処理できるRDF-XML形式に変換します。dtypeは必ずxmlfileとして指定する必要があります。
D:\Oracle_home\BIN>rwconverter batch=yes source= h:\reports\raxinv.rdf dest= h:\reports\raxinv.xml dtype=xmlfile overwrite=yes
DataTemplateGenerator APIを使用して、Oracleレポートのデータ・モデルをデータ・テンプレートに移行し、関連するPL/SQLロジックをPL/SQLパッケージ(仕様部と本体)に移行します。
APIは、コマンドラインまたはシェル・スクリプトからコールできます。次の出力ファイルが生成されます。
データ・テンプレート(REPORT.xml)
デフォルトPL/SQLパッケージ仕様(REPORTS.pls)
デフォルトPL/SQLパッケージ本体(REPORTB.pls)
javaw.exe oracle.apps.xdo.rdfparser.DataTemplateGenerator H:\report\raxinv.xml
出力ファイル:
PL/SQLパッケージ: H:\ report\raxinvS.pls
PL/SQL本体: H:\report\raxinvB.pls
データ・テンプレート: H:\report\raxinv_template.xml
RTFTemplateGenerator APIを使用して、OracleレポートのレイアウトをXMLパブリッシャのRTFテンプレートに移行します。
RTFテンプレートではPL/SQLがサポートされないため、レポートのフォーマット・トリガー・ロジックはプロセスで移行されません。そのかわりに、すべてのフォーマット・トリガー・コードがログ・ファイルに書き込まれます。その後、対応するPL/SQLロジックをXSLコードとして実装する必要があります。
多くのOracleレポートでは、変換の難しくない単純なif形式ロジックが使用されます。このプロセスを支援するために、結果のRTFテンプレートには、コール対象のフォーマット・トリガー名を保持するMicrosoft Wordのフォーム・フィールドが含まれます。これらのフィールドは、赤で強調表示されます。ログを参照して、元のOracleレポートで使用されている実際のPL/SQLコードを確認できます。
APIは、コマンドラインまたはシェル・スクリプトからコールできます。次の出力ファイルが生成されます。
RTFテンプレート
ログ・ファイル
javaw.exe oracle.apps.xdo.rdfparser.RTFTemplateGenerator H:\report\raxinv.xml
出力ファイル:
RTFテンプレート: H:\ report\ raxinv.rtf
ログ・ファイル: H:\report\raxinv.log
変換APIには、以下のような既知の問題があります。
複雑なOracleレポートの中には、生成されたデータ・テンプレートまたはPL/SQLで、手動訂正が必要なマイナー・エラーが発生する場合があります。
フォーマット・トリガーはサポートされません。フォーマット・トリガー・ロジックは、XSLTを使用して別途実装する必要があります。
データ・テンプレートでは、パラメータとして集計列を参照する算式列と、同じデータ・ソース/データ問合せに属する集計列を参照する算式列のシナリオはサポートされません。データ・テンプレートですべての算式列がselect文に移動されるため、算式の実行中は集計列の値を使用できなくなるからです。
移行対象の3つのコンポーネントを1つのシェル・スクリプトにまとめて、プロセスを完全に自動化できます。さらに、スクリプトは、単一のレポート・ファイルに対してだけでなく、指定されたディレクトリ内のすべてのレポートに対して実行できるように修正することも可能です。
このスクリプトは、ディレクトリ内のすべてのRDFを変換します。次のJavaライブラリが必要です。
Collections.zip: Sun Microsystems社から入手可能
xmlparserv2-904: JAVA_TOPディレクトリから入手可能
Oracle Applications JAVA_TOPへのポインタ(必要なXMLパブリッシャ・ライブラリが格納される場所)
次に、注釈付きのサンプル・スクリプトを示します。
#!/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