Oracle Business Intelligence Publisher管理者および開発者ガイド リリース10.1.3.4 B51054-02 | ![]() 目次 | ![]() 前へ | ![]() 次へ |
この章では、次のトピックについて説明します。
BI Publisherを使用すれば、After Reportトリガーとしてレポートの生成後に実行するHTTP通知を設定できます。これにより、BI Publisherを他のOracleアプリケーションやサード・パーティ・アプリケーション(BPELプロセス、コンテンツ管理アプリケーション、その他のワークフロー・アプリケーションなど)と統合できます。
BI Publisherでレポートが生成されるとすぐに通知が実行されることに注意してください。現時点では、レポートの生成からサーブレットへのHTTP通知の間に、リスナーまたはプロセスをコール・バックしたり導入したりする機能はありません。
レポートに対してAfter Reportトリガーを設定するには、次のタスクが必要です。
この章で説明されているように、サーブレットまたはサード・パーティ・アプリケーションを作成します。
BI Publisherの「管理」ページでサーブレットURLをHTTP配信サーバーとして登録します。「HTTPサーバーの設定」を参照してください。
レポートのスケジュールを作成して、HTTP通知を選択します。『Oracle Business Intelligence Publisherレポート・デザイナーズ・ガイド』の「レポートのスケジュール」を参照してください。
レポートの生成が完了すると、HTTP通知が後処理としてコールされ、次の追加パラメータとともに(HTTPサーバーとして登録した)URLが実行されます。
jobid
report_url
status
statusの値は、成功を表す「S」、または失敗を表す「F」になります。
その後、リモート・アプリケーションは、BI PublisherのAPIやWebサービスを使用してこれらのパラメータにアクセスし、レポート出力やXMLデータなどのジョブの詳細にアクセスできます。サンプル・コードを次に示します。
String id= request.getParameter("jobid");
String report_url = request.getParameter("report_url");
String status = request.getParameter("status");
try
{
Scheduler sch =new SchedulerImpl();
JobHistoryInfo[] jobs= sch.getJobHistoryInfo(id);
for (int i = 0; i<jobs.length; i++){
JobHistoryInfo outinfo = jobs[i];
FileOutputStream fos = new FileOutputStream(targetDir+id+".pdf");
byte[] buf = new byte[256];
int read = 0;
InputStream in = outinfo.getDocumentOutput();
while ((read =in.read(buf)) > 0) {
fos.write(buf, 0, read);
}
in.close();
fos.close();
}
} catch (Exception e) {
Logger.log(e);
}
次に、HTTP通知として呼び出されるサンプルのHTTPサーブレットを示します。この例では、サーブレットがBI Publisherアプリケーションと同じサーバー上にデプロイされます。サーブレットをリモート・サーバー上にデプロイする場合は、BI PublisherのWebサービスAPIを使用してレポートの詳細にアクセスします。BI PublisherのWebサービスAPIの詳細は、「BI PublisherのWebサービスの使用」を参照してください。
このサンプルでは、サーブレットでレポート出力を取得するために、HTTPリクエストから提供される情報をBI Publisher Webサービスの入力として使用します。このレポート出力は、後で承認ワークフローに挿入するために使用される場合があります。
ackage oracle.xdo.service.scheduling;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import oracle.xdo.common.log.Logger;
import oracle.xdo.server.JobHistoryInfo;
import oracle.xdo.server.Scheduler;
import oracle.xdo.server.impl.SchedulerImpl;
public class HttpNotificationTest extends HttpServlet
{
public String targetDir = "c://oc4j1013/j2ee/home/applications/xmlpserver/xmlpserver/output/";
public void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException
{
doPost(request, response);
}
public void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException
{
String id= request.getParameter("jobid");
String report_url = request.getParameter("report_url");
String status = request.getParameter("status");
try
{
Scheduler sch =new SchedulerImpl();
JobHistoryInfo[] jobs= sch.getJobHistoryInfo(id);
for (int i = 0; i<jobs.length; i++){
JobHistoryInfo outinfo = jobs[i];
FileOutputStream fos = new FileOutputStream(targetDir+id+"."+getFileExtension(outinfo.getDocumentDataContentType()));
byte[] buf = new byte[256];
int read = 0;
InputStream in = outinfo.getDocumentOutput();
while ((read =in.read(buf)) > 0) {
fos.write(buf, 0, read);
}
in.close();
fos.close();
}
} catch (Exception e) {
Logger.log(e);
}
}
public static String getFileExtension(String contentType)
{
String ext="pdf";
if (contentType == "application/pdf")
ext="pdf" ;
else if (contentType == "text/html; charset=UTF-8")
ext="html";
return ext;
}
Copyright © 2004, 2008, Oracle and/or its affiliates. All rights reserved.