Windows Phone および Windows 8 RT でクライアントを開発する

みなさん、こんにちは。

今回は開発者向けの記事として、先日 US サポートブログで
紹介された記事を紹介します。この内容は Windows Phone や
Windows 8 RT プラットフォーム以外でも広く活用できます。

基本的なアイデアは、Windows Phone や Windows 8 RT でも
利用できるアセンブリを開発して再利用することです。

Building clients for Windows Phone and Windows 8 RT

Microsoft Dynamics CRM 2011 SDK で 提供される Microsoft.Xrm.Sdk.dll
ライブラリは、デスクトップアプリケーションでの開発を容易にしまが、
このライブラリは .NET Framework 4.0 と Windows Identify Foundation
に依存します。これらのライブラリは Windows Phone や Windows 8 RT
のプラットフォームにはありません。

Microsoft Dynamics CRM 2011 で提供される WS-Trust プロトコルは他の
言語やプラットフォームで利用でき、又よく定義されていますが、それらの
プラットフォームで素晴らしいアプリケーションを構築できるよう、さらに
良いものにしたいと思っています。参考としてこれらのプラットフォームで
利用できるサンプルをアプリをこちらで提供しています。

アセンブリだけを提供しているデスクトップ版とは異なり、このサンプル
では、完全なソースコードを提供します。そのため状況に応じてコードを
変更することができます。このサンプルは Microsoft Dynamics CRM Online
(Office 365 および Live ID プラットフォーム) と IFD で動作しますが、設置型
で Active Directory 認証を利用する環境では利用できません。

またコードは現時点での情報をもとに記述されたものですので、変更や
修正は自己責任でお願いいたします。

以下にこのサンプルを利用してどのように Web サービスを利用するか
情報を提供します。

Web サービスの認証

ServiceConfigurationFactory を利用して、DiscoveryServiceConfiguration または
OrganizationServiceConfiguration オブジェクトを生成します。これらのクラスでは
メタデータの取得を行い、また以下のイベントを利用できます。

・ MetadataLoaded : メタデータの取得が完了した時点で発生します。
・ MetadataLoadFailure : メタデータの取得に失敗した時点で発生します。

メタデータの取得が完了すると、Authenticate メソッドが実行できます。完了時には、
SigninComplete イベントが発生します。認証成功時の SignOnCompletedEventArgs
オブジェクトの Result プロパティにはトークンの情報が含まれており、失敗した場合
Error プロパティにエラーの内容が含まれます。

Windows Live ID 認証ではデバイス認証が要求されますが、その場合は発生する
イベントを利用して以下のフローを構築します。

AuthenticateDevice -> DeviceSigninComplete event -> Authenticate –> SignInComplete

1. DeviceSigninComplete エベントにイベントをアタッチして、以下の処理行います。
a. SignOnCompletedEventArgs.Error を利用してエラーの確認とハンドリングをします。
エラーがない場合は、次に進みます。
b. SingInComplete イベントにアタッチしてエラーの確認をハンドリングをします。また
成功時にはトークン情報を取得します。
c. Authenticate(ClientCredentials clientCredentials, RequestSecurityTokenRequest deviceSecurityToken)
メソッドを、取得した結果を利用して実行します。

2. イベントのアタッチを行った後、AuthenticateDevice メソッドを呼び、フローを実行します。

Web サービスの実行

1. 有効なトークンがない場合は、上記の情報を元に認証し、トークンをキャッシュします。
2. DiscoveryServiceProxy または OrganizationServiceProxy オブジェクトを生成します。
3. キャッシュしたトークンを SecurityTokenResponse プロパティに渡します。
4. CreateCompleted や ExecuteCompleted などの各種イベントにアタッチします。
5. Web サービスのメソッドを実行します。

まとめ

今回はいつもとは少し変わった記事でしたが、既存の SDK アセンブリでは
サポートされない環境で開発する際の参考となればと思います。

- Dynamics CRM サポート 中村 憲一郎