現在、スケジューラ コントロールを使用して、スケジュールされた予定データをアプリケーション内の SQL データベースから保存および復元しています。スケジューラ コントロール自体は、次のようにいくつかのカスタム フィールドを使用するように構成されています。
private DevExpress.XtraScheduler.SchedulerControl _SchedulerControl;
private DevExpress.XtraScheduler.SchedulerControl StandingSchedulerControl
{
get
{
if (_SchedulerControl == null)
{
_SchedulerControl = new DevExpress.XtraScheduler.SchedulerControl();
BindingSource bs = new BindingSource();
bs.DataSource = StandingOrderList;
_SchedulerControl.Storage = new SchedulerStorage(this.components);
_SchedulerControl.Storage.Appointments.AutoReload = true;
_SchedulerControl.Storage.Appointments.Mappings.Subject = "Description";
_SchedulerControl.Storage.Appointments.Mappings.RecurrenceInfo = "RecurrenceInfo";
_SchedulerControl.Storage.Appointments.Mappings.Type = "Type";
_SchedulerControl.Storage.Appointments.CustomFieldMappings.Add(new DevExpress.XtraScheduler.AppointmentCustomFieldMapping("Inactive", "Inactive"));
_SchedulerControl.Storage.Appointments.CustomFieldMappings.Add(new DevExpress.XtraScheduler.AppointmentCustomFieldMapping("StandingOrderKEY", "StandingOrderKEY"));
_SchedulerControl.Storage.Appointments.DataSource = bs;
_SchedulerControl.EditRecurrentAppointmentFormShowing += new EditRecurrentAppointmentFormEventHandler(_SchedulerControl_EditRecurrentAppointmentFormShowing);
}
return _SchedulerControl;
}
}
ここで、「StandingOrderList」は StandingOrder ビジネス オブジェクトのリストとして定義されます。これは正しく保存および復元されますが、アプリケーション内で「StandingOrderKEY」の値しか持たない可能性があり、この値からストレージ内の Appointment オブジェクトを取得する必要があります。今まで、私の解決策はこれでした:
private Appointment GetAppointmentByStandingOrderKEY(Guid standingOrderKEY)
{
Appointment findAppointment = StandingSchedulerControl.Storage.Appointments.Items.Find(appointment => (Guid)appointment.CustomFields["StandingOrderKEY"] == standingOrderKEY);
return findAppointment;
}
ただし、StandingSchedulerControl.Storage.Appointments.Items には、Normal または Pattern のタイプを持つ Appointments のみが含まれているようです。つまり、StandingOrderKEY が保存された ChangedOccurrence または DeletedOccurrence に関連付けられている場合、関連する予定は見つかりません。
実際、リストから作成された BindingSource にすべての予定の例外が含まれていることを確認しました。AppointmentStorage の DataSource として設定されている場合、例外はパターン アポイントの「内」に格納され、最初に親アポイントへの参照を取得してから、そのアポイントで GetExceptions() を呼び出し、 StandingOrderKEY の結果のコレクション。ただし、これは問題です。現在、「親」予定の識別情報はなく、例外の情報しかありません。
したがって、私の質問は次のとおりです(おおむね好ましい順で):
- 予定のタイプを無視して、カスタム フィールドの値によって予定ストレージから予定オブジェクトを取得する方法はありますか? 例外と通常/パターンの予定の両方を含むコレクションはありますか?
- 予定の Type は既に保存されているため、予定が例外になることは事前にわかっています。この特定のカスタム フィールド値のすべての例外を検索する方法はありますか?
- データソース参照によって Appointment ストレージから Appointment オブジェクトを取得する方法はありますか? DataSource として使用される BindingSource には、例外予定が含まれています。BindingSource コレクション内のアイテムをストレージ内のアイテムに関連付ける方法はありますか?
他の提案は大歓迎です。ご清聴ありがとうございました!