ヘッダーをスキップ
Oracle® Forms Oracle Forms 6iからOracle Forms 11g
へのアップグレード11gリリース1(11.1.1)

B61379-01
  ドキュメント・ライブラリへ
ライブラリ
製品リストへ
製品
目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

14 Oracle Reportsとの統合

この章は、次の項で構成されています。

14.1 概要

バージョン9.0.2以降のOracle Formsには、Oracle Graphics6iが付属しなくなりました。また、チャート・ウィザードもFormsから削除されています。11g以降は、Graphicsのランタイム統合も削除されています。この章では、既存のReportsアプリケーションをフォームからコールする方法を説明します。

14.2 Oracle Reportsとの統合について

Oracle Formsにアップグレードされたフォームに新規および既存のReportsアプリケーションを埋め込むことができます。

Reportsクライアントのランタイム・エンジンを使用してReportsをWebに出力できなくなりました。Forms 5.0以降は、統合されたレポート機能を実行するために、RUN_REPORT_OBJECTビルトインがForms Developerに用意されています。統合されたOracle ReportsをOracle FormsのRUN_PRODUCTを使用して実行する方法は、このリリースではサポートされません。11gでは、このビルトインを使用するとコンパイル・エラーが発生します。

バージョン9.0.2以降のOracle FormsおよびOracle ReportsはWebベース専用になったため、クライアント/サーバーのランタイム・エンジンは提供されません。したがって、Oracle Formsアプリケーションの統合レポートは、RUN_REPORT_OBJECTビルトインおよびOracle Fusion Middleware Reports Servicesを使用するように再コーディングする必要があります。

Oracle FormsおよびReportsの統合の詳細は、Oracle Technology NetworkのWebサイト(http://www.oracle.com/technology/products/forms/)の「Integrating OracleAS Reports in OracleAS Forms」を参照してください。

14.2.1 Oracle FormsでのReportsの表示

フォームにOracle Reportsアプリケーションが埋め込まれている場合、そのフォームをOracle Formsにアップグレードするには、Oracle Reportsへの統合されたコールを、次のビルトインを使用するように変更します。

  • RUN_REPORT_OBJECTビルトイン(RUN_PRODUCTビルトインを使用してReportsをコールしないでください)

  • WEB.SHOW_DOCUMENTビルトイン

統合されたOracle ReportsをOracle FormsのRUN_PRODUCTを使用して実行する方法は、このリリースではサポートされません。11gでは、このビルトインを使用するとコンパイル・エラーが発生します。RUN_REPORT_OBJECTを使用するようにアプリケーションをアップグレードするためのツールとして、Migration Assistantが提供されています。詳細は、第2章「Oracle Forms Migration Assistantの使用」を参照してください。

14.2.2

次の例では、RUN_REPORT_OBJECTビルトインを使用してレポートを実行します。ここでは、Oracle Formsに定義されているreport_objectノードを"report_node1"と仮定します。ユーザー定義のReportsパラメータ"p_deptno"が、"dept.deptno"フィールドの値を使用してFormsから渡されます。Reportsパラメータ・フォームは抑止されます。この例で使用されているロジックの詳細は、「例の説明」を参照してください。

/* The following example runs a report using the RUN_REPORT_OBJECT Built-in. The
 report_object node defined in Forms Developer is assumed to be "report_node1". A
 user-defined Reports parameter "p_deptno" is passed by Forms using the value in
 the "dept.deptno" field. The Reports parameter form is suppressed */


 DECLARE
 v_report_id              Report_Object;
 vc_report_job_id                  VARCHAR2(100);  /* unique id for each Report      request */
 vc_rep_status                    VARCHAR2(100);           /* status of the Report job */
          
 BEGIN
        /* Get a handle to the Report Object itself. */
        v_report_id:= FIND_REPORT_OBJECT('report_node1');
        SET_REPORT_OBJECT_PROPERTY(v_report_id,REPORT_COMM_MODE, SYNCHRONOUS);
        SET_REPORT_OBJECT_PROPERTY(v_report_id,REPORT_DESTYPE,CACHE);
 
 /* Define the Report output format and the name of the Reports Server as well as
 a user-defined parameter, passing the department number from Forms to the Report.
 The Reports parameter form is suppressed by setting  paramform  to "no". */
        SET_REPORT_OBJECT_PROPERTY(v_report_id,REPORT_DESFORMAT, '<HTML|HTMLCSS|PDF|RTF|XML|DELIMITED>');
        /* replace <ReportServerTnsName> with the name of the Reports Services as defined
 in your tnsnames.ora file */
        SET_REPORT_OBJECT_PROPERTY(v_report_id,REPORT_SERVER, '<ReportServerTnsName>');
        SET_REPORT_OBJECT_PROPERTY(v_report_id,REPORT_OTHER, 'p_deptno='||:dept.deptno||'paramform=no');
        /* finally, run the report and retrieve the Reports job_id as a handle to the
 Reports process */
        vc_report_job_id:=RUN_REPORT_OBJECT(report_id);
 
 /*The report output is not delivered automatically to the client, which is okay
 because the Web is a request model. Thus the next step is to check if the report
 finished. */
 
        vc_rep_status := REPORT_OBJECT_STATUS(vc_report_job_id);
        IF vc_rep_status='FINISHED' THEN
 /* Call the Report output to be displayed in a separate browser window. The URL
 for relative addressing is only valid when the Reports Server is on the same host
 as the Forms Server. For accessing a Remote Reports Server on a different
 machine, you must use the prefix http://hostname:port/ */
 web.show_document ('/<virtual path>/<reports cgi or servlet name>/getjobid='||
 vc_report_job_id ||'?server='|| '<ReportServerTnsName>','_blank');
        ELSE
        message ('Report failed with error message '||rep_status);
        END IF;
END;

14.2.3 例の説明

  • レポートを同期式でコールすると、サーバーでレポートが処理されている間、待機が必要になります。長時間実行するReportsでは、レポートを非同期式で開始することをお薦めします。これには、REPORT_COMM_MODEプロパティを非同期に設定し、REPORT_EXECUTION_ MODEをバッチに設定します。

    SET_REPORT_OBJECT_PROPERTY(report_id,REPORT_EXECUTION_MODE,BATCH);

    SET_REPORT_OBJECT_PROPERTY(report_id,REPORT_COMM_MODE,ASYNCHRONOUS);

  • RUN_REPORT_OBJECTビルトインをコールした後に、タイマーを作成し、When-Timer-Expiredトリガーを使用して現在のREPORT_OBJECT_STATUSを頻繁にチェックする必要があります。パフォーマンス上の理由により、このタイマーは1分間に5回以上実行しないでください。レポートが生成された後、When-Timer-ExpiredトリガーによってWEB.SHOW_DOCUMENTビルトインがコールされ、一意のjob_idで識別されるReports出力ファイルがクライアントのブラウザにロードされます。


    注意:

    タイマーは、不要になったら必ず削除してください。

    次の例は、Report_Object_StatusをチェックするWhen-Timer-Expiredトリガーを示しています。

    (...)  
     /* :global.vc_report_job_id needs to be global because the information about
     the Report job_id is shared between the trigger code that starts the Report
     and the When-Trigger-Expired trigger that checks the current Report status. */
     vc_rep_status:= REPORT_OBJECT_STATUS(:global.vc_report_job_id);
     IF vc_rep_status='FINISHED' THEN
     web.show_document ('/<virtual path>/<reports cgi or servlet name>/getjobid='||
     vc_report_job_id ||'?server='|| '<ReportServerTnsName>','_blank');
     ELSIF vc_rep_status not in ('RUNNING','OPENING_REPORT','ENQUEUED') THEN
            message (vc_rep_status||'  Report output aborted');
      END IF;
    (...)
    

14.2.4 RUN_REPORT_OBJECTでのパラメータ・リストの使用

クライアント/サーバー・モードのときにRUN_PRODUCTで使用されていたパラメータ・リストは、Oracle Fusion Middleware Reports ServicesをコールするRUN_REPORT_OBJECTでも使用できます。システム・パラメータをSet_Report_Object_Propertyを使用して設定する必要があります。RUN_REPORT_OBJECTでパラメータ・リストを使用するための構文は、次のとおりです。

report_job_id:=run_report_object(report_id,paramlist_id);

paramlist_idは、RUN_PRODUCTで使用されるIDと同じIDです。

パラメータ設定には次のものを使用できます。

  • REPORT_COMM_MODE: Batch、Runtime

  • REPORT_EXECUTION_MODE: Synchronous、Asynchronous

  • REPORT_DESTYPE: FILE、PRINTER、MAIL、CACHE、PREVIEW、FTP、FAX、WEBDAV、ORACLEPORTAL、ORACLEWIRELESS、SECUREPDF、BLOBDESTINATION

  • REPORT_FILENAME: レポートのファイル名(CACHEと一緒には使用しません)

  • REPORT_DESNAME: レポートの宛先名 (CACHEと一緒には使用しません)

  • REPORT_DESFORMAT: レポートの宛先のフォーマット

  • REPORT_SERVER: レポートのサーバー名

その他の設定は次のとおりです。

  • Reports CGI名は、"rwcgi.sh"(UNIX)および"rwcgi.exe"(Windows)です。

  • Reportsサーブレットのデフォルト名は"rwservlet"です。

  • Reportsサーブレットの仮想パスは/reports/です。

14.2.5 アップグレード手順

第2章「Oracle Forms Migration Assistantの使用」で説明しているように、Forms Migration Assistantを使用すると、統合されたReportsコールをOracle Formsモジュール内で変更できます。Migration Assistantは、Run_ProductコールをReportsにリダイレクトしてRun_Report_ObjectビルトインとReports Servicesが使用されるようにするコードをアプリケーション・モジュールに追加します。変換後は、Forms 6iでRun_Productおよびランタイム・エンジンを使用する場合と同じ品質が提供されます。

Oracle FormsでReportsを手動でアップグレードする手順は次のとおりです。

  1. Run_Productのすべての状態変化を検索します。

  2. これらのコールに使用されているパラメータ・リストを特定し、検索します。

  3. desnameやdestypeなど、Reportsのすべてのシステム・パラメータ設定をパラメータ・リストから削除します。

  4. Oracle FormsまたはForms 6i Builderに定義されているReportsノード名のReportsノードIDを検索します。

  5. PL/SQLで、DESNAME、REPORT_SERVER、DESFORMAT、DESTYPE、COMM_MODEおよびEXECUTION_MODEにSet_Report_Object_Propertyコードを作成します。

  6. Run_Report_Object(report_node_id, paramlist_id)を使用して、Run_Product用に作成されているパラメータ・リストを再利用します。


    注意:

    Run_Report_Objectを使用するためにForms 6iのOracle Reportsへのコールを変更する方法については、http://www.oracle.com/technology/products/forms/にあるホワイトペーパーで詳しく説明しています。