Dynamics CRM Online 2015 Update 1 新機能: Web API 開発者プレビュー その 13

みなさん、こんにちは。

前回に引き続き Dynamics CRM Online 2015 Update 1 で提供される
Web API 開発者プレビューを T4 テンプレートで作成したクライアント
で利用する方法について紹介します。連載記事になるため以下の記事を
事前にご覧ください。

Web API 開発者プレビュー その 1
Web API 開発者プレビュー その 2
Web API 開発者プレビュー その 10
Web API 開発者プレビュー その 11
Web API 開発者プレビュー その 12

今回は T4 テンプレートで作成したクライアントを利用した Action の
実行を紹介します。Action の詳細は以下記事をご覧ください。

Web API 開発者プレビュー その 7

Action の利用

普段よく使われる組織メッセージとして WhoAmI 要求を試します。

プログラムの実装

1. 前回作成した Visual Studio ソリューションを開き、Program.cs
ファイルを開きます。新しく以下のメソッドを追加します。

public void RunActions(string accessToken)
{
    // クライアントの作成
    CrmODataClient client = new CrmODataClient(new Uri(serverUrl + "/api/data/"));
    client.SendingRequest2 += (s, e) => { e.RequestMessage.SetHeader("Authorization", "Bearer " + accessToken); };
}

2. 以下の using ステートメントが追加されていることを確認します。

using Microsoft.OData.Client;

3. Main メソッドの以下のコードを書き換えて、新しいメソッドを
呼ぶように変更します。

元)  
app.CRUDRun(result.AccessToken);

変更後)
app.RunActions(result.AccessToken);

4. 追加した RunActions メソッドに以下のコードを追加します。
WhoAmI Action を実行します。

// WhoAmI の実行
WhoAmIResponse whoAmIRes = client.WhoAmI().GetValue();

5. 最後に結果を表示します。以下のコードを追加します。上記で
作成したリクエストに対して GetVaue() を実行しています。

// 結果の表示
Console.WriteLine("UserId: {0}", whoAmIRes.UserId);
Console.WriteLine("OrganizationId: {0}", whoAmIRes.OrganizationId);
Console.WriteLine("BusinessUnitId: {0}", whoAmIRes.BusinessUnitId);

動作確認

1. F5 キーを押下してプログラムを実行します。

2. 認証ダイアログが表示されたらログインします。

image

3. WhoAmI の結果が表示されることを確認します。

image

Function の利用

次に Function として、上記で取得した UserId をそのまま利用できる
RetrieveUserPrivileges を試します。

プログラムの実装

1. 上記に続いて、以下のコードを RunActions メソッドに追加します。
上記で取得した UserId を使って RetrieveUserPrivilege を実行します。

// ユーザー権限の取得
var rolePrivileges = client.RetrieveUserPrivileges(whoAmIRes.UserId).Execute();

2. 結果を表示するコードを追加します。

// 結果の表示
foreach (var rolePrivilege in rolePrivileges)
{               
    Console.WriteLine("レベル: {0}, PrivilegeId: {1}", rolePrivilege.Depth, rolePrivilege.PrivilegeId);
}

動作確認

1. F5 キーを押下してプログラムを実行します。

2. 認証ダイアログが表示されたらログインします。

3. RetrieveUserPrivileges の結果が表示されることを確認します。

image

以下に今回追加したメソッドを示します。

public void RunActions(string accessToken)
{
    // クライアントの作成
    CrmODataClient client = new CrmODataClient(new Uri(serverUrl + "/api/data/"));
    client.SendingRequest2 += (s, e) => { e.RequestMessage.SetHeader("Authorization", "Bearer " + accessToken); };

    // WhoAmI の実行
    WhoAmIResponse whoAmIRes = client.WhoAmI().GetValue();

    // 結果の表示
    Console.WriteLine("UserId: {0}", whoAmIRes.UserId);
    Console.WriteLine("OrganizationId: {0}", whoAmIRes.OrganizationId);
    Console.WriteLine("BusinessUnitId: {0}", whoAmIRes.BusinessUnitId);

    // ユーザー権限の取得
    var rolePrivileges = client.RetrieveUserPrivileges(whoAmIRes.UserId).Execute();
           
    // 結果の表示
    foreach (var rolePrivilege in rolePrivileges)
    {               
        Console.WriteLine("レベル: {0}, PrivilegeId: {1}", rolePrivilege.Depth, rolePrivilege.PrivilegeId);
    }
}

まとめ

組織サービスを利用できるのは Web API のメリット
ですが、クライアントを利用することでより容易に
コーディングが行えます。次回はトランザクション処理
を紹介します。お楽しみに!

- 中村 憲一郎