この章は、次の項で構成されています。
バージョン9.0.2以降のOracle Formsには、Oracle Graphics6iが付属しなくなりました。また、チャート・ウィザードもFormsから削除されています。12c以降は、Graphicsのランタイム統合も削除されています。この章では、既存の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ビルトインおよびOracle Fusion Middleware Reports Servicesを使用するように再コーディングする必要があります。
Oracle FormsとOracle Reportsの統合の詳細は、Oracle Technology Network (http://www.oracle.com/technetwork/developer-tools/forms)でOracleAS FormsとOracleAS Reportsの統合を参照してください。
フォームにOracle Reportsアプリケーションが埋め込まれている場合、そのフォームをOracle Formsにアップグレードするには、Oracle Reportsへの統合されたコールを、次のビルトインを使用するように変更します。
RUN_REPORT_OBJECTビルトイン(RUN_PRODUCTビルトインを使用してReportsをコールしないでください)
WEB.SHOW_DOCUMENTビルトイン
統合されたOracle ReportsをOracle FormsのRUN_PRODUCTを使用して実行する方法は、このリリースではサポートされません。12cでは、このビルトインを使用するとコンパイル・エラーが発生します。RUN_REPORT_OBJECTを使用するようにアプリケーションをアップグレードするためのツールとして、Migration Assistantが提供されています。詳細は、第2章「Oracle Forms Migration Assistantの使用」を参照してください。
次の例では、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;
レポートを同期式でコールすると、サーバーでレポートが処理されている間、待機する必要があります。長時間実行する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; (...)
クライアント/サーバー・モードのときに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
REPORT_FILENAME: レポートのファイル名(CACHEと一緒には使用しません)
REPORT_DESNAME: レポートの宛先名 (CACHEと一緒には使用しません)
REPORT_DESFORMAT: レポートの宛先のフォーマット
REPORT_SERVER: レポートのサーバー名
その他の設定は次のとおりです。
Reports CGI名は、"rwcgi.sh"(UNIX)および"rwcgi.exe"(Windows)です。
Reportsサーブレットのデフォルト名は"rwservlet"です。
Reportsサーブレットの仮想パスは/reports/です。
第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を手動でアップグレードする手順は次のとおりです。
Run_Productのすべての状態変化を検索します。
これらのコールに使用されているパラメータ・リストを特定し、検索します。
desnameやdestypeなど、Reportsのすべてのシステム・パラメータ設定をパラメータ・リストから削除します。
Oracle FormsまたはForms 6i Builderに定義されているReportsノード名のReportsノードIDを検索します。
PL/SQLで、DESNAME、REPORT_SERVER、DESFORMAT、DESTYPE、COMM_MODEおよびEXECUTION_MODEにSet_Report_Object_Propertyコードを作成します。
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/index.html にあるホワイトペーパーを参照してください。 |