プライマリ・コンテンツに移動
Oracle® Forms Oracle Forms 6iからOracle Forms 12cへのアップグレード
12c (12.2.1.3.0)
E90223-01
目次へ移動
目次

前へ
前へ
次
次へ

14 Oracle Reportsとの統合

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

この節の内容は以下のとおりです。

14.1 Oracle Reportsとの統合について

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

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

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

Oracle FormsとReportsの統合の詳細は、次を参照してください。

14.1.1 Oracle FormsでのReportsの表示

Oracle FormsでReportsを表示するために実行する必要がある手順。

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

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

  • WEB.SHOW_DOCUMENTビルトイン

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

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

 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;

例: 追加の詳細

  • レポートを同期式でコールすると、サーバーでレポートが処理されている間、待機する必要があります。長時間実行する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.1.2 RUN_REPORT_OBJECTでのパラメータ・リストの使用

クライアント/サーバー・モードのときにRUN_PRODUCTで使用されていたパラメータ・リストは、reportsをコールする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

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

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

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

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

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

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

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

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

14.1.3 Oracle Formsでの手動のReportsのアップグレード

特定の手順を使用して、Oracle FormsでReportsを手動でアップグレードすることもできます。

「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/technetwork/developer-tools/forms/documentation/techlisting-084882.htmlのホワイト・ペーパーを参照してください。