XamSchedule ソリューションで WCF RIA Service を使用する

0 ユーザーが評価
この投稿には確認済みの回答があります。 0 返信 | 1 サポーター

トップ 10 投稿者 
女性
投稿 18
IG Employee
[IG] Yoshimi 投稿済み: 2010/12/8 15:31

 

XamSchedule ソリューションで WCF RIA Service を使用する

元記事 (英語): Mihail Mateev - http://blogs.infragistics.com/blogs/mihail_mateev/archive/2010/10/31/using-xamschedule-solution-with-wcf-ria-services.aspx

WCF RIA Services は、Silverilght アプリケーションなどのリッチ インターネット アプリケーション (RIA) で n-tier ソリューションを簡略化します。

XamSchedule コンポーネントは WCF RIA Services を使用できます。この記事では、RIA Service と XamSchedule スイートを同時に使用する方法について説明します。

WCF RIA Services の詳細については、Using the Infragistics XamGrid with WCF RIA Services (英語) をご覧ください。

XamSchedule スイートには 2 つのデータ コネクターが含まれており、予定表のデータ (リソース、予定表、アクティビティ) のバインドに使用できます。 WcfScheduleDataConnector は、WCF Service を介した異なるソースからのデータが必要な場合に使用します。

WCF RIA Services には違うアプローチが必要になります。 クライアントとサーバープロジェクト間のリンクをシングル ソリューションで有効にし、中間層コードからクライアント プロジェクトにコードを生成します。 この場合、データベース テーブルに対応したクライアント DomainDataSource、DomainContext、およびクラスにあります。 WCF RIA Service を使用する場合には ListScheduleDataConnector の方がより適したソリューションと言えます。

重要事項:

  • 対応するデータ型を持つためのプロジェクト データベースは、Resource ResourceCalendar および Activity (Appointment, Task, Journal) プロパティです。そうでない場合、フィールドをマッピングする前に独自にデータ変換を実装する必要があります (これは XamSchedule でデータソースを使用する場合の標準要件です)。
  • DataContext using DataContext.Load(…) メソッドでデータを読み込みます。
  • XamScheduleDataManager イベントを使用して DataContext.SubmitChanges() を呼び出し、データ ソースを更新します。

デモ アプリケーションでは、SQL Server 2008 データベースで WCF RIA Services を使用し、複数の予定表をアプリケーションで実装する方法を紹介します。このアプリケーションには「WcfListDataConnector を使用した Silverlight アプリケーションでの XamSchedule ソリューションの実装」で紹介したアプリケーションと同様の機能が含まれます。

ソフトウェア要件:

  1. NetAdvantage for Silverlight  Line of Business 2010 Vol.3
  2. NetAdvantage for .NET 2010 Vol.3
  3. NetAdvantage Ultimate 2010 Vol.3

デモ アプリケーションの作成手順

  • データベースをダウンロードして SQL Server 2008 R2 (Express またはそれ以上のライセンス) へアタッチします。
  • ASP.Net Web アプリケーションで RIA サービス リンクでホストされる Silverlight アプリケーションを作成します。
  • Data Model を作成します
  • Domain Service を作成します
  • クライアントに DomainDataSource インスタンスを追加します。
  • Silverlight アプリケーションに ListScheduleDataConnector を追加します
  • DomainContext を介してデータを読み込むためのロジックを実装します
  • xamScheduleDataManager を追加します。
  • Schedule スイートの UI コンポーネント (XamDayView、XamScheduleView、 XamMonthView)を追加します。
  • XamScheduleDataManager イベントを使用する予定を更新するためのロジックを実装します
  • 複数リソースと複数カレンダーのサポートを実装します。
  • 表示タイプの実行時の変更を実装します。
  • カレンダー表示モードにランタイム サポートを実装します。
  • アプリケーションを実行します。

 

データベースをダウンロードして SQL Server 2008 R2 (Express またはそれ以上のライセンス) へアタッチ

Test2008R2 データベースをダウンロードし、展開して SQL Server へアタッチします。

 

ASP.Net Web アプリケーションでホストされる Silverlight アプリケーションを作成

RIA Service リンクのある ASP.Net Web アプリケーションでホストされる Silverlight アプリケーションを作成し、XamScheduleRiaDemoApp3 という名前を付けます。

 

Data Model の作成

このセクションでは、Test2008R2 データベースのデータを表す ADO.NET Entity クラスを作成する必要があります。

 

Test2008EntitiesModel の生成された ADO.NET Entity クラス

 

 

Domain Service の作成

中間層プロジェクトにドメイン サービスを追加します。ドメイン サービスはデータ エンティティおよびサーバープロジェクトからクライアントプロジェクトの処理を公開します。
ビジネス ロジックをドメインサービスに追加することにより、クライアントでデータを操作する方法を管理できます。

ドメイン サービス クラスを Test2008DomainService.cs と名付けます。

 

クライアントに DomainDataSource インスタンスを追加

1: <riaControls:DomainDataSource AutoLoad="True" d:DesignData="{d:DesignInstance my:Resource, CreateList=true}" Height="0" LoadedData="ResourceDomainDataSourceLoadedData" Name="resourceDomainDataSource" QueryName="GetResourcesQuery" Width="0">

2: <riaControls:DomainDataSource.DomainContext>






3: <my:Test2008DomainContext />






4: </riaControls:DomainDataSource.DomainContext>






5: </riaControls:DomainDataSource>






Silverlight アプリケーションに ListScheduleDataConnector を追加

1: <ig:ListScheduleDataConnector HorizontalAlignment="Left" Name="listScheduleDataConnector1" VerticalAlignment="Top" >

2: <ig:ListScheduleDataConnector.ResourcePropertyMappings>






3: <ig:ResourcePropertyMappingCollection UseDefaultMappings="True"/>






4: </ig:ListScheduleDataConnector.ResourcePropertyMappings>






5: <ig:ListScheduleDataConnector.ResourceCalendarPropertyMappings>






6: <ig:ResourceCalendarPropertyMappingCollection UseDefaultMappings="True"/>






7: </ig:ListScheduleDataConnector.ResourceCalendarPropertyMappings>






8: <ig:ListScheduleDataConnector.AppointmentPropertyMappings>






9: <ig:AppointmentPropertyMappingCollection UseDefaultMappings="True"/>






10: </ig:ListScheduleDataConnector.AppointmentPropertyMappings>






11: </ig:ListScheduleDataConnector>






 

DomainContext を介してデータを読み込むためのロジックを実装

コンストラクター コールでは、DomainContext を使用する InitializeXamSchedule メソッドが IEnumerable として Resources、 ResourceCalendars、および Appointments を返すメソッドを呼び出します。

1: #region Constructors

2: public MainPage()






3: {






4: InitializeComponent();






5: InitializeXamSchedule(this.resourceDomainDataSource);






6: }






7: #endregion //Constructors






8: 






9: #region InitializeXamSchedule






10: private void InitializeXamSchedule(object sender)






11: {






12: this.xamDayView1.VisibleDates.Add(DateTime.Today.AddDays(-3));






13: this.xamDayView1.VisibleDates.Add(DateTime.Today.AddDays(-2));






14: this.xamDayView1.VisibleDates.Add(DateTime.Today.AddDays(-1));






15: this.xamDayView1.VisibleDates.Add(DateTime.Today.AddDays(1));






16: DomainDataSource src = sender as DomainDataSource;






17: if (src != null)






18: {






19: if (src.Equals(resourceDomainDataSource))






20: {






21: 






22: Test2008DomainContext context = src.DomainContext as Test2008DomainContext;






23: if (context != null)






24: {






25: 






26: context.Load(context.GetResourcesQuery(),






27: ResourcesLoadedCallback, null);






28: context.Load(context.GetResourceCalendarsQuery(),






29: ResourceCalendarsLoadedCallback, null);






30: context.Load(context.GetAppointmentsQuery(),






31: AppointmentsLoadedCallback, null);






32: }






33: 






34: }






35: }






36: }






37: #endregion //InitializeXamSchedule






Resources、ResourceCalendars、および Appointments を読み込むためにコールバック メソッドを作成します。
LoadOperation.Entities は読み取り専用コレクションを返します。編集する必要のある機能 (予定など) は、 LoadOperation.Entities.ToList() を使用してリストを作成します。

1: #region AppointmentsLoadedCallback

2: void AppointmentsLoadedCallback(LoadOperation<XamScheduleRiaDemoApp3.Web.Appointment> loadOperation)






3: {






4: var appointments = loadOperation.Entities.ToList();






5: listScheduleDataConnector1.AppointmentItemsSource = appointments;






6: }






7: #endregion //AppointmentsLoadedCallback






8: 






9: #region ResourceCalendarsLoadedCallback






10: void ResourceCalendarsLoadedCallback(LoadOperation<XamScheduleRiaDemoApp3.Web.ResourceCalendar> loadOperation)






11: {






12: listScheduleDataConnector1.ResourceCalendarItemsSource = loadOperation.Entities;






13: }






14: #endregion //ResourceCalendarsLoadedCallback






15: 






16: #region ResourcesLoadedCallback






17: void ResourcesLoadedCallback(LoadOperation<XamScheduleRiaDemoApp3.Web.Resource> loadOperation)






18: {






19: listScheduleDataConnector1.ResourceItemsSource = loadOperation.Entities;






20: }






21: #endregion //ResourcesLoadedCallback






 

XamScheduleDataManager を追加

1: <ig:XamScheduleDataManager HorizontalAlignment="Left" Name="xamScheduleDataManager1"

2: VerticalAlignment="Top" DataConnector="{Binding ElementName=listScheduleDataConnector1}" CurrentUserId="mdour"






3: Loaded="XamScheduleDataManager1Loaded"






4: ActivityAdded="XamScheduleDataManager1ActivityAdded"






5: ActivityChanged="XamScheduleDataManager1ActivityChanged"






6: ActivityRemoved="XamScheduleDataManager1ActivityRemoved"/>






7: <StackPanel Orientation="Horizontal" Margin="0,10,0,0">






イベント ハンドラーのロジックについては、『Implement a logic to update appointments using XamScheduleDataManager events』 (英語) を参照してください。

 

Schedule スイートの UI コンポーネント (XamDayView、XamScheduleView、 XamMonthView)を追加

実装の詳細については WcfListDataConnector を使用した Silverlight アプリケーションでの XamSchedule ソリューションの実装を参照してください。

 

XamScheduleDataManager イベントを使用する予定を更新するためのロジックを実装

DomainContext の Resources, ResourceCalendars および Appointment コレクションは、ListScheduleDataConnector の同じコレクションへバインドすることはできません。ソリューションは、XamScheduleDataManager イベント、ActivityAdded、ActivityRemoved および ActivityRemoved に使用し、イベントハンドラーのデータソースを更新するロジックを追加します。

1: #region XamScheduleDataManager1ActivityAdded

2: private void XamScheduleDataManager1ActivityAdded(object sender, ActivityAddedEventArgs e)






3: {






4: Test2008DomainContext cntx = this.resourceDomainDataSource.DomainContext as Test2008DomainContext;






5: if (cntx == null)






6: {






7: return;






8: }






9: 






10: foreach (object x in listScheduleDataConnector1.AppointmentItemsSource)






11: {






12: Appointment app = x as Appointment;






13: if (app != null)






14: {






15: if (!cntx.Appointments.Contains(app))






16: {






17: cntx.Appointments.Add(app);






18: 






19: 






20: }






21: }






22: }






23: cntx.SubmitChanges();






24: }






25: #endregion //XamScheduleDataManager1ActivityAdded






26: 






27: #region XamScheduleDataManager1ActivityChanged






28: private void XamScheduleDataManager1ActivityChanged(object sender, ActivityChangedEventArgs e)






29: {






30: this.resourceDomainDataSource.DomainContext.SubmitChanges();






31: }






32: #endregion //XamScheduleDataManager1ActivityChanged






33: 






34: #region XamScheduleDataManager1ActivityRemoved






35: private void XamScheduleDataManager1ActivityRemoved(object sender, ActivityRemovedEventArgs e)






36: {






37: this.resourceDomainDataSource.DomainContext.SubmitChanges();






38: }






39: #endregion //XamScheduleDataManager1ActivityRemoved






40: 






41: #region XamScheduleDataManager1Loaded






42: private void XamScheduleDataManager1Loaded(object sender, RoutedEventArgs e)






43: {






44: listScheduleDataConnector1.TimeZoneInfoProviderResolved.LocalTimeZoneId = "Jordan Standard Time";






45: }






46: #endregion //XamScheduleDataManager1Loaded






 

複数リソースと複数カレンダーのサポートを実装

実装については WcfListDataConnector を使用した Silverlight アプリケーションでの XamSchedule ソリューションの実装を参照してください。

 

表示タイプの実行時の変更を実装

実装については WcfListDataConnector を使用した Silverlight アプリケーションでの XamSchedule ソリューションの実装を参照してください。 

 

実行時に予定表表示モードのサポートを実装

実装については WcfListDataConnector を使用した Silverlight アプリケーションでの XamSchedule ソリューションの実装を参照してください。 

 

アプリケーションの実行:

各リソースのすべての予定表が表示されます。

 

現在のユーザーを Mike Dour に変更します。

 

現在のユーザーを Mihail Mateev に変更します。

 

 

XamDayView をダブル クリックして予定に追加します。

期間を 30 分 (11:00AM から 11:30AM) に設定します。

 

[保存して閉じる] ボタンで予定を確定します。
新しい予定が XamDayView コンポーネントに追加されました。

 

最後に追加された予定のサイズを変更して期間を 1 時間 ( 11:00AM から 12:00PM) にします。

 

[すべての予定表] ボタンを選択し、すべてのユーザーのカレンダーを表示します。

 

予定表の表示モードを Overlay に変更します。

 

表示タイプを Schedule View に変更します。

 

 

ListScheduleDataConnector で WCF RIA Services を使用する場合、XamSchedule solution で WcfScheduleDataConnector を使用するのと同じような機能を実現できます。

Infragistics の Shedule スイートに関する記事では、XamSchedule でさまざまなソースを使用する方法をご紹介しています。

デモ アプリケーション: XamScheduleRiaDemoApp3.zip

サンプル データベース:Test2008R2.zip

ページ 1 / 1 (1 項目) | RSS
Infragistics Japan
インフラジスティックス ジャパン