Dynamics CRM 2013/Fall ’13 SDK モバイルおよびリッチ クライアントの開発 その 1 – 概要とサンプル紹介


みなさん、こんにちは。

今回から Microsoft Dynamics CRM 2013 および、Microsoft Dynamics
CRM Online Fall ’13 新機能より、モバイルおよびリッチ クライアント
の開発に関する情報をお届けします。

概要

以下に今回のトピックに関連する内容を紹介します。

新たにサポートされる内容

– JWT トークンのサポート
– Windows 8 ストアアプリケーションのサポート
– ブラウザ以外の外部アプリケーションからの SOAP/REST エンド
ポイントの認証をサポート

ブラウザ以外のがいるアプリケーションでサポートされる操作

– OData エンドポイントを使用するとき、作成、取得、更新、および
削除の操作がサポートされます。メッセージ実行またはメタデータ
検索はサポートされません。
– 最新のアプリケーションおよびモバイル アプリケーションの SOAP
エンドポイント (Organization.svc/web) を使用するとき、完全な Web
サービス機能セットへのアクセスが利用できます。

テクノロジの依存関係

.NET 用 Windows Azure AD 認証ライブラリ
– Microsoft Visual Studio 2012
– Windows Server 2012 R2 および AD FS 2.2 (IFD のみ)
※設置型の場合クレーム構成と IFD が必須となります。
Microsoft Dynamics CRM 2013 SDK 6.0.1 (サンプルが含まれます)
※2013 年 11 月 29日時点で英語版のみサンプルを提供

セキュリティ関連

– Azure AD 認証ライブラリのユーザー ログオンは、Web ブラウザー
のコンテキストによって処理されます。
– アプリケーションの登録は、 展開のための Azure Active Directory、
および設置型展開または IFD のための Active Directory フェデレーション
サービス (AD FS) によって管理されます。

サンプルを利用する

開発者の方は実際にサンプルを見た方が早いと思いますので、早速
サンプルを紹介します。詳細は次回以降の記事で紹介しますので
今回はサンプルを動かせるようにする手順をまず案内します。

事前準備

サンプルを利用するにあたり、以下の環境を準備してください。
設置型については今後の記事で紹介する予定です。

Microsoft Dynamics CRM 2013 オンライントライアル
– Visual Studio 2012
Microsoft Dynamics CRM 2013 SDK 6.0.1 英語版

サンプルソリューションの準備

サンプルは SOAP と REST の 2 つ提供されていますが、今回は REST
版のサンプルを利用します。また REST 版は設置型向けのサンプルと
して提供されていますので、オンライン向けに書き換えます。

1. Visual Studio 2012 でサンプルを開きます。
SDK\SampleCode\CS\ModernAndMobileApps\ModernOdataApp

2. 参照設定を展開して解決できていない参照があるか確認します。

image

3. Azure のライブラリは NuGet で取得できます。ソリューションを
右クリックして NuGet パッケージの復元の有効化をクリックします。

image

4. 確認の画面が出るので「はい」をクリックします。

5. プロジェクトを右クリックして NuGet パッケージの管理をクリック
します。自動的に以下のメッセージが表示されます。復元ボタンを
クリックします。

image

6. 以下の様にパッケージが表示されます。インストールボタンが表示
されている場合はボタンをクリック、アンインストールが表示されて
いる場合はパッケージはインストール済で参照が解決されるだけです
ので、閉じるをクリックします。

image

7. 一旦ソリューションをビルドして参照エラーが解決することを
確認します。

image

8. 次にプロジェクト直下にある CurrentEnvironment.cs を開いて、
クラスメンバーを展開します。

9. CrmServiceUrl を申し込んだトライアルのアドレスに書き換えます。

public const string CrmServiceUrl   = “https://crm2013training3.crm5.dynamics.com”;

10. _oauthUrl を以下の様に書き換えます。

private const string _oauthUrl = “https://login.windows.net/common/wsfed”;

11. 58、68 行目の CrmServiceUrl 変数を “Microsoft.CRM” に書き換えます。

元)  await _authenticationContext.AcquireTokenAsync(CrmServiceUrl, _clientID);
後)  await _authenticationContext.AcquireTokenAsync(”Microsoft.CRM”, _clientID);

アプリケーションの登録

新しい認証方式を利用するには、アプリケーションを事前に
登録しておく必要があります。

1. 登録に際してアプリケーション固有の戻り値を取得します。
CurrentEnvironment.cs 57 行目にブレークポイントを設定して、
プロジェクトをデバッグ実行します。

2. redirectUrl の値をコピーしておきます。

image

3. http://graphexplorer.cloudapp.net/ にアクセスします。画面
右上の Sign In をクリックして CRM 組織の管理者 ID でログイン
します。

image

4. Resource で自分の組織のアドレスが含まれていることを確認
して、画面上部の Add Application Permission をクリックします。

5. Company に組織名が表示されていること確認して、Client App
Display Name にアプリケーション名 (任意) を、Client App URL に
先ほど取得した redirectUrl の値を入力します。

image

6. 画面中央のサービス一覧より Microsoft.CRM があることを確認
します。ログインしているテナントが間違っています。

image

7. Create Permission ボタンをクリックします。

8. 次の画面に表示される Cient Application 欄にある
Client ID をコピーします。

9. サンプルアプリケーションに戻り、CurrentEnvironment.cs に
ある _clientID 変数に取得した Client ID を貼り付けます。

private const string _clientID = "取得した Client ID";

サンプルの実行

いよいよサンプルを実行しましょう。

1. F5 キーを押下してサンプルを実行します。

2. アプリケーションの画面が表示された後、以下の様にユーザー
情報を求められますので、Microsoft Dynamics CRM オンライン
に接続できるユーザーを入力します。

image

3. サインインをクリックします。

4. アプリケーションの画面に戻るので、Accounts または Tasks
をクリックします。他のタイルはダミーですので動作しません。

image

5. 取引先企業の一覧を取得できることを確認します。データの
取得は非同期のため表示までに時間がかかる可能性があります。

image

次回からは今回行った手順やサンプルの詳細を紹介します。
お楽しみに!

– 中村 憲一郎

Comments (6)

  1. けろ-みお より:

    いつも拝見しております。

    Blogとまったく同じ通りにやってみましたが、アクセスエラー(0x8007005 E_ACCESSDENIED)

    になります。CRM Online側のテナントで何か必要な設定や権限等があるのでしょうか?

    また、先日公開されたDynamics CRM 2013 SDK(2013/12/01時点のもの)には、

    書かれているようなソースコード(SDKSampleCodeCSModernAndMobileAppsModernOdataApp)は

    同梱されていません。

    ただ、オンラインヘルプ(crmsdk2013.chm)には、ModernOdataAppのサンプルコードについて

    説明が記載されておりましたので、(SDKcrmsdk2013.chm::/html/a5757fab-02e0-4a65-a141-91b2e1b15665.htmあたり)今回は、オンラインヘルプからソースコードを抜粋し

    この記事と同じ手順で確認させて頂きました。

    アクセスエラーにならないためのテナント側の必要な設定情報と

    SDKSampleCodeCSModernAndMobileAppsModernOdataAppがSDKに同梱されていない点について

    補足頂ければと思います。

  2. kenakamu より:

    コメントをいただき、ありがとうございます。

    また手順をお試しいただき、ありがとうございます。

    今回のサンプルは残念ながら英語版しか含まれておりませんので、念のため日本語版ではなく英語版の再ダウンロードをお願いいたします。

    またご連絡いただいているエラーが出る場合、以下のいずれかであると考えられます。

    – アプリケーションを登録した際に、サービスで Microsoft.CRM を選択していない。

    – サンプルソースの ClientId を登録時に返された値に更新していない。

    Microsoft Dynamics CRM オンライン側での設定は不要ですが、Fall 13 が適用済である

    必要がございます。念のため体験版をお申込みいただき、現在最新の状態でお試しください。

    中村 憲一郎

  3. けろ-みお より:

    英語版のSDKにもソースコードが同梱されていない模様です。

    12/1時点で日本語版と英語版、両方のSDKの中身を確認しましたが、該当のソースコードを確認することはできませんでした。同梱漏れでしょうか?

    また、考えられる要因をご教示頂き有難うございます。

    今回実行を確認した環境は、Microsoft Dynamics CRM Online で、

    Fall 13適用済みのものを使っています。

    graphexplorer.cloudapp.net でのPermission設定は問題なく、設定できており、

    その際に使用するサービスも「Microsoft.CRM」を選択しています。

    >- アプリケーションを登録した際に、サービスで Microsoft.CRM を選択していない。

    >- サンプルソースの ClientId を登録時に返された値に更新していない。

    ClientIdは、graphexplorerで発行されたものを設定するようにしていますが、

    graphexplorerで登録したサービスは、「Microsoft.CRM」を設定し、登録を行っていても

    アクセスエラーが発生する状況です。

    ただ、今回はVS2012ではなく、VS2013 for Windows で確認したため、

    Windows 8 と Windows 8.1 で挙動が異なる可能性も否定できないため、

    一度、推奨されているクライアント環境(Windows 8 + VS2012 )で確認するように致します。

    本件に際し、不明点あればまた確認させてください。

  4. kenakamu より:

    コメントをいただき、ありがとうございます。

    今先ほど再度 SDK をダウンロードしてみましたがサンプルは含まれておりました。

    お手数ですが、以下の URL より再取得をお願いいたします。

    http://www.microsoft.com/…/details.aspx

    Windows 8.1 および Visual Studio 2013 RTM での動作も検証いたしましたが

    こちらの手元では同じ手順で動作いたしました。

    念のため Graph Explorer で登録いただいたClient App URL の最後にスラッシュ (/) が含まれていることもご確認ください。

    中村 憲一郎

  5. けろ-みお より:

    いろいろ有難うございます。

    もう一度SDK(英語版)を入手しなおしたところ、

    SDKSampleCodeCSModernAndMobileAppsModernOdataAppが同梱されているのを確認しました!

    SDK(英語版)を12/1に入手した際、自己解凍形式で提供されていましたが、

    再度入手したところ、MSI形式のものに変わっておりました。

    (この間に何かあったのかもしれませんが)

    また、ModernOdataAppの動作も無事確認(VS2012で確認)しましたが、なぜ昨日段階で動作しなかったのかは不明ですが、おっしゃられているように、やはりGraph Explorerで発行したClientIDを間違えていた可能性はあります。

    違うクライアントに対し、もう一度、ClientIDを発行しなおしたところ、うまくいきました!

    (直接的な原因ではないと思いますが、昨日、うまくいかなかった時は、Surface Pro 2 (Windows 8.1 ) で生成したClientIDを使用してました)

    さらに、昨日段階では、ModernOdataAppが同梱されていないもので確認したため、

    ハブ形式のWindowsストアアプリをVBで作成し、オンラインヘルプ(crmsdk2013.chm)に記載されていた

    ModernOdataAppの一部コードをVBに変換して実装していたことや

    CommandBarを独自に追加し、CommandBarから、CurrentEnvironment.Initialize()メソッドを呼び出す等、ModernOdataAppとは少し違った呼び出し方(SDKでは、OnNavigatedToから呼び出している)をしていた等の違いはありましたので、どこに差異があったのか原因は自力で探っていきたいと思います。

    この度は、ご丁寧にアドバイスして頂き、本当に有難うございました。

    今後とも宜しくお願いします。

  6. kenakamu より:

    コメントありがとうございます。

    無事問題が解消されたようで安心いたしました。またサンプルについては

    お手数をおかけしてしまい、申し訳ございません。

    このシリーズはもう少し書く予定ですので、またご不明な点やご指摘いただける

    点がございましたら、よろしくお願いいたします。

    – 中村 憲一郎