親子関係のあるレコード(今回はプロジェクトとそれに紐づくタスクを例として使用します)をカレンダに表示する方法はないため、代わりにカレンダ上で親となるレコードを選択した時に、レポートにその子となるレコードを表示する実装を行なってみます。
Oracle APEXに含まれるサンプル・データ・セットを使って、カレンダにプロジェクトを表示させ、プロジェクトをクリックするとレポートにそのプロジェクトに紐づくタスクを一覧します。
以下より、サンプル・アプリケーションの実装を紹介します。
最初に実装の元となるサンプル・アプリケーションを作成します。
アプリケーションの作成をクリックし、ファイルからを選択します。
データのロードとしてコピー・アンド・ペーストを選択し、ロードするサンプル・データ・セットとして、プロジェクトとタスクを選択します。画面にサンプル・データが表示されます。
次へ進みます。
ロード先はデフォルトで新規表になっています。新しく作成する表名を入力(この記事ではSAMP_PROJECTSとしています)し、データのロードを実行します。
アプリケーションの作成を実行します。
今回の実装は、カレンダのページに実施します。
アプリケーションの作成を実行します。
アプリケーションが作成されたら、ページ・デザイナでカレンダのページを開きます。
最初に、カレンダ上で選択したプロジェクトを保持するページ・アイテムとして、P6_PROJECTを作成します。
タイプは表示のみ、ラベルはプロジェクトとします。
選択したプロジェクトに紐づくタスクを表示するレポートを作成します。今回はレポートとしてクラシック・レポートを使用します。
新しくリージョンを作成します。タイトルはタスク、タイプとしてクラシック・レポートを選択します。ソースの表名としてアプリケーションの作成時に作成した表(今回の例ではSAMP_PROJECTS)を選択します。レポートの表示を選択したプロジェクトで絞り込むため、WHERE句にproject = :P6_PROJECTを記述します。
今回の実装では必要ではありませんが、送信するページ・アイテムとしてP6_PROJECTを選択します(送信するページ・アイテムはリージョンをリフレッシュする際に使用されます)。また、レポートの見掛けを簡素にするため、外観のテンプレートとしてInteractive Reportを選択します。
レポートの準備ができました。
左ペインのレンダリング・ビューよりカレンダを選択します。右ペインのプロパティ・エディタの属性を開きます。
設定のリンクの表示/編集をクリックし、この値を編集します。
ターゲットのタイプとしてこのアプリケーションのページを選択し、ページとして同じページ(カレンダがあるページ)を指定します。通常は6です。
アイテムの設定の名前としてP6_PROJECTを選択し、値として&PROJECT.を設定します。カレンダ上でクリックしたプロジェクトの名前(これが&PROJECT.です)が、ページ・アイテムP6_PROJECTに設定されます。
OKをクリックします。
以上で実装は完了です。アプリケーションを実行すると記事の先頭のGIF動画のように動作します。
今回作成したAPEXアプリケーションのエクスポートを以下に置きました。
https://github.com/ujnak/apexapps/blob/master/exports/integrate-calendar-and-report.zip
以上になります。
Oracle APEXのアプリケーション作成の参考になれば幸いです。
完