2023年6月23日金曜日

GitHubにあるデータ・エクスポートのサンプル・コードを実行する

 Oracle APEXの開発ツールのギャラリからインストールできるサンプル・アプリケーションおよびスターター・アプリケーションは、GitHub - https://github.com/oracle/apex/ に置かれています。

最新のAPEXのバージョン23.1のブランチを確認すると、samples-appとstarter-appsの他にsample-codeというディレクトリがあります。


この中にdata-exportというディレクトリがあり、その下に以下の7つのSQLスクリプトが置かれています。


これらのスクリプトは、Oracle APEXの開発チームに所属するMenno Hoogendijkさんが、以前のAPEX Office Hoursで使用したものです。

これらのスクリプトの説明は32分ごろから始まります。


どのようなスクリプトかは上記のビデオで解説されていますが、実際にORDSのRESTサービスとして実装してみました。

簡単に、実施した作業を紹介します。

これらのスクリプトはサンプル・データセットEMP/DEPTを使用しています。

SQLワークショップユーティリティサンプル・データセットを開き、EMP/DEPTインストールします。インストールするデータセットの言語英語を選択します。


上記のスクリプトは実行時にAPEXセッションを作成します。APEXセッションを作成するには、APEXアプリケーションを指定する必要があるため、APEXアプリケーションを新規作成します。

アプリケーション作成ウィザードを起動し、空のアプリケーションを作成します。名前Sample Code Data Exportとします。

アプリケーションの作成をクリックします。


アプリケーションが作成されたら、アプリケーションIDの数値を確認します。APEXセッションを作成するときに、引数p_app_idにこの数値を渡します。


サンプル・コードはすべてORDSのRESTサービスとして実装します。

SQLワークショップRESTfulサービスを開き、最初にモジュールの作成を行います。


モジュール名exportベース・パス/export/とします。

モジュールの作成をクリックします。


モジュールexportが作成されます。

これからは、それぞれのサンプル・コードをRESTサービスとして実装する作業になります。

テンプレートの作成をクリックします。


URIテンプレートはスクリプト名と同じ、1-basicとします。

テンプレートの作成をクリックします。


テンプレートが作成されたので、ハンドラの作成を行います。


メソッドGETソース・タイプPL/SQLを選択します。ソースとして1-basic.sqlの内容をそのまま貼り付けます。apex_session.create_sessionの引数p_app_idの値は、先ほど作成したアプリケーションのアプリケーションIDに置き換えます。

ハンドラの作成をクリックします。


ハンドラが作成されます。

完全なURLが表示されるので、それをコピーして、ブラウザから呼び出します。


完全なURLにアクセスすると、以下のレポートが表示されます。


サンプル・コードでは引数formatを指定することより、書式をHTML以外に変更することができるようになっています。

完全なURLの末尾に?format=pdfをつけると、以下のようにHTMLの代わりにPDFが出力されます。


同様の作業を行い、2-columns.sqlを実装します。列のヘッダーの変更と、部門名でコントロール・ブレークされるように設定されています。


3-column-groups.sqlも同じ手順で実装します。カラム・グループとしてEmployeesとDepartmentを設定しています。

4-highlights.sqlも同じ手順で実装します。ハイライトを設定しています。


5-aggregates.sqlも同じ手順で実装します。合計を設定しています。

6-styling.sqlも同じ手順で実装します。ヘッダーが追加されています。


7-mail.sqlは、6-styling.sqlの出力であるレポートをメールに添付して送信します。

メールの送信するために、電子メール・テンプレートを作成します。静的識別子EMPLOYEESとします。

作成したAPEXアプリケーションの、共有コンポーネント電子メール・テンプレートを開きます。


電子メール・テンプレートの作成をクリックします。


テンプレート名Employees静的識別子EMPLOYEESとします。

電子メールの件名Employees ReportHTMLフォーマット本文#NAME#とします。レポートはメールの添付ファイルとして確認できるため、メール本体は最低限の設定だけを行なっています。

電子メール・テンプレートの作成をクリックします。


電子メール・テンプレートが作成されます。


RESTサービスとして7-mail.sqlを実装します。APEX Office HoursではメソッドとしてPOSTを選択していますが、GETでも動作します。ですので、今までのスクリプトと同様の手順で、GETハンドラを実装します。

apex_session.create_sessionの引数p_app_idの変更の他に、apex_mail.sendの引数p_fromも変更します。7-mai.sqlには開発者のメール・アドレスが記載されています。

ブラウザから7-mailを呼び出します。引数としてtoとnameを指定します。

https://......./export/7-mail?to=受信者のメール・アドレス&name=メール本文に表示する名前

上記をブラウザよりアクセスすると、以下のようにメールを送信した旨、通知されます。


以下のようなメールを受信します。

6-stylingの出力がexport.htmlとして添付されています。


以上になります。

最終的に、7つのRESTサービスを実装しています。


APEX Office Hourを視聴や、スクリプトの内容を確認すると、よりパッケージAPEX_DATA_EXPORTの使い方を理解できると思います。

Oracle APEXのアプリケーション作成の参考になれば幸いです。