元記事 (英語): Mihail Mateev - http://forums.infragistics.com/blogs/mihail_mateev/archive/2010/10/25/how-to-use-infragistics-xamschedule-solution.aspx
xamSchedule ソリューションは、NetAdvantage 2010 Volume 3 に含まれます。このスケジュール コンポーネントは Silverlight および WPF に対応しており、Silverlight の xamSchedule は NetAdvantage for Silverlight Line of Business 2010 Volume 3、WPF の xamSchedule は NetAdvantage for WPF Line of Business 2010 Volume 3 に含まれています。
また、上記 2 製品は NetAdvantage for .NET 2010 Volume 3 および NetAdvantage Ultimate 2010 Volume 3 に含まれます。
この記事では、Silverlight 用の xamSchedule ソリューションについてご紹介します。ご存じのように Silverlight および WPF の xamSchedule は同じ API を使用しています。ただし、Silverlight と WPF のフレームワークは多少異なるため使用方法が変わる場合があります。
xamSchedule アーキテクチャ
xamSchedule ソリューションは Microsoft™ Outlook™ 予定表のほとんどの機能を再現できます。コードをほとんど書かずに色々なビューでアクティビティ情報を表示することができます。また、複数のカレンダーに複数のリソースを同時に表示することも可能です。
ソリューションは、UI 要素 (ビュー)、データ マネージャー コントロールおよびデータ コネクターを含みます。
ビュー:
xamDayView、xamScheduleView、および xamMonthView、3 つのビューがあります。1 つ以上のリソースに対する予定表によるアクティビティを表示およびコントロールすることが可能になります。
DataManager:
DataManager クラスはビューにデータ (リソース、予定表、およびアクティビティ) を提供します。稼働日、稼働時間、ユーザー操作の設定などのプロパティを公開します。
データ コネクター:
データ コネクターは表示されない要素で、スケジュール データ (リソース、予定表、およびアクティビティ) にバインドするために使用します。各データ コネクターがデータ マネージャーに関連づけられ、データ マネージャーが各ビュー コントロールにデータを提供します。
以下のデータ コネクターが提供されます。
List および WcfScheduleDataConnector クラスは、データ ソース オブジェクトと xamSchedule オブジェクト間のプロパティのマッピングをサポートします (リソース、予定表、およびアクティビティ)。
ListScheduleDataConnector は、XamScheduleDataManager とスケジュール データ ソース間のコネクターとして使用される非視覚型の要素です。これはスケジュール データ マネージャーに提供されるビュー モデル オブジェクト (リソース、カレンダーおよびアクティビティ) を作成します。コネクターを IEnumerable 項目ソースのセットにバインドできます。xamScheduleManager は、ユーザー インターフェイスでデータを操作し、要求をデータ コネクターへ順にダイレクトします。データ コネクターは基本項目ソースに行われた変更を認識します。
スケジュール ユーザー インターフェイスがオンデマンドでデータに簡単にアクセスできない場合は WcfScheduleDataConnector を使用します。データベースのすべてのスケジュール データをサーバーからクライアントへ送信するのは実用的ではありません。WCF リスト コネクターは、サーバー上の IEnumerable コレクションを受け付けるサービスと通信し、クライアントによって要求されるスケジュール データだけを返します。 クライアント側では、WcfScheduleDataConnector は ListScheduleDataConnector と同じように XamScheduleDataManager と動作します。DataConnector プロパティを WcfListScheduleDataConnector インスタンスに設定し、コネクターにリモート WCF サービスの位置を報告する必要があります。
また、特定な要件に沿ったスタム データ コネクターの作成も可能です。データ コネクターは特定なタイムゾーン情報にも対応します。
サンプル xamSchedule アプリケーション:
このデモ アプリケーションでは、xamSchedule スイートの使用方法を紹介します。まず、適切な DataConnector 設定してください。
このサンプルでは、ListScheduleDataConnector を利用しています。このソリューションでは、Resources (ユーザー)、ResourceCalendars (予定表) および Appointments (予定) のカスタム コレクションを提供する ViewModel を作成します。ViewModel はさまざまなソースからデータを取得することができます。このデモでは xamSchedule スイートにフォーカスしているため、スケジュール データ ソースのサーバー側ストレージは実装しません。
要件:
デモ アプリケーションの作成ステップ
SilverlightXamScheduleApp という名前の Silverlight アプリケーションを作成Silverlight アプリケーションを ASP.NET ウエブ アプリケーションにホストする必要はありません。デモはビュー、xamScheduleDataManager、および ListScheduleDataConnector に対する xamSchedule 機能を公開します。
Resources、ResourceCalendars、および Appointments にメンバーを持つ ViewModel を作成
ResourceInfo、ResourceCalendarInfo、および AppointmentInfo クラスを作成します。xamSchedule スイートの Resource、ResourceCalendar、および Appointment クラスに必要なプロパティによって、このクラスはプロパティを公開します。 このサンプルでは、ViewModel に公開されるデータ ソースようのカスタム クラスがあります。
ListScheduleDataConnector および WcfScheduleDataConnector クラスは、データ ソース オブジェクトと xamSchedule オブジェクト間のプロパティのマッピングをサポートします (Resources、Calendars および Activities など)。これは、オンラインヘルプ「バックエンド データ ソースでフィールドをマップ」で説明しています。
以下はデータ ソース クラスのコードです。
ResourceInfo クラス:
ResourceCalendarInfo クラス:
AppointmentInfo クラス:
xamSchedule スイートに必要なコレクション (リソースのデータ、リソース予定表、予定) を含むクラスを作成します。ScheduleViewModel という名前をつけます。このサンプルでは使用されませんが、タスクおよびログ (メモ) のデータも処理できます。
ListScheduleDataConnector を追加し、マッピング フィールドを設定します。
MainPage.xaml に ListScheduleDataConnector を追加します。
ResourcePropertyMappings、ResourceCaendarPropertyMappings 、および AppointmentPropertyMappings を使用することによって、データ ソース オブジェクトと xamSchedule オブジェクトのプロパティをマッピングします。サンプルでは、データ ソース オブジェクトおよび xamSchedule オブジェクトは同じ名前を使用しているのでデフォルト マッピングを使用します。
XAML に xamScheduleDataManager を追加し、DataConnector のような ListScheduleDataConnector インスタンスを設定します。
アクティビティ動作 (このサンプルでは AppointmentSettings) のために Settings プロパティの設定も可能です。設定の編集ができなくなります。
xamDayView、xamScheduleView、および xamMonthView、スケジュール スイートから UI コンポーネントを追加します。
アプリケーションに別のビューを提供するには、xamDayView、xamScheduleView、および xamMonthView コンポーネントを追加します。
xamDayView、xamScheduleView、および xamMonthView から常に 1 つのビューのみ表示します。ビューを変更するためには、ビューを切り替えるロジックが追加されたリスト ボックスを実装します。
ビューの表示/非表示を切り替えるための C# コード。
要件によって別の予定表を使用することがあります。リソースに複数の予定表を表示するためには、同じ予定表グループに予定表を追加する必要があります。
デフォルトでは、CalendarResource を追加すると、別のグループに追加されます。
ScheduleViewModel scheduleViewModel;
…..
ResourceCalendarInfo calendar = new ResourceCalendarInfo();
…
_scheduleViewModel.ResourceCalendars.Add(calendar);
この式では新しいグループに予定表を追加します。
以下のサンプルでは、同じグループに他のカレンダーを追加します。
リソースに複数の予定表がある場合、それぞれの予定表を別に表すことも可能です: Separate、Overlay、または Merged。
xamSchedule ビューの CalendarDisplayMode プロパティの詳細については、ここを参照してください。
以下のサンプルでは、CalendarDisplayMode のすべての列挙型がある ComboBox を追加し、選択変更時に 3 つのビューの CalendarDisplayMode プロパティを変更します。
以下のコードは、すべてのビューで CalendarDisplayMode プロパティを変更します。
接続の問題またはサーバーにデータを提出する前に変更する必要がある場合は、スケジュール設定およびデータをローカルに保持することが可能です。
以下のコードでは、データを分離ストレージに保存し、アプリケーションに読み込みます。
TimeZone オプションを処理します。
タイム ゾーンのサポートは、信頼性のあるスケジュール システムには不可欠です。
タイム ゾーン情報の提供タイム ゾーンの変換を正確に行うには、スケジュール コントロールに各タイム ゾーンの基本 UTC オフセットおよびサマータイムの開始時刻と終了時刻を定義するルールを含み、すべてのタイム ゾーンについての情報にアクセスする必要があります。
WPF フレームワークは、TimeZoneInfo クラスを介してすべてのタイム ゾーンに対してこの情報を提供します。Silveright では、TimeZoneInfo クラスはフレームワークに存在しますが、「ローカル」および「UTC」タイム ゾーンの情報を公開するだけです。
以下は xamSchedule のタイムゾーン サポートの詳細になります。
同じサマータイムを使用する領域がいくつかあります。Silverlight フレームワークはユーザーのタイムゾーンを動的に公開しないため、ユーザーにダイアログを表示する必要があります。WPF フレームワークはローカル タイムゾーン ID を公開するためこのような問題はありません。複数のタイムゾーンで 1 つのサマータイムが使用されるので、ユーザーにダイアログを表示する必要はありません。ただし、これらのタイムゾーンでユーザーが「サマータイム設定に時計を自動的に調整する」のチェックを解除した場合、タイムゾーンを選択するダイアログを表示する必要があります。
その場合、アプリケーションを開始したときにダイアログを表示します。
表示しないようにするには、TimeZoneInfoProviderResolved.LocalTimeZoneId の DataConnector に有効なタイムゾーンを設定してください。
アプリケーションをテストしてみましょう。
アプリケーションを起動する:タイムゾーンが設定されているため、ダイアログ ウインドウから選択する必要はありません。デフォルト ビューは xamDayView インスタンスです。
xamOutlookBar の右側にある「予定表」グループを選択し、「新規作成」をクリックします。新しい ResourceCalendar を設定するダイアログ ウインドウを表示します。確認ダイアログに続いて新しい ResourceCalendar が画面に追加されます。CalendarDisplayMode が `Separate` です。
「メンテナンス」グループをクリックします。
「スケジュール ビュー」エキスパンダーを展開します。
リストから「スケジュール ビュー」を選択します。xamScheduleView が表示され、xamDayView インスタンスが縮小されました。
リストから「Month View」を選択します。
CalendarDisplayMode を変更します:
「Calendar Display Mode」コンボボックスからオプションを `Overlay` に変更します。予定表が重複して表示されます (ヘッダーが個別のシートのようになります)。
「Calendar Display Mode」コンボオックスからオプションを `Merged` に変更すると、予定表がマージされます。
xamDayView コンポーネントをダブルクリックして予定を追加します。
ユーザー インターフェイスで選択して現在の予定表を変更し、新しい予定を追加します。
CalendarDisplayMode を `Merged` に変更します。
「Save Data」ボタンでデータをローカルに保存し、アプリケーションを再度読み込みます。
「Load Data」を選択し、保存した予定表および予定を読み込みます。
この記事で使用した XamScheduleDemo.zip のサンプル アプリケーションをダウンロードできます。