2011/11/07

BI Publisher の Java APIを使用する(Generate PDF with BI Publisher Java API)


Oracle BI Publisherが公開しているAPIは非常に有用です。これらのAPIを使用することで、複雑な出力条件を実装した外部アプリと、BI Publisherのレポート生成エンジン部分を連携させることが可能です。
マニュアルは以下のURLで参照できます。
http://download.oracle.com/docs/cd/E15586_01/fusionapps.1111/e20838/javaapis.htm

残念なことに、BI Publisher 11gではAPIの仕様が変更されており、10gとの互換性が一部失われています。かつ、仕様変更についての情報は提供されていないという不親切な状況が続いています。
今回、10gと同様のコーディングを11gで実装する方法が判明したので紹介します。バージョンは11.1.1.3です。
※11g固有のAPI使用方法については、判明次第、紹介したいと思います。


【事前準備】
マニュアルの「7.2 Prerequisites」に従い、各jarファイルにクラスパスを設定します。マニュアルにはxdocore.jarと記載されていますが、これはxdo-core.jarの誤記です。ファイル名が10gと11gで変わっています。
また、マニュアルには記載がありませんが、xdo-server.jarも併せて必要です。このJARにはデータソースからXMLファイルを出力するためのdataengineクラスが含まれています。

【処理の概要】
処理の概要図はマニュアルに記載されています。
今回は以下の順に処理を行います。
・データソースからデータを抽出し、XMLファイルを生成する。
・RTFテンプレートからXSLファイルを生成する。
・XMLファイルとXSLファイルからPDFファイルを生成する。

【ソース】
最小構成のソースは以下の通りです。
List 1:

import java.sql.DriverManager; import java.sql.Connection; // (*1) import oracle.xdo.dataengine.v1.*; // xdo-server.jar (*2) import oracle.xdo.template.FOProcessor; // xdo-core.jar import oracle.xdo.template.RTFProcessor; // xdo-core.jar public class Sample1 { public static void main(String[] args) throws Exception { // generate data XML file - select from Oracle database. DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); Connection con = DriverManager.getConnection("jdbc:oracle:thin:@dbsrv:1521:orcl", "scott", "tiger"); DataProcessor dataProcessor = new DataProcessor(); dataProcessor.setOutput("c:\\empdata.xml"); dataProcessor.setConnection(con); dataProcessor.setSql("select * from scott.emp order by empno"); dataProcessor.processData(); // generate XSL file with the template (*.RTF) RTFProcessor rtfProcessor = new RTFProcessor("c:\\layout1.rtf"); rtfProcessor.setOutput("c:\\layout1.xsl"); rtfProcessor.process(); // generate PDF file with data XML and XSL. FOProcessor processor = new FOProcessor(); processor.setData("c:\\empdata.xml"); processor.setTemplate("c:\\layout1.xsl"); processor.setOutput("c:\\output.pdf"); processor.setOutputFormat(FOProcessor.FORMAT_PDF); processor.generate(); System.exit(0); } } 


留意する点は以下の2点です。
(*1) 11gでは、BI Publisher API のパッケージの階層が変更されています。
(*2) xdo-server.jarに含まれるoracle.xdo.dataengine.DataProcessorでは、setSqlが廃止されています。このため、oracle.xdo.dataengine.v1.DataProcessorを使用します。

【参考】
以下のURLが参考になります。

Oracle BI Publisher Blog
https://blogs.oracle.com/xmlpublisher/entry/setting_sql





[Summary]
Oracle BI Publisher provides Java API.  With these API, You can integrate your application and the document processing engine of BI Publisher.
Manual: Oracle Fusion Middleware Developer's Guide for Oracle Business Intelligence Publisher (Oracle Fusion Applications Edition)
http://download.oracle.com/docs/cd/E15586_01/fusionapps.1111/e20838/javaapis.htm

Unfortunately, the 11g API is not 100% compatible with 10g's.  And unfortunately again, as far as I've checked, no info around these changes is provided from Oracle.
But, fortunately, I found the solution somehow.


[Preparation]
Set class path for the library files listed in chapter 7.2 Prerequisites.  Note that the file name is not xdocore.jar, but it's xdo-core.jar.
Besides, you need xdo-server.jar.  This file includes DataProcessor class that generates data XML files.


[Source code]
Please see List 1.  There are two points you should note.
(*1) The package structure of BI Publisher API has been changed in 11g.
(*2) setSql method is no longer exists on oracle.xdo.dataengine.DataProcessor (xdo-server.jar).  you need to use oracle.xdo.dataengine.v1.DataProcessor instead.


[Reference]
Oracle BI Publisher Blog (English)
https://blogs.oracle.com/xmlpublisher/entry/setting_sql

0 件のコメント:

コメントを投稿