2025年8月20日水曜日

ページ・ロード時につねに現在の月のカレンダーを表示する

Oracle APEXのカレンダ・リージョンは開いている月を覚えていて、 別のページに移動した後にカレンダに戻ると、それまで開いていた月が表示されます。

どちらが便利かはわかりませんが、カレンダのページを開いたときはつねに現在の月を表示したい、という要望がありました。

Oracle APEXのカレンダ・リージョンはFullCalenderで作られています。

ChatGPTに聞いてみました。

fullCalenderで現在の月に移動するには?

.today().gotoDate()が使えるよ、とのこと。今日に移動するだけなら、.today()がお勧めとのことです。


実装して動作を確認してみました。

確認にはカレンダ・リージョンが実装されたAPEXアプリケーションが必要です。

アプリケーション作成を開き、ファイルからのアプリケーション作成を実行します。サンプル・データのプロジェクトとタスクに含まれるStart DateEnd Dateの値は、今日の日付を起点に前後の日付を算出するので、今回のテストの用途に向いています。


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

へ進みます。


 ロード先新規表とし、表名後で削除が楽になるような名前を指定します。その他はデフォルトのまま、データのロードを実行します。


表にサンプル・データがロードされます。アプリケーションの作成をクリックします。


アプリケーション作成ウィザードが開きます。

カレンダのページが含まれていることを確認し、アプリケーションの作成を実行します。


テスト用のアプリケーションが出来上がりました。ページ番号カレンダのページを実行します。


表示されるカレンダには、現在の月のカレンダが表示されます。


別の月を表示します。


ナビゲーション・メニューのホームをクリックし、ホーム・ページに移動します。その後、カレンダのページに戻ります。


カレンダには、それまで開いていた月が維持されています。


これから、ページ・ロード時にfullCalenderの.today()を呼び出す実装を追加します。

カレンダ・リージョンからfullCalendarのオブジェクトを取り出すために、カレンダ・リージョンに静的IDを設定します。静的IDcalendarとします。


ページ・ロード時に実行される動的アクションを作成します。

左ペインで動的アクション・ビューを開き、ページのロード動的アクションを作成します。

識別名前todayとします。タイミングページのロードになります。


TRUEアクションJavaScriptコードの実行を選択し、設定コードに以下を記述します。

apex.region("calendar").widget().data("fullCalendar").today();


以上で実装は完了です。

カレンダを開くたびに、現在の月が表示されるように動作が変わっています。


簡単な例ですが、いくつかのことを紹介しました。
  • カレンダ・リージョンは人気のJavaScriptライブラリであるfullCalendarを使っているので、fullCalendarを指定してChatGPTに聞くと出来ることを教えてくれる。
  • リージョンに静的IDを設定すると、apex.region("静的ID").widget().data("fullCalendar")としてfullCalendarのAPIを実装しているカレンダ・オブジェクトを取得できる。
今回の記事は以上です。

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