2023年10月5日木曜日

カレンダとレポートを連携させる

Oracle APEXのカレンダ・コンポーネントでは、表示列として選択できるのは1つに限られています。

親子関係のあるレコード(今回はプロジェクトとそれに紐づくタスクを例として使用します)をカレンダに表示する方法はないため、代わりにカレンダ上で親となるレコードを選択した時に、レポートにその子となるレコードを表示する実装を行なってみます。

Oracle APEXに含まれるサンプル・データ・セットを使って、カレンダにプロジェクトを表示させ、プロジェクトをクリックするとレポートにそのプロジェクトに紐づくタスクを一覧します。


以下より、サンプル・アプリケーションの実装を紹介します。

最初に実装の元となるサンプル・アプリケーションを作成します。

アプリケーションの作成をクリックし、ファイルからを選択します。


データのロードとしてコピー・アンド・ペーストを選択し、ロードするサンプル・データ・セットとして、プロジェクトとタスクを選択します。画面にサンプル・データが表示されます。

へ進みます。


ロード先はデフォルトで新規表になっています。新しく作成する表名を入力(この記事ではSAMP_PROJECTSとしています)し、データのロードを実行します。


表が新規作成され、データのロードが完了します。

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


アプリケーション作成ウィザードが起動します。アプリケーションの名前カレンダとレポートの連携とします。他の設定は変更せず、そのまま使用します。

今回の実装は、カレンダのページに実施します。

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


アプリケーションが作成されたら、ページ・デザイナカレンダのページを開きます。


これから、本記事の主題であるカレンダとレポートの連携の実装になります。

最初に、カレンダ上で選択したプロジェクトを保持するページ・アイテムとして、P6_PROJECTを作成します。

タイプ表示のみラベルプロジェクトとします。


選択したプロジェクトに紐づくタスクを表示するレポートを作成します。今回はレポートとしてクラシック・レポートを使用します。

新しくリージョンを作成します。タイトルタスクタイプとしてクラシック・レポートを選択します。ソース表名としてアプリケーションの作成時に作成した表(今回の例ではSAMP_PROJECTS)を選択します。レポートの表示を選択したプロジェクトで絞り込むため、WHERE句project = :P6_PROJECTを記述します。

今回の実装では必要ではありませんが、送信するページ・アイテムとしてP6_PROJECTを選択します(送信するページ・アイテムはリージョンをリフレッシュする際に使用されます)。また、レポートの見掛けを簡素にするため、外観テンプレートとしてInteractive Reportを選択します。


レポートの準備ができました。

左ペインのレンダリング・ビューよりカレンダを選択します。右ペインのプロパティ・エディタ属性を開きます。

設定リンクの表示/編集をクリックし、この値を編集します。


ターゲットタイプとしてこのアプリケーションのページを選択し、ページとして同じページ(カレンダがあるページ)を指定します。通常はです。

アイテムの設定名前としてP6_PROJECTを選択し、として&PROJECT.を設定します。カレンダ上でクリックしたプロジェクトの名前(これが&PROJECT.です)が、ページ・アイテムP6_PROJECTに設定されます。

OKをクリックします。


以上で実装は完了です。アプリケーションを実行すると記事の先頭のGIF動画のように動作します。

今回作成したAPEXアプリケーションのエクスポートを以下に置きました。
https://github.com/ujnak/apexapps/blob/master/exports/integrate-calendar-and-report.zip

以上になります。

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