スケジュールの検索は複雑なので、頑張って読み進めました。 これ↓はときのメモです。
スケジュールは検索結果を入れる型は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のパターンから読み取る値)になっていないことがわかった。 ここは、年単位の繰り返しスケジュールを実装している時に追加したところだったので、記法を再度確認したところ誤りがあったので、直した。
すると、各ビューに年単位の繰り返しスケジュールが表示されるようになった。