年単位の繰り返しスケジュールを実装するときのメモ

スケジュールの検索は複雑なので、頑張って読み進めました。 これ↓はときのメモです。

スケジュールは検索結果を入れる型はScheduleResultDateに入れて管理している。 繰り返しパターンのStringはこのクラスの型に入っている。

Ajaxで非同期表示するためのAjaxScheduleResultDataは↑を継承している。

カレンダー用スケジュールコンテナに表示するためのクラスであるAjaxScheduleDayContainerなど、各種のコンテナを実装したクラスでは、 scheduleListというリストに AjaxScheduleResultDataで定義したデータを流し込んでいる。

実際に表示するかどうかの判定は、XXXSelectDateクラスで判定処理が定義されている。 リスト表示の検索結果の管理は、ScheduleListSelectDataで行われている。 これは、ScheduleMonthlySelectDataを継承している。

ScheduleMonthlySelectDataは月間スケジュールの検索結果を管理するクラスである。

ScheduleMonthlySelectData

このクラスでは、_VEipTScheduleListを継承したVEipTScheduleListの型のリストResultListを返すメソッドselectListが定義されている。 なお、_VEipTScheduleListでは繰り返しパターンのフィールド(REPEAT_PATTERN_PROPERTY = “repeatPattern”)が定義されている。

selectList

このメソットはgetScheduleListで検索条件のクエリーを取得し、そのリストを時刻でソートし、ダミーを上に表示する処理をしている。 このgetScheduleListメソッドはScheduleUnitsクラスの中で定義されており、SQLのクエリを作成している。 今回の場合、データベースから出てきた後の処理でデータが弾かれていることがわかっているので、ここに問題はない。

ここで、ResultListの問題がないことが確認できたので、その後の処理を見る。

getResultData

このメソッドは、VEipTScheduleListを引数として、Objectを戻している。 このメソッドはローカル変数rdにScheduleResultDataのインスタンスを作成して入れている。 このメソッドではデータをより分けているわけではないようだ。

ScheduleListContainer

表示するデータを入力しているのは、addResultDataInternalというメソッドらしい。

addResultDataInternalメソッド

ScheduleResultDataリストrdのサイズを取得しその回数だけループで回している。 各スケジュールのデータをScheduleResultData型rd2に入れて、各条件合致しているかを検証している。

結局、isViewメソッドの結果がtrueにならないので、各リストに表示されないということがわかった。

isViewをtrueにする

ブレークポイントをセットして、確認したところsubString関数で取得した値が予想した値(ここではDBのパターンから読み取る値)になっていないことがわかった。 ここは、年単位の繰り返しスケジュールを実装している時に追加したところだったので、記法を再度確認したところ誤りがあったので、直した。

すると、各ビューに年単位の繰り返しスケジュールが表示されるようになった。