データの登録
- データ登録の形式を第3水曜日ならW00010003Nのように登録する
- ScheduleFormData に repeat_week というフィールドを足した。第何週かを表すフィールドで、毎週の場合は0とし最大は5
- ScheduleFormData 内の loadFormData(RunData, Context, List),insertFormData(RunData, Context, List), updateFormData(RunData, Context, List)について repeat_week に対応するようにした。基本的に「毎週」の場合に条件を足したりするだけなのでそんなに苦労しなかった。
- ajax-schedule-form.vm 内で repeat_week を form に足した。
- type=”hidden”, name=”repeat_week” の input要素を足して、毎週と第何週のプルダウンリストが変更されたらaipo.schedule.setRepeatWeek(this.form)を呼び出して repeat_week の値を選択されているプルダウンリストの要素のインデックスに変更した。でももっといいやり方がありそう。
<select id="repeat_typeW" onChange="aipo.schedule.enableNthWeek(this.form);aipo.schedule.setRepeatWeek(this.form);" name="repeat_type"/>
<option value="W" #if ($!{result.RepeatType.toString()} == "W") selected="selected" #end>$l10n.SCHEDULE_EVERY_WEEK</option>
<option value="W" #if ($!{result.RepeatType.toString()} == "W") selected="selected" #end>$l10n.SCHEDULE_1ST_WEEK</option>
<option value="W" #if ($!{result.RepeatType.toString()} == "W") selected="selected" #end>$l10n.SCHEDULE_2ND_WEEK</option>
<option value="W" #if ($!{result.RepeatType.toString()} == "W") selected="selected" #end>$l10n.SCHEDULE_3RD_WEEK</option>
<option value="W" #if ($!{result.RepeatType.toString()} == "W") selected="selected" #end>$l10n.SCHEDULE_4TH_WEEK</option>
<option value="W" #if ($!{result.RepeatType.toString()} == "W") selected="selected" #end>$l10n.SCHEDULE_5TH_WEEK</option>
</select>
<input type="hidden" id="repeat_week" name="repeat_week" value="0">
データの表示
- ScheduleUtils.isView(ALDateTimeField, String, Date, Date) に、Calendar.DAY_OF_WEEK_IN_MONTH) を利用して第何週の何曜日の条件に合うか判定する処理を
足した。
ScheduleUtils.validateDelegate
- スケジュール入力フォームに入力された内容の正当性を評価する関数。色んな正当性を評価する処理がひとまとめになっててちょっと読むのに難儀した。
- 「毎週」が選択されている時に加えて「第n週」が選択されているのに曜日にチェックが入ってないとエラーにする。
- 繰り返し期間を設定した時に、何曜日がその期間に含まれているか確認する処理に、第n週の何曜日が含まれているか確認するように条件を足した。この関数内では期間中の1日ずつに ScheduleUtils.matchDay(Calendar, String) を呼び出し条件に合うか確かめている。