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

みなさん、こんにちは。

前回に引き続き Dynamics CRM Online 2015 Update 1 で提供される
Web API 開発者プレビューについて紹介します。連載記事になるため
第 1 回からご覧ください。

Web API 開発者プレビュー その 1
Web API 開発者プレビュー その 2
Web API 開発者プレビュー その 3
Web API 開発者プレビュー その 4
Web API 開発者プレビュー その 5

今回は Web API 固有の機能である、ビューを利用したレコードをの
取得を紹介します。

概要

ビューを利用したレコードの取得は以下の流れでレコードを取得します。

1. 特定エンティティのビュー一覧を取得します。
2. 取得したビューの情報を利用してレコードの一覧を取得します。

では早速実装していきましょう。

特定エンティティのビュー一覧取得

まず取引先企業エンティティ用のビュー一覧を取得します。

プログラムの実装

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

public async Task RunViewQueries(string accessToken)
{
    // HttpClient の作成
    using (HttpClient httpClient = new HttpClient())
    {
        // Web API アドレスの作成
        string serviceUrl = serverUrl + "/api/data/";
        // ヘッダーの設定
        httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
        httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);

    }
}

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

元)  
Task.WaitAll(Task.Run(async () => await app.RunOptimisticConcurrency(result.AccessToken)));

変更後)
Task.WaitAll(Task.Run(async () => await app.RunViewQueries(result.AccessToken)));

3. 新しく追加した RunViewQueries メソッド内に以下のコードを追加
して、取引先企業用のビュー一覧を取得します。

// 取引先企業ビューの一覧取得
HttpResponseMessage retrieveRes = await httpClient.GetAsync(serviceUrl + "accounts/mscrm.GetSavedQueries");
JToken results = JObject.Parse(retrieveRes.Content.ReadAsStringAsync().Result)["value"];

// ビュー名の漂位j
foreach (JToken result in results)
{
    Console.WriteLine("ビュー名: {0}", result["name"]);

動作確認

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

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

image

3. ビューの一覧が表示されることを確認します。

image

4. Enter キーを押下してプログラムを終了します。

ビューを利用したレコードを一覧の取得

次に取得したビューを利用してレコードの一覧を取得します。

プログラムの実装

1. 上記に続いて、以下のコードを追加します。api/data/accounts
アドレスに savedQuery=<savedQueryId> を渡すことで、該当の
ビュー定義を利用したレコードを取得出来ます。

// 取引先企業レコードの取得
retrieveRes = await httpClient.GetAsync(serviceUrl + "accounts?savedQuery=" + results[0]["savedqueryid"]);
JToken accounts = JObject.Parse(retrieveRes.Content.ReadAsStringAsync().Result)["value"];

2. 取得した結果を表示します。以下のコードを追加します。

// 取引先企業名の表示
foreach (JToken account in accounts)
{
    Console.WriteLine("取引先企業名: {0}", account["name"]);
}

動作確認

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

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

3. ビューの一覧と 1 つめのビュー定義を利用して取得された
取引先企業一覧が表示されることを確認します。

image

個人ビューの利用

上記の例ではシステムビューを取得して利用しましたが、個人ビューを
利用したい場合は GetSavedQueries を GetUserQueries に、savedQuery を
userQuery に書き換えることで対応できます。

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

public async Task RunViewQueries(string accessToken)
{
    // HttpClient の作成
    using (HttpClient httpClient = new HttpClient())
    {
        // Web API アドレスの作成
        string serviceUrl = serverUrl + "/api/data/";
        // ヘッダーの設定
        httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
        httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);

        // 取引先企業ビューの一覧取得
        HttpResponseMessage retrieveRes = await httpClient.GetAsync(serviceUrl + "accounts/mscrm.GetSavedQueries");
        JToken results = JObject.Parse(retrieveRes.Content.ReadAsStringAsync().Result)["value"];

        // ビュー名の漂位j
        foreach (JToken result in results)
        {
            Console.WriteLine("ビュー名: {0}", result["name"]);
        }

        // 取引先企業レコードの取得
        retrieveRes = await httpClient.GetAsync(serviceUrl + "accounts?savedQuery=" + results[0]["savedqueryid"]);
        JToken accounts = JObject.Parse(retrieveRes.Content.ReadAsStringAsync().Result)["value"];

        // 取引先企業名の表示
        foreach (JToken account in accounts)
        {
            Console.WriteLine("取引先企業名: {0}", account["name"]);
        }   
    }
}

まとめ

今回は Web API 固有の機能としてエンティティビューを利用したレコード
取得を紹介しました。クエリを別途作らなくても、保存されているビューを
使用してクエリ出来る点が便利だと思います。

是非お試しください!

- 中村 憲一郎